药物知识库 API 返回 no result,处方审核 Agent 在医生工作站生成一句:“未发现相互作用风险。”
接口成功、JSON 合法、延迟 800ms、EHR 写入审核记录,工程看板都正常。问题在那句中文:查询没有命中,只能说明“当前查询没有拿到可用证据”,不能推出“风险不存在”。
空结果可能来自商品名未映射到通用名、复方制剂未拆分、药物数据库版本未覆盖、本院目录未接入、限制用药规则未同步,也可能是患者肾功能、妊娠状态、过敏史没有进入查询范围。医疗 AI 把这些分支统一翻译成“未发现风险”,接口成功就会变成安全漏洞。

图1:药物知识库 API 返回 no result,医生端提示旁标红:no result ≠ no risk
接口接通后,还要接通临床语义
MCP 可以把药物知识库、院内目录、EHR 片段、规则服务包装成工具,规范工具描述、调用参数和返回格式。但它不会替系统判断药名标准化是否成功、知识版本是否有效、本院规则是否参与、患者上下文是否齐全。
工程指标里的 tool_success_rate、latency、valid_json_rate 只能说明调用发生过。处方审核还要追问:查的是相互作用、剂量、禁忌,还是只查了其中一项?数据库覆盖通用名还是商品名?本院限制用药规则有没有接入?医生看到的那句话,依据来自哪一版知识?
| no result 类型 | 常见原因 | 系统动作 | 医生端表达 |
|---|---|---|---|
normalization_failed | 商品名、别名、剂型、复方拆分失败 | 停止自动结论,转药师复核 | 药品标准化失败,需人工确认 |
db_not_covered | 数据库未覆盖药品、组合、适应症 | 标记覆盖缺口,补查来源 | 当前知识库未覆盖该查询范围 |
version_stale | 药物库、说明书、指南版本过旧 | 标记版本风险 | 知识版本需更新或确认 |
local_rule_missing | 本院目录、科室权限、限制规则缺失 | 进入院内规则复核 | 缺少本院规则依据 |
patient_context_missing | 肾功能、妊娠、过敏史未参与 | 限制剂量和禁忌判断 | 患者上下文不足,不能形成结论 |
no_known_evidence | 标准化成功、范围覆盖、版本有效后仍无证据 | 记录来源和版本 | 在当前来源、版本、查询范围内未见明确证据 |
最后一行最容易被误写成低风险。工程实现里,no_known_evidence 应放在 evidence_status,gap_type 只能在所有前置条件满足时写 none。药名没标准化、本院规则缺失、患者上下文不足时,系统不能进入“当前证据范围内未见明确风险”的状态。

图2:状态机简图:input_drug → normalized_drug → query_scope → evidence_status → gap_type → ehr_write_state → reviewer
response schema 要给“不确定”留字段
很多 demo 只返回 risk_level、summary、references。这种 schema 会诱导模型在证据不足时补一句完整结论。处方审核 Agent 至少要把缺口写进结构化输出,尤其是 evidence_status、gap_type、knowledge_version、ehr_write_state。
下面片段只演示审计字段设计,属于研究和工程评估用途,不构成诊断、处方或治疗建议,也不能替代医生、药师复核。
{
"input_drugs": ["string"],
"normalized_drugs": [{
"input_name": "string",
"standard_id": "string|null",
"mapping_confidence": "high|medium|low"
}],
"query_scope": {
"interaction": true,
"renal_dose": true,
"pregnancy": false,
"hospital_policy": true
},
"evidence_status": "found|partial|no_known_evidence|not_assessable",
"knowledge_version": {
"drug_db": "2026.05",
"label_date": "YYYY-MM-DD",
"guideline": "string|null",
"local_policy": "string|null"
},
"gap_type": "none|normalization_failed|db_not_covered|version_stale|local_rule_missing|patient_context_missing",
"confidence": "high|medium|low",
"ehr_write_state": "draft|pending_review|confirmed|rejected|escalated",
"escalation": "none|pharmacist_review|required_manual_check",
"agent_statement": "string"
}
线上容易漏掉两个字段:mapping_confidence 和 local_policy。前者决定商品名、别名、复方拆分能不能进入后续判断;后者决定院内目录、限制用药、科室权限有没有参与。只要 mapping_confidence=low,医生端只能显示草稿提示。只要 local_policy=null,涉及本院规则的判断都应进入 pending_review 或 escalated。
整理 drug-drug interaction alert、medication safety AI、clinical decision support override、pharmacovigilance 等研究时,可用 超能文献 做中文检索,并追溯 DOI/PMID、研究对象和结论边界。它适合作为文献入口和来源追踪工具,不能替代处方审核系统、诊断工具或治疗建议工具;候选文献进入规则库前,仍需药师、临床专家和工程负责人确认。
审计日志要能回放失败现场
处方审核日志不能只记 tool_call_id=xxx 和 success=true。一次可回放记录至少要保存:
- 原始药名、标准化结果、标准化置信度、查询范围、工具版本、知识版本、说明书日期、本院规则版本、患者上下文字段参与状态、
evidence_status、gap_type、Agent 原话、EHR 写回状态、复核人和复核结论。
冲突也要入账。药物数据库提示风险,本院规则存在明确例外,系统应展示来源差异、适用条件和例外依据,并进入 pending_review。数据库无结果,本院规则也缺失,直接 escalated。患者肾功能没有参与查询时,剂量相关判断只能保留为草稿提示。美国 FDA 在 2022 年《Clinical Decision Support Software》指南中强调,面向医务人员的临床决策支持软件需要让使用者能够独立审阅建议依据,官方文档见 FDA Clinical Decision Support Software Guidance。
回到开头那个现场,药物知识库返回空结果并不可怕。危险发生在下一步:Agent 把未分类的查询缺口写成“未发现相互作用风险”,EHR 又把这句话保存成已确认结论。医生看到一句平静提示,审计系统里却缺少药品标准化、知识版本、本院规则和人工复核证据。
下一步先拿 50 条样本建审计集,把商品名映射、院内目录缺失、版本过期、患者上下文缺失、数据库与本院规则冲突都放进去;要求系统在每条样本里输出 evidence_status、gap_type、ehr_write_state、证据版本和复核动作。只要还有 no result 被写成“无风险”,这个处方审核 Agent 就不该进入生产流程。