Никита-version сейчас интегрируется в production pipeline.
Контекст
Текущий pre-redesign recognition (single recognize_gpt prompt) имеет ограничения:
- Multi-date / multi-page mixed content — данные смешиваются или теряются
- Bounding-box validation сложно прикрутить к плоскому output
- Path-dependence: один промпт делает classification + extraction + medical-context — изменение в одном месте ломает другое
Идея
Промежуточное представление документа как набор fact’ов с position / source / context метаданными. Извлечение fact’ов на одном этапе → агрегация и интерпретация на следующем.
Преимущества:
- Multi-date естественно: каждый fact несёт дату → агрегация по дате становится прямой операцией
- Bounding-box: каждый fact несёт координаты → visual review реализуем
- Modular: можно изменять fact-extraction отдельно от aggregation/interpretation
История
- Ильдар развивал идею “хранить через текст” как промежуточный variant между OCR и интерпретацией. Васина “SQL-метафора” (Apr 1 daily, [Н6]) — отправная точка для размышления.
- Прототип Ильдара (BG-1059) на ветке
feat/universal-bbox-editor(Mar 29 — Apr 1, 5 коммитов, +3931 строк). Включает: universal fact-based extraction, fact-adapter в Annotate UI, model selection для fact-extraction strategy, bbox strategy + fix display fact’ов. Реализация вapps/benchmark+packages/ocr-core. Сессии разработки:c28bb497(Apr 9-10). - Версия Никиты на ветке
feat/image-recognize-to-fhir(active Apr 22-23, 13+ коммитов, ~8125 / -8767 строк изменений). Включает:feat(recognize): unified image-based pipeline with CoT prompt— главный entry pointfeat(fhir-context): multimodal narrative → FHIR with visual crosscheck+in-project narrative → FHIR conversion в TypeScript- Multi-date documents support (per-param test_date, одна DocumentReference на дату)
- Date-attribution rules + cross-page dedup
- Two-phase save (preliminary POST → enrich PUT)
- HEIC converter
- Apr 21 (session
1d3c504b): ревью Никитиного кода + ребейз ветки Ильдара на staging →feat/fact-extraction-rebase. Конфликтов с fact-extraction кодом не было. - Сейчас интегрируется Никитина версия в production pipeline (Артур больше не lead на этой задаче). Adjacent:
feat/recognize-models-from-config(Артём, Apr 24) — connected refactor.
Что нужно для production
- Cutover criteria: что должна fact-based version показать чтобы заменить single-prompt
- Backward compatibility / migration: что делать с уже-распознанными тестами
- Bounding-box integration с UI (см. bounding-box-validation — Ильдар’s interface)
- Multi-date / multi-page test cases — confirmed работают
Open items в Никитиной integration (Apr 22-23 thread, #ai-engineering)
- PDF→image conversion обязателен — pure PDF не работает в Никитиной pipeline. Все PDFs конвертятся в изображения (Apr 21).
narrative-to-fhirportage вpackages/analysis-core/src/services/narrative-to-fhir/— Никита портировал из fhir-services. Save-after-recognize-then-edit pattern (preliminary POST → enrich PUT).- Model allocation — full audit + direction в gemini-flash-vs-pro-allocation (active). Кратко: везде Gemini, Flash для extraction (5 prompts), Pro для reasoning (3 prompts), helper-prompts на DEFAULT_MODEL переключаются.
parameter_typeenum в prompt — Никита обещал заменить старый enum (QUANTITATIVE/QUALITATIVE/…) на FHIRvalue[x]. Согласовано Apr 21, к Apr 23 Артём взял на себя fix.- Перенос промптов в Langfuse — сейчас в файлах для удобства, потом переедут в LF.
- TypeScript confidence — Никита: “есть сомнения по тайпскрипту”. Apr 21-23 ребейз + тестирование Артёма выявили silent failures (json пустой при ошибках) — поправил на explicit-error.
- Cross-page deduplication & date-attribution — реализовано в multi-date документах (одна
DocumentReferenceна дату).
Note: Apr 24 Ильдар Slack-thread про “facts → dual rendering” — это другая тема (generation, не recognition). См. health-facts-as-generation-substrate.
Связано
- recognition — parent concept page
- bounding-box-validation — companion track (visual validation)
- lab-status-vs-derived-interpretation — adjacent (recognition как source of truth)
- doctor-patient-prompts-not-fork — adjacent (downstream использование recognition output)
- gemini-flash-vs-pro-allocation — model allocation per prompt в pipeline
Источники
- Apr 22 Артём checklist, accessed 2026-05-17, https://realaicorp.slack.com/archives/C094GRT3CBY/p1776862999950769?thread_ts=1775239729.454809 — Apr 23 Никита model split flash/pro: https://realaicorp.slack.com/archives/C094GRT3CBY/p1776954996825049?thread_ts=1775239729.454809
- Apr 24 Ильдар facts → dual rendering: https://realaicorp.slack.com/archives/C094GRT3CBY/p1777040691399849?thread_ts=1776356279.568619.
Сноски
-
2026-04-01 transcript “Портирование LOINC” — Васина SQL-метафора ([Н6]) + multi-date обсуждение ([О4]), accessed 2026-05-17, https://github.com/Realai-plus/meeting-digests/blob/main/data/digest/2026/04/2026-04-01T11%3A07%3A08.000Z_портирование_loinc_01KN4BKJSP8PSGBSN23VFZ25M0.md. ↩
-
Сессия
ildar/c28bb497, 2026-04-09 — `** (Apr 9-10 2026. ↩ -
Сессия
ildar/1d3c504b, 2026-04-21 — `** (Apr 21 2026. ↩ -
Slack threads (
#ai-engineering): ↩ -
Mar 29 PR #190 (
feat/image-recognize-to-fhir): mentioned BG-1059 “Fact-based document extraction: new prompt anyOf schema”, accessed 2026-05-17, https://github.com/Realai-plus/bloodgpt-for-business/pull/190. ↩