feat(llm): RAG knowledge base over clinical guidelines with cited extractive answers
CI / ruff · pytest (pull_request) Successful in 1m30s
CI / ruff · pytest (pull_request) Successful in 1m30s
- docs/source/rag: PDF sources (KR PTSD 2023, KR depression 2024, meds module spec), pdf->txt converter (tables as markdown, page markers, hand-transcribed figures), word-level check against pdftotext; fixes HAM-D/MADRS fake headers and split rows - config/rag: corpus txt + sources.yaml (documents, audiences, retrieval params, synonyms) - app/llm/rag: Snowball stemmer, section-aware chunker with page citations, BM25 + synonym expansion + densest-passage reranking, extractive answer() with coverage gate, patient dose/prescribing filter, optional LLM rephrasing rejected when it adds content; CLI python -m app.llm.rag - tests: gold retrieval set (hit@3 >= 15/18), off-topic, safety, faithfulness - ADR-011 Refs #60 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -21,6 +21,8 @@ phrases:
|
||||
doctor_notified: "Я передал информацию вашему врачу. Он свяжется с вами."
|
||||
# med_qa: базовый смысл = выдержка из инструкции ГРЛС; LLM только упрощает её, ничего не добавляя.
|
||||
med_answer: "{excerpt}"
|
||||
# RAG (#60): базовый смысл = выдержка из клинических рекомендаций; LLM только упрощает её, ничего не добавляя.
|
||||
rag_answer: "{excerpt}"
|
||||
|
||||
# Шаблон саммари для врача (только по структурированным данным).
|
||||
summary:
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
# Тексты ответов из базы знаний (RAG, #60). Зона clinical вычитывает формулировки.
|
||||
# Сам ответ — ТОЛЬКО предложения из клинических рекомендаций (экстрактивно); здесь — обрамление.
|
||||
# Правила: без советов по дозам, без рекомендаций препаратов, решение о лечении — за врачом.
|
||||
|
||||
patient:
|
||||
# Ничего не нашлось / вопрос о дозе — честно говорим и отправляем к врачу.
|
||||
fallback: "В клинических рекомендациях я не нашёл ответа на этот вопрос. Уточните, пожалуйста, у вашего врача."
|
||||
# Пациент должен понимать, что это выдержка из документа для врачей, а не совет бота.
|
||||
intro: "В клинических рекомендациях Минздрава сказано:"
|
||||
sources_label: "Источник"
|
||||
# Всегда в конце (не проходит через LLM).
|
||||
doctor_note: "Это общая информация из документа для врачей. Что подходит именно вам, решает ваш лечащий врач."
|
||||
|
||||
doctor:
|
||||
fallback: "В базе знаний (КР ПТСР 2023, КР Депрессия 2024) нет фрагмента по этому запросу."
|
||||
intro: "По клиническим рекомендациям:"
|
||||
sources_label: "Источники"
|
||||
doctor_note: ""
|
||||
|
||||
team:
|
||||
fallback: "В документах команды нет фрагмента по этому запросу."
|
||||
intro: "По документам команды:"
|
||||
sources_label: "Источники"
|
||||
doctor_note: ""
|
||||
Reference in New Issue
Block a user