[bot][A] med_qa: ответы о препарате только по выдержкам ГРЛС #15
Notifications
Due Date
No due date set.
Depends on
Reference: MedITron/PTSRaiAgent#15
Reference in New Issue
Block a user
Описание
Дни 2, 5, 10 демо: тошнота на сертралине, «брошу», алкоголь. SPEC §7 п.5: только по инструкции через
DrugInfo; если ответа нет — «уточните у врача».Желаемый результат
app/llm/med_qa.py:med_qa(inn, question_scrubbed) -> Answer(text, source_ref) | None— поиск раздела выдержки по ключевым словам, LLM только перефразирует найденный фрагмент (фильтр запретов шлюза). Без изменения доз и советов по препаратам. Тесты на mock.Зона и владение файлами
Lane A (бот, Егор) — владеет:
app/dialog/**,app/channels/**,app/llm/**,config/texts/**,tests/test_dialog_*.py,tests/test_telegram*.py.Замороженные контракты (менять только отдельным мелким PR с пингом всех):
app/core/types.py,app/dialog/contracts.py,app/api/schemas.py,app/integrations/base.py,app/services/contracts.py,app/main.py,app/config.py,config/modules.yaml,config/rules.yaml,config/scales/*,pyproject.toml/uv.lock,docker-compose.yml,Makefile.Лог выполнения
2026-10-03
2026-10-03
app/llm/med_qa.py—med_qa(inn, question, *, topic=None, drug_info=None) -> MedAnswer | None(text,section,source,phrased_by_llm) иfallback_text(). Тема берётся из явногоtopicдвижка (поддерживаются коды разделов и алиасыquit_intent→onset,alcohol_interaction→alcohol,nausea→side_effects) либо из классификатора по ключевым словам. Раздел берётся черезintegrations.drug_info.sections(inn), из него выбираются до 3 самых релевантных предложений (группы симптомов, ключевые слова раздела, пересечение основ слов). LLM только перефразирует выдержку черезgateway.phrase("med_answer"). Тексты (запасной ответ, вступление, приписка про врача) лежат вconfig/texts/med_qa.yaml, вphrases.yamlдобавлен шаблонmed_answer: "{excerpt}".tests/test_llm_med_qa.py(демо-дни 2/5/10, явная тема важнее классификатора, выбор раздела, нет раздела → None, вопросы о дозе → None, запрещённый или «выдуманный» ответ LLM → показывается сама выдержка, mock офлайн).make lint test— 500 passed.мг, «доза может увеличиваться») не показываются никогда. Любой вопрос о дозе уходит к врачу. Перефразировка LLM отклоняется, если в ней появились новые числа или больше половины основ слов отсутствуют в выдержке. Приписка «любые изменения решает ваш врач» добавляется вне LLM. Реальных выдержек ГРЛС в коде нет: до #14NoDrugInfoвозвращает [], иmed_qaотдаёт None (тогда вызывающий отправляетfallback_text()).[bot] med_qa: ответы о препарате только по выдержкам ГРЛСto [bot][A] med_qa: ответы о препарате только по выдержкам ГРЛССделано в PR #48 (смержен); закрываю вручную — в описании PR не было
Closes.Сделано в PR #48 (смержен). Закрываю вручную: в описании PR не было
Closes. Зависимость от #14 снята:med_qaработает через протоколDrugInfo, настоящие выдержки ГРЛС подключит #14.