feat(bot): tool-using chat agent over RAG, ЕМИАС record and drug-safety reference
CI / ruff · pytest (pull_request) Successful in 2m10s

Free-text treatment and medication questions go to an LLM agent with read-only tools bound to the current
patient: guideline search (RAG, doses stripped), ЕМИАС record mock (diagnoses, comorbidities, intolerances,
other specialists' drugs, current prescription), drug info (composition, contraindications, interactions)
and a deterministic patient-specific check. Providers: OpenRouter (temporary, synthetic data only) and an
offline mock; GigaChat to follow. Scrubbed input only, forbidden-output filter, any failure falls back to
the existing extractive RAG / instruction answers. Off unless OPENROUTER_API_KEY or CHAT_AGENT=mock.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-04 14:39:16 +03:00
co-authored by Claude Opus 5.5
parent 2f1f8a8f24
commit 6dda5f9b30
14 changed files with 1253 additions and 2 deletions
+146
View File
@@ -0,0 +1,146 @@
# Структурированный справочник безопасности препаратов для чат-агента (состав, противопоказания, взаимодействия).
# ПРОТОТИП: краткий пересказ инструкций по медицинскому применению (ГРЛС), сверить с действующей инструкцией и
# утвердить у психиатра (#8). Состав (вспомогательные вещества) зависит от производителя — здесь пример для
# формы из назначения; агент обязан это оговаривать.
#
# Теги совпадают с data/emias/records.yaml:
# condition tags (conditions[].tags) → cautions[].when_condition
# allergy tags (allergies[].tags) → composition.excipient_tags
# medicine class (other_medications.classes) → interactions[].with_class
# Детерминированная проверка — app/llm/agent/drug_safety.py; LLM только пересказывает её результат.
common_ssri: &ssri
contraindications:
- "Повышенная чувствительность к компонентам препарата."
- "Одновременный приём ингибиторов МАО и 14 дней после их отмены (риск серотонинового синдрома)."
cautions:
- when_condition: ulcer_history
severity: high
text: "Язвенная болезнь в анамнезе: СИОЗС повышают риск желудочно-кишечных кровотечений, особенно вместе с НПВС или антикоагулянтами."
- when_condition: epilepsy
severity: medium
text: "Эпилепсия: препарат применяют с осторожностью, при появлении судорог его отменяет врач."
- when_condition: bipolar
severity: high
text: "Биполярное расстройство: возможен переход в маниакальную фазу, нужен контроль врача."
interactions:
- with_class: nsaid
severity: high
text: "НПВС (ибупрофен, диклофенак, кеторолак и др.) вместе с СИОЗС повышают риск кровотечений, прежде всего желудочно-кишечных."
- with_class: anticoagulant
severity: high
text: "Антикоагулянты (варфарин и др.): возрастает риск кровотечений, нужен более частый контроль свёртываемости."
- with_class: triptan
severity: medium
text: "Триптаны (суматриптан и др.): описан риск серотонинового синдрома, о сочетании должен знать врач."
- with_class: serotonergic_opioid
severity: high
text: "Трамадол и другие серотонинергические опиоиды: риск серотонинового синдрома и судорог."
- with_class: maoi
severity: high
text: "Ингибиторы МАО: сочетание противопоказано."
- with_class: alcohol
severity: medium
text: "Алкоголь во время лечения не рекомендуется: ухудшает сон и настроение, усиливает сонливость и головокружение."
pregnancy: "При беременности или её планировании решение о продолжении лечения принимает врач."
drugs:
сертралин:
aliases: [sertraline, золофт, zoloft]
class: "антидепрессант, СИОЗС"
<<: *ssri
contraindications:
- "Повышенная чувствительность к компонентам препарата."
- "Одновременный приём ингибиторов МАО и 14 дней после их отмены."
- "Одновременный приём пимозида."
composition:
form: "таблетки, покрытые плёночной оболочкой"
active: "сертралина гидрохлорид"
excipients: [кальция гидрофосфат, целлюлоза микрокристаллическая, гипролоза, карбоксиметилкрахмал натрия, магния стеарат, гипромеллоза, титана диоксид, макрогол, полисорбат 80]
excipient_tags: []
note: "Пример состава оригинального препарата; у дженериков состав может отличаться (в части из них есть лактоза) — сверить с инструкцией на упаковке."
source: "ГРЛС, инструкция по медицинскому применению сертралина (пересказ для прототипа)"
пароксетин:
aliases: [paroxetine, паксил, paxil, рексетин]
class: "антидепрессант, СИОЗС"
<<: *ssri
contraindications:
- "Повышенная чувствительность к компонентам препарата."
- "Одновременный приём ингибиторов МАО и 14 дней после их отмены."
- "Одновременный приём тиоридазина или пимозида."
composition:
form: "таблетки, покрытые плёночной оболочкой"
active: "пароксетина гидрохлорида гемигидрат"
excipients: [кальция гидрофосфата дигидрат, карбоксиметилкрахмал натрия, магния стеарат, гипромеллоза, титана диоксид, макрогол, полисорбат 80]
excipient_tags: []
note: "Пример состава; у дженериков возможны отличия (в том числе лактоза) — сверить с инструкцией на упаковке."
pregnancy: "При беременности или её планировании решение принимает врач; для пароксетина в инструкции отдельно указан риск для плода в первом триместре."
source: "ГРЛС, инструкция по медицинскому применению пароксетина (пересказ для прототипа)"
эсциталопрам:
aliases: [escitalopram, ципралекс, cipralex, селектра]
class: "антидепрессант, СИОЗС"
<<: *ssri
contraindications:
- "Повышенная чувствительность к компонентам препарата."
- "Одновременный приём ингибиторов МАО и 14 дней после их отмены."
- "Удлинение интервала QT (врождённое или приобретённое) и приём препаратов, удлиняющих QT."
composition:
form: "таблетки, покрытые плёночной оболочкой"
active: "эсциталопрама оксалат"
excipients: [целлюлоза микрокристаллическая, кремния диоксид коллоидный, тальк, кроскармеллоза натрия, магния стеарат, гипромеллоза, макрогол, титана диоксид]
excipient_tags: []
note: "Пример состава оригинального препарата; у дженериков состав может отличаться — сверить с инструкцией на упаковке."
source: "ГРЛС, инструкция по медицинскому применению эсциталопрама (пересказ для прототипа)"
флуоксетин:
aliases: [fluoxetine, прозак, prozac, профлузак]
class: "антидепрессант, СИОЗС"
<<: *ssri
contraindications:
- "Повышенная чувствительность к компонентам препарата."
- "Одновременный приём ингибиторов МАО и 5 недель после отмены флуоксетина перед их назначением."
- "Одновременный приём тиоридазина или пимозида."
composition:
form: "капсулы"
active: "флуоксетина гидрохлорид"
excipients: [крахмал кукурузный, диметикон, желатин (оболочка капсулы), титана диоксид, красители]
excipient_tags: [gelatin]
note: "Пример состава; у разных производителей отличается (в части капсул есть лактоза) — сверить с инструкцией на упаковке."
source: "ГРЛС, инструкция по медицинскому применению флуоксетина (пересказ для прототипа)"
ибупрофен:
aliases: [ibuprofen, нурофен, nurofen, миг]
class: "нестероидный противовоспалительный препарат (НПВС)"
classes: [nsaid]
contraindications:
- "Эрозивно-язвенные поражения желудка и кишечника в стадии обострения, желудочно-кишечное кровотечение."
- "Повышенная чувствительность к компонентам, «аспириновая» астма."
cautions:
- when_condition: ulcer_history
severity: high
text: "Язвенная болезнь в анамнезе: НПВС применяют с осторожностью из-за риска обострения и кровотечения."
interactions:
- with_class: ssri
severity: high
text: "Вместе с антидепрессантами группы СИОЗС повышается риск кровотечений."
- with_class: anticoagulant
severity: high
text: "С антикоагулянтами возрастает риск кровотечений."
composition:
form: "таблетки, покрытые оболочкой"
active: "ибупрофен"
excipients: [кроскармеллоза натрия, натрия лаурилсульфат, натрия цитрат, стеариновая кислота, кремния диоксид коллоидный, сахароза, тальк]
excipient_tags: []
note: "Состав зависит от производителя — сверить с инструкцией на упаковке."
source: "ГРЛС, инструкция по медицинскому применению ибупрофена (пересказ для прототипа)"
# Классы препаратов из назначений психиатра (для проверки «другой препарат × текущая терапия»).
drug_classes:
ssri: [сертралин, пароксетин, эсциталопрам, флуоксетин, циталопрам, флувоксамин]
# Подписи тегов непереносимостей для ответа пациенту.
allergy_labels:
lactose: "лактоза"
gelatin: "желатин"