Ответы о препарате строятся только по выдержке инструкции ГРЛС (SPEC §7 п.5): app/llm/med_qa.py определяет тему, находит раздел через DrugInfo и выбирает из него релевантные предложения. LLM только перефразирует выдержку, проверки шлюза и проверка на добавленный контент остаются в силе. Если ответа в инструкции нет или вопрос касается дозы, функция возвращает None, и вызывающий отправляет fallback_text() («уточните у врача»).
нет ПДн в логах, нет реальных данных, нет секретов
общие файлы не тронуты (в 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`)
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>
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.
Что меняется
Ответы о препарате строятся только по выдержке инструкции ГРЛС (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 testAPI:
await med_qa(inn, scrubbed_question, topic="onset"|"alcohol"|"side_effects"|"quit_intent"|..., drug_info=None) -> MedAnswer | None,fallback_text() -> str.Чек-лист
config/texts/phrases.yamlдобавлена одна строкаmed_answer)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>