医疗用药 Agent 的 RAG:先拆证据字段,再让模型生成

做处方审核、用药安全提醒、患者沟通类 Agent,RAG 的关键不只是“搜到了什么”,而是搜到后有没有保住限定条件。说明书、指南、药物知识库里的适应证、剂量单位、特殊人群、肾功能分层、相互作用、证据来源,如果被生成阶段压成一句“可使用,注意监测”,边界就没了。

本文只讨论系统设计:证据检索、字段校验、文献追踪和人工复核辅助,不输出诊断、处方或具体用药建议。

图1:文章主题示意图图1:文章主题示意图

1. 证据先结构化,摘要放后面

普通知识库常用 chunk + 向量召回 + LLM 总结。用药文本不太适合直接走这条路,因为一个结论经常跨段落:前面写适应证,后面补年龄限制、禁忌证、肾功能调整、疗程和监测项。chunk 切断后,召回文本仍然相关,但生成结果可能漏字段。

建议把命中文本先落到证据包:

字段含义规则
indication 适应证及范围 缺失时不生成结论性动作
dose 剂量范围、单位、频次 单位只读,不交给模型改写
population 年龄、妊娠、特殊人群 与患者上下文比对
renal_adjustment 肾功能分层 上下文未知时进入复核
interaction 合并用药相互作用 保留风险标签和来源
evidence_level 证据等级或来源类型 原样展示
knowledge_version 知识库版本 写入审计日志

LLM 的职责是解释字段、组织摘要、列出缺失项。剂量单位、证据等级、知识库版本这类字段,应由规则层保护。

2. EHR 上下文要参与检索和校验

同一药物名,在不同患者上下文里,适用范围可能不同。年龄、诊断、过敏史、肾功能、肝功能、妊娠状态、当前用药,不应只放在 prompt 末尾当背景,而要进入检索前过滤和检索后校验。

一个最小 query_set 可以这样写:

task = medication_evidence_check
drug_code = RxNorm_or_ATC
diagnosis = ICD_or_SNOMED
age_group = adult_or_child_or_unknown
renal_function = value_or_unknown
hepatic_function = value_or_unknown
allergy = coded_or_text[]
current_medications = RxNorm_or_ATC[]

推荐流程:

EHR 选择待评估用药
 -> 拉取最小 patient_context
 -> 生成 query_set
 -> Drug Knowledge Service 返回 retrieved_facts
 -> rule_claim_check 做字段校验
 -> LLM 输出证据摘要和复核提示
 -> audit_log 落库

常见坑是 renal_function = unknown,但召回证据里存在 renal_adjustment。这时不能让模型用“注意监测”含糊带过,而应由规则层限制输出:

{
  "missing_context": ["renal_function"],
  "risk_level": "pharmacist_review",
  "allowed_output": "evidence_summary_only"
}

FHIR 映射上,MedicationRequest 对应待评估用药,Observation 承接肾功能、肝功能等指标,Condition 承接诊断,AllergyIntolerance 承接过敏史。药物名尽量映射 RxNorm 或 ATC,诊断映射 ICD 或 SNOMED CT,实验室指标映射 LOINC。无法标准化时,也要记录是自由文本、院内码还是国际码。

3. 文献证据要能回放

复核时通常不会只看最终回答,还会看候选证据池、排除理由、升级规则和责任路径。例如评估相互作用提醒中的 alert fatigue,可先用检索式收集候选文献:

("drug-drug interaction alert" OR "medication safety alert")
AND ("clinical decision support" OR "EHR workflow")
AND ("override rate" OR "alert fatigue")
AND ("pharmacist review")

整理时保留 PMID/DOI、研究类型、应用场景、主要终点、局限性、可转化规则。前期资料可用 超能文献 做中文检索和 PDF 翻译,把候选文献、摘要和来源整理成审计表;这里它只是文献整理工具。

4. audit_log 记录到字段级

一次调用至少记录:

{
  "request_id": "req_20260514_001",
  "knowledge_version": "2026-05-01",
  "source_id": ["PMID:xxxx", "drug_label:yyyy"],
  "patient_context_hash": "sha256:...",
  "missing_fields": ["renal_function"],
  "claim_check": {
    "risk_level": "pharmacist_review",
    "allowed_output": "evidence_summary_only"
  },
  "model_output_type": "summary",
  "human_reviewer": "pharmacist_id_or_empty",
  "final_action": "pending_review"
}

落地可以从 50 条模拟审计集开始:每条包含患者上下文、药物知识条目、正确应答边界、必须升级的条件和人工确认记录。先验证字段缺失能否被发现、单位是否被保留、高风险上下文未知时是否停止动作,再优化召回和交互体验。

作者:超能文献 | AI文献检索|AI文档翻译

posted @ 2026-05-15 09:02  JaxGo  阅读(0)  评论(0)    收藏  举报