[bot][A] Диалог: ответы на вопросы о лечении из базы знаний (RAG) #64

Closed
opened 2026-10-04 11:20:55 +03:00 by Eleboba · 0 comments
Owner

Описание

База знаний по КР (#60, #62) готова, но бот её не использует. Пациент между визитами спрашивает о своём состоянии и лечении («что такое флэшбек?», «помогает ли психотерапия при ПТСР?»), а сейчас получает только нейтральную фразу поддержки.

Желаемый результат

  • Кнопка меню «Вопрос о лечении» → бот просит вопрос → ответ из rag.answer(audience="patient") с цитатой и источником, либо «в КР ответа нет, уточните у врача».
  • Свободный текст в idle, похожий на вопрос, без сигналов чек-ина и не о препарате → ответ из базы знаний; если ответа нет — прежняя фраза поддержки.
  • Порядок не меняется: safety и consent до FSM; вопрос о препарате → med_qa (только инструкция ГРЛС, SPEC §7 п.5); побочки / бросить / алкоголь → чек-ин и правила.
  • Признаки вопроса и тексты — в config/texts/knowledge.yaml.

Подзадачи

  • app/dialog/flows/knowledge.py — кнопка, состояние kb.question, knowledge_answer()
  • veteran_daily._idle_text — ветка базы знаний перед фразой поддержки
  • кнопка в menu_reply, IdleButtons, config/texts/dialog.yaml
  • тесты tests/test_dialog_knowledge.py

Анализ

Ограничения и риски

  • В RAG уходит только ctx.text (уже после scrub()), safety проверено движком (acute сюда не доходит).
  • Пациенту — только экстрактивные цитаты без доз (#60); вопросы о дозе → к врачу.
  • Не путать с med_qa: вопросы о собственном препарате по-прежнему только из инструкции.

Как проверить

make lint && make test; демо-консоль/Telegram: меню → «Вопрос о лечении» → «что такое флэшбек?».


Лог выполнения

2026-10-04

  • Что сделано: флоу app/dialog/flows/knowledge.py (кнопка «Вопрос о лечении», состояние kb.question, ответ о дозе → врач); ветка базы знаний в veteran_daily._idle_text перед фразой поддержки; признаки вопроса, бытовые фразы и тексты в config/texts/knowledge.yaml; метки scrub перед «что такое X» больше не ломают вопрос-определение.
  • Результат: 22 теста диалога (маршрутизация: safety → чек-ин → препарат → КР → поддержка), полный набор 779 passed, сценарий Андрея не изменился.
  • Ограничения: разговорные вопросы без общих слов с КР получают фразу поддержки; индекс строится при первом вопросе (~1–5 с).
## Описание База знаний по КР (#60, #62) готова, но бот её не использует. Пациент между визитами спрашивает о своём состоянии и лечении («что такое флэшбек?», «помогает ли психотерапия при ПТСР?»), а сейчас получает только нейтральную фразу поддержки. ## Желаемый результат - Кнопка меню «Вопрос о лечении» → бот просит вопрос → ответ из `rag.answer(audience="patient")` с цитатой и источником, либо «в КР ответа нет, уточните у врача». - Свободный текст в `idle`, похожий на вопрос, без сигналов чек-ина и не о препарате → ответ из базы знаний; если ответа нет — прежняя фраза поддержки. - Порядок не меняется: safety и consent до FSM; вопрос о препарате → `med_qa` (только инструкция ГРЛС, SPEC §7 п.5); побочки / бросить / алкоголь → чек-ин и правила. - Признаки вопроса и тексты — в `config/texts/knowledge.yaml`. ## Подзадачи - [ ] `app/dialog/flows/knowledge.py` — кнопка, состояние `kb.question`, `knowledge_answer()` - [ ] `veteran_daily._idle_text` — ветка базы знаний перед фразой поддержки - [ ] кнопка в `menu_reply`, `IdleButtons`, `config/texts/dialog.yaml` - [ ] тесты `tests/test_dialog_knowledge.py` ## Анализ ### Ограничения и риски - В RAG уходит только `ctx.text` (уже после `scrub()`), safety проверено движком (acute сюда не доходит). - Пациенту — только экстрактивные цитаты без доз (#60); вопросы о дозе → к врачу. - Не путать с `med_qa`: вопросы о собственном препарате по-прежнему только из инструкции. ## Как проверить `make lint && make test`; демо-консоль/Telegram: меню → «Вопрос о лечении» → «что такое флэшбек?». --- ## Лог выполнения ### 2026-10-04 - **Что сделано:** флоу `app/dialog/flows/knowledge.py` (кнопка «Вопрос о лечении», состояние `kb.question`, ответ о дозе → врач); ветка базы знаний в `veteran_daily._idle_text` перед фразой поддержки; признаки вопроса, бытовые фразы и тексты в `config/texts/knowledge.yaml`; метки scrub перед «что такое X» больше не ломают вопрос-определение. - **Результат:** 22 теста диалога (маршрутизация: safety → чек-ин → препарат → КР → поддержка), полный набор 779 passed, сценарий Андрея не изменился. - **Ограничения:** разговорные вопросы без общих слов с КР получают фразу поддержки; индекс строится при первом вопросе (~1–5 с).
Eleboba added this to the Этап 1 · Ветераны СВО milestone 2026-10-04 11:20:55 +03:00
Eleboba added the featuresize/1lane/Astage/veteransP1bot labels 2026-10-04 11:20:55 +03:00
Eleboba self-assigned this 2026-10-04 11:20:55 +03:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MedITron/PTSRaiAgent#64