feat(bot): med_qa — ответы о препарате только по выдержкам ГРЛС #48

Merged
Eleboba merged 1 commits from feat/15-med-qa into dev 2026-10-03 15:33:55 +03:00
Owner

Что меняется

Ответы о препарате строятся только по выдержке инструкции ГРЛС (SPEC §7 п.5): app/llm/med_qa.py определяет тему, находит раздел через DrugInfo и выбирает из него релевантные предложения. LLM только перефразирует выдержку, проверки шлюза и проверка на добавленный контент остаются в силе. Если ответа в инструкции нет или вопрос касается дозы, функция возвращает None, и вызывающий отправляет fallback_text() («уточните у врача»).

Closes #15

Зона

A

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

uv run pytest tests/test_llm_med_qa.py -q; make lint test

API: await med_qa(inn, scrubbed_question, topic="onset"|"alcohol"|"side_effects"|"quit_intent"|..., drug_info=None) -> MedAnswer | None, fallback_text() -> str.

Чек-лист

  • rebase на origin/dev
  • make lint + make test зелёные
  • лог в issue (### YYYY-MM-DD)
  • нет ПДн в логах, нет реальных данных, нет секретов
  • общие файлы не тронуты (в config/texts/phrases.yaml добавлена одна строка med_answer)
## Что меняется Ответы о препарате строятся только по выдержке инструкции ГРЛС (SPEC §7 п.5): `app/llm/med_qa.py` определяет тему, находит раздел через `DrugInfo` и выбирает из него релевантные предложения. LLM только перефразирует выдержку, проверки шлюза и проверка на добавленный контент остаются в силе. Если ответа в инструкции нет или вопрос касается дозы, функция возвращает `None`, и вызывающий отправляет `fallback_text()` («уточните у врача»). Closes #15 ## Зона A ## Как проверить `uv run pytest tests/test_llm_med_qa.py -q`; `make lint test` API: `await med_qa(inn, scrubbed_question, topic="onset"|"alcohol"|"side_effects"|"quit_intent"|..., drug_info=None) -> MedAnswer | None`, `fallback_text() -> str`. ## Чек-лист - [x] rebase на origin/dev - [x] make lint + make test зелёные - [x] лог в issue (### YYYY-MM-DD) - [x] нет ПДн в логах, нет реальных данных, нет секретов - [x] общие файлы не тронуты (в `config/texts/phrases.yaml` добавлена одна строка `med_answer`)
Eleboba added 1 commit 2026-10-03 15:33:16 +03:00
feat(bot): med_qa answers about the drug only from ГРЛС excerpts
CI / ruff · pytest (pull_request) Successful in 21s
51cc259002
Topic from engine or keyword classifier, section via integrations.drug_info,
sentence retrieval by keyword overlap (dosing sentences dropped), LLM only
rephrases the excerpt through gateway.phrase("med_answer") with forbidden-output
and added-content guards; dose questions and missing answers -> None + fallback text.

Refs #15

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Eleboba merged commit 17425fe29e into dev 2026-10-03 15:33:55 +03:00
Eleboba deleted branch feat/15-med-qa 2026-10-03 15:33:55 +03:00
Sign in to join this conversation.