feat(bot): tool-using chat agent over RAG, ЕМИАС record and drug-safety reference
CI / ruff · pytest (pull_request) Successful in 2m10s
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:
@@ -0,0 +1,92 @@
|
||||
# Мок электронной медицинской карты ЕМИАС (интеграция ЕМИАС/ЕГИСЗ — адаптер, SPEC §9). ТОЛЬКО СИНТЕТИКА.
|
||||
# Ключ — синтетический СНИЛС из scripts/seed_demo.py; в рантайме превращается в токен через pseudo_id(), так что
|
||||
# в чат-агента не попадают ни СНИЛС, ни ФИО: только клинические поля ниже.
|
||||
#
|
||||
# Поля:
|
||||
# diagnoses — диагнозы МКБ-10 из карты (ставит врач; агент их не озвучивает как «диагноз», только учитывает)
|
||||
# conditions — сопутствующие состояния и анамнез; `tags` сверяются с data/meds/drug_safety.yaml
|
||||
# allergies — аллергии и непереносимости; `tags` сверяются с составом препаратов (вспомогательные вещества)
|
||||
# other_medications — назначения других специалистов; `classes` сверяются со взаимодействиями
|
||||
# pregnancy — для женщин: беременность/лактация (null — нет данных)
|
||||
# Текущее психотропное назначение приходит из таблицы prescriptions (мок МИС, app/integrations/mis_mock.py).
|
||||
|
||||
records:
|
||||
"900-000-013 34": # Андрей С., 34, ветеран СВО — герой демо
|
||||
diagnoses:
|
||||
- {code: "F43.1", name: "Посттравматическое стрессовое расстройство"}
|
||||
- {code: "F32.1", name: "Депрессивный эпизод средней степени"}
|
||||
- {code: "T93.2", name: "Последствия осколочного ранения нижней конечности"}
|
||||
conditions:
|
||||
- {name: "Язвенная болезнь желудка в анамнезе (2019), ремиссия", tags: [ulcer_history]}
|
||||
- {name: "Хронический болевой синдром после ранения", tags: [chronic_pain]}
|
||||
allergies:
|
||||
- {name: "Непереносимость лактозы", tags: [lactose]}
|
||||
other_medications:
|
||||
- {drug: "ибупрофен", how: "по требованию при боли", prescribed_by: "хирург", classes: [nsaid]}
|
||||
pregnancy: null
|
||||
|
||||
"900-000-041 01": # Дмитрий В., 41, ветеран
|
||||
diagnoses:
|
||||
- {code: "F43.1", name: "Посттравматическое стрессовое расстройство"}
|
||||
conditions:
|
||||
- {name: "Артериальная гипертензия", tags: [hypertension]}
|
||||
allergies: []
|
||||
other_medications:
|
||||
- {drug: "амлодипин", how: "ежедневно", prescribed_by: "терапевт", classes: [antihypertensive]}
|
||||
pregnancy: null
|
||||
|
||||
"900-000-037 02": # Сергей П., 37, ветеран
|
||||
diagnoses:
|
||||
- {code: "F43.1", name: "Посттравматическое стрессовое расстройство"}
|
||||
conditions:
|
||||
- {name: "Мигрень", tags: [migraine]}
|
||||
allergies: []
|
||||
other_medications:
|
||||
- {drug: "суматриптан", how: "при приступе мигрени", prescribed_by: "невролог", classes: [triptan]}
|
||||
pregnancy: null
|
||||
|
||||
"900-000-052 03": # Николай Ф., 52, ветеран
|
||||
diagnoses:
|
||||
- {code: "F43.1", name: "Посттравматическое стрессовое расстройство"}
|
||||
- {code: "F10.1", name: "Пагубное употребление алкоголя"}
|
||||
conditions:
|
||||
- {name: "Фибрилляция предсердий", tags: [atrial_fibrillation]}
|
||||
allergies: []
|
||||
other_medications:
|
||||
- {drug: "варфарин", how: "ежедневно под контролем МНО", prescribed_by: "кардиолог", classes: [anticoagulant]}
|
||||
pregnancy: null
|
||||
|
||||
"900-000-023 04": # Анна Л., 23
|
||||
diagnoses:
|
||||
- {code: "F32.1", name: "Депрессивный эпизод средней степени"}
|
||||
conditions: []
|
||||
allergies: []
|
||||
other_medications: []
|
||||
pregnancy: {status: "не беременна, планирует беременность в течение года"}
|
||||
|
||||
"900-000-034 05": # Ирина К., 34
|
||||
diagnoses:
|
||||
- {code: "F32.1", name: "Депрессивный эпизод средней степени"}
|
||||
conditions: []
|
||||
allergies: []
|
||||
other_medications: []
|
||||
pregnancy: null
|
||||
|
||||
"900-000-029 06": # Ольга Н., 29
|
||||
diagnoses:
|
||||
- {code: "F32.1", name: "Депрессивный эпизод средней степени"}
|
||||
- {code: "F41.1", name: "Генерализованное тревожное расстройство"}
|
||||
conditions: []
|
||||
allergies: []
|
||||
other_medications: []
|
||||
pregnancy: null
|
||||
|
||||
"900-000-045 07": # Павел Р., 45
|
||||
diagnoses:
|
||||
- {code: "F33.4", name: "Рекуррентное депрессивное расстройство, ремиссия"}
|
||||
conditions:
|
||||
- {name: "Эпилепсия, ремиссия 5 лет", tags: [epilepsy]}
|
||||
allergies: []
|
||||
other_medications:
|
||||
- {drug: "вальпроевая кислота", how: "ежедневно", prescribed_by: "невролог", classes: [anticonvulsant]}
|
||||
pregnancy: null
|
||||
@@ -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: "желатин"
|
||||
Reference in New Issue
Block a user