feat(bot): LLM gateway with GigaChat and offline mock providers
CI / ruff · pytest (pull_request) Successful in 23s
CI / ruff · pytest (pull_request) Successful in 23s
Single entry point app/llm/gateway.py: extract_item, extract_checkin, risk_classify, phrase, summarize_for_doctor. Two-level design: LLMProvider (transport, GigaChat) and LLMTasks (PromptedTasks over a provider, or rule-based MockTasks). Shared policy in the gateway: assert_scrubbed backstop, confidence threshold 0.5, risk failure -> NONE, forbidden-output filter with config/texts/phrases.yaml fallbacks. Refs #7 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
# Шаблоны реплик бота (зона clinical вычитывает формулировки).
|
||||
# Используются (1) как базовый смысл, который GigaChat перефразирует, (2) как ответ mock-провайдера,
|
||||
# (3) как запасной ответ, если LLM недоступна или её ответ не прошёл фильтр запретов.
|
||||
# Подстановки {name} берутся из контекста FSM; отсутствующие подставляются пустой строкой.
|
||||
# Правила текстов: без диагнозов, без советов по дозам, без обещаний конфиденциальности сверх реальной.
|
||||
|
||||
phrases:
|
||||
default: "Спасибо, что поделились. Я на связи и передам важное вашему врачу."
|
||||
greeting: "Здравствуйте! Я помогу вам на время лечения: буду напоминать о приёме препарата и спрашивать о самочувствии. Всё важное увижу не только я, но и ваш врач."
|
||||
med_reminder: "Напоминаю о приёме препарата {drug}. Отметьте, пожалуйста, когда примете."
|
||||
med_taken_ack: "Отлично, отметил приём. Спасибо!"
|
||||
checkin_ack: "Спасибо, записал. Хорошего вам дня."
|
||||
ask_clarify: "Не совсем понял ваш ответ. Можете выбрать вариант кнопкой или описать чуть подробнее?"
|
||||
support: "Спасибо, что рассказываете, как вы. Такие дни бывают, и хорошо, что вы продолжаете отмечать самочувствие."
|
||||
side_effect_ack: "Спасибо, что сообщили о самочувствии. Я отмечу это для вашего врача."
|
||||
nausea_info: "Тошнота часто встречается в первые дни приёма и, по инструкции к препарату, обычно проходит за 1–2 недели. Ваш врач назначил приём после еды. Если станет хуже — сообщите, я передам врачу."
|
||||
quit_intent: "Понимаю, что сейчас тяжело. Эффект таких препаратов обычно наступает не сразу, а через несколько недель. Пожалуйста, не прекращайте приём самостоятельно — я сообщу вашему врачу, чтобы он с вами связался."
|
||||
alcohol_info: "Спасибо, что честно рассказали. В инструкции к препарату есть предупреждение о совместном приёме с алкоголем, а алкоголь сам по себе ухудшает сон. Я передам это врачу и предложу записаться на приём пораньше."
|
||||
sleep_support: "Спасибо, что рассказали про сон. Я отмечу это, и ваш врач увидит, как вы спите."
|
||||
book_visit_offer: "Предлагаю записаться к врачу пораньше. Выбрать удобное время можно кнопкой ниже."
|
||||
doctor_notified: "Я передал информацию вашему врачу. Он свяжется с вами."
|
||||
|
||||
# Шаблон саммари для врача (только по структурированным данным).
|
||||
summary:
|
||||
empty: "Нет данных за период."
|
||||
labels:
|
||||
period: "Период"
|
||||
therapy_day: "День терапии"
|
||||
drug: "Препарат"
|
||||
phq9: "PHQ-9"
|
||||
pcl5: "PCL-5"
|
||||
gad7: "GAD-7"
|
||||
mood: "Настроение (0–10)"
|
||||
adherence: "Приверженность"
|
||||
missed_doses: "Пропуски приёма"
|
||||
side_effects: "Побочные эффекты"
|
||||
sleep: "Сон"
|
||||
nightmares: "Кошмары"
|
||||
alcohol: "Алкоголь"
|
||||
quit_intent: "Намерение прекратить приём"
|
||||
alerts: "Алерты"
|
||||
Reference in New Issue
Block a user