Аудит RAG (#60) после мержа нашёл три подтверждённых дефекта:
Страница в цитате на единицу меньше реальной у ~1.2% предложений (27 из ~2300). Когда «Комментарии: ...» или продолжение абзаца приклеивается к абзацу с предыдущей страницы, page_end фрагмента не обновляется. Пример: «[КР ПТСР 2023, стр. 22]», а текст на стр. 23.
Метки обезличивания ломают ответ. После scrub() остаются [NAME], [PHONE], и поиск считает их словами, которых нет в корпусе. «Иван Петров, 89161234567, что такое ПТСР» → покрытие 0.06 → «ответа нет». В боте scrub() вызывается всегда.
Ответ из чужого документа. «ТМС при депрессии» → цитата из КР ПТСР про пациентов с ПТСР. Если в вопросе названо заболевание, приоритет должен быть у профильной КР.
Желаемый результат
page_end учитывает страницу последней приклеенной строки; проверка по тексту PDF постранично — 0 ошибок вне страниц со схемами.
Офлайн, детерминизм, без новых зависимостей. Выявленное, но не входящее сюда: часть разговорных вопросов уходит в «уточните у врача»; лексический поиск иногда пропускает в ответ нерелевантный отрывок («обильное питьё» на вопрос про алкоголь). Это отдельная задача.
Как проверить
make lint && make test; uv run python -m app.llm.rag "Иван Петров, что такое ПТСР" → ответ.
Лог выполнения
2026-10-04
Что сделано: метка ⟦стр. N⟧ в конвертере + учёт страниц в чанкере; фильтр меток scrub в токенизаторе; doc_cues (буст профильной КР ×2 в поиске и при выборе отрывка). Регрессионные тесты.
Результат: ошибочных страниц в цитатах 24 → 3 (остались строки бланков шкал, разорванные страницей); вопрос с [NAME]/[PHONE] получает тот же ответ; «ТМС при депрессии» → КР Депрессия. Отложенный набор (22 новых вопроса): hit@3 врач 10/11 → 11/11, пациент 6/11 → 7/11; контрольный набор без изменений (15/18).
Осталось (вне задачи): разговорные вопросы пациента часто уходят в «уточните у врача» (11 из 27); иногда в ответ проходит нерелевантный, но дословный отрывок.
## Описание
Аудит RAG (#60) после мержа нашёл три подтверждённых дефекта:
1. **Страница в цитате на единицу меньше реальной** у ~1.2% предложений (27 из ~2300). Когда «Комментарии: ...» или продолжение абзаца приклеивается к абзацу с предыдущей страницы, `page_end` фрагмента не обновляется. Пример: «[КР ПТСР 2023, стр. 22]», а текст на стр. 23.
2. **Метки обезличивания ломают ответ.** После `scrub()` остаются `[NAME]`, `[PHONE]`, и поиск считает их словами, которых нет в корпусе. «Иван Петров, 89161234567, что такое ПТСР» → покрытие 0.06 → «ответа нет». В боте `scrub()` вызывается всегда.
3. **Ответ из чужого документа.** «ТМС при депрессии» → цитата из КР ПТСР про пациентов с ПТСР. Если в вопросе названо заболевание, приоритет должен быть у профильной КР.
## Желаемый результат
- `page_end` учитывает страницу последней приклеенной строки; проверка по тексту PDF постранично — 0 ошибок вне страниц со схемами.
- Метки `[A-Z_]` не участвуют в поиске и покрытии.
- Заболевание в вопросе (депрессия / ПТСР) повышает профильный документ (`config/rag/sources.yaml`, `doc_cues`).
- Регрессионные тесты на все три пункта.
## Анализ
### Затрагиваемые файлы
| Файл | Что меняется |
|---|---|
| `app/llm/rag/corpus.py` | page_end у юнитов |
| `app/llm/rag/index.py` | фильтр меток, буст документа по заболеванию |
| `config/rag/sources.yaml` | `doc_cues` |
| `tests/test_llm_rag.py` | регрессии |
### Ограничения и риски
Офлайн, детерминизм, без новых зависимостей. Выявленное, но не входящее сюда: часть разговорных вопросов уходит в «уточните у врача»; лексический поиск иногда пропускает в ответ нерелевантный отрывок («обильное питьё» на вопрос про алкоголь). Это отдельная задача.
## Как проверить
`make lint && make test`; `uv run python -m app.llm.rag "Иван Петров, что такое ПТСР"` → ответ.
---
## Лог выполнения
### 2026-10-04
- **Что сделано:** метка ⟦стр. N⟧ в конвертере + учёт страниц в чанкере; фильтр меток scrub в токенизаторе; doc_cues (буст профильной КР ×2 в поиске и при выборе отрывка). Регрессионные тесты.
- **Результат:** ошибочных страниц в цитатах 24 → 3 (остались строки бланков шкал, разорванные страницей); вопрос с [NAME]/[PHONE] получает тот же ответ; «ТМС при депрессии» → КР Депрессия. Отложенный набор (22 новых вопроса): hit@3 врач 10/11 → 11/11, пациент 6/11 → 7/11; контрольный набор без изменений (15/18).
- **Осталось (вне задачи):** разговорные вопросы пациента часто уходят в «уточните у врача» (11 из 27); иногда в ответ проходит нерелевантный, но дословный отрывок.
Eleboba
added this to the Этап 1 · Ветераны СВО milestone 2026-10-04 04:24:23 +03:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Описание
Аудит RAG (#60) после мержа нашёл три подтверждённых дефекта:
page_endфрагмента не обновляется. Пример: «[КР ПТСР 2023, стр. 22]», а текст на стр. 23.scrub()остаются[NAME],[PHONE], и поиск считает их словами, которых нет в корпусе. «Иван Петров, 89161234567, что такое ПТСР» → покрытие 0.06 → «ответа нет». В ботеscrub()вызывается всегда.Желаемый результат
page_endучитывает страницу последней приклеенной строки; проверка по тексту PDF постранично — 0 ошибок вне страниц со схемами.[A-Z_]не участвуют в поиске и покрытии.config/rag/sources.yaml,doc_cues).Анализ
Затрагиваемые файлы
app/llm/rag/corpus.pyapp/llm/rag/index.pyconfig/rag/sources.yamldoc_cuestests/test_llm_rag.pyОграничения и риски
Офлайн, детерминизм, без новых зависимостей. Выявленное, но не входящее сюда: часть разговорных вопросов уходит в «уточните у врача»; лексический поиск иногда пропускает в ответ нерелевантный отрывок («обильное питьё» на вопрос про алкоголь). Это отдельная задача.
Как проверить
make lint && make test;uv run python -m app.llm.rag "Иван Петров, что такое ПТСР"→ ответ.Лог выполнения
2026-10-04