罕见病信息分诊:六路来源隔离审计与安全边界仲裁
官方 cookbook 示例
- 行业
- 医疗与科研 · 医疗信息分诊
- 来源
- open-multi-agent 官方 cookbook
- 当前阶段
- 可运行示例
这是 open-multi-agent 官方 cookbook 示例,由元定义维护。六个审计 Agent 各自只读一类虚构来源(症状自述、公益科普、指南摘录、基因-表型、网络与商业宣传、安全政策),输出 Zod 校验过的 JSON;仲裁 Agent 只拿到这六份 JSON,判定分诊类别并列出冲突与不安全内容,不给诊断。
场景
典型场景:患者或家属带着一个罕见病猜测来咨询,手里的材料来源混杂:自己整理的症状、公益组织的科普、指南或专家共识、一份意义未明的基因检测结果,还有论坛帖子和商业检测广告。各来源口径不一,商业页面常把相似症状直接对到某一种病并推销检测;信息整理方要把冲突摆出来,同时守住不诊断、不推荐治疗和商品的边界。
这个示例演示的是把每类来源交给一个互不相通的 Agent 单独审计,再由下游仲裁只凭结构化审计结果做判断:示例预埋了一组冲突,网络与商业来源把症状对到虚构的 MYO-X 相关肌病,指南保持宽泛的鉴别范围,基因证据是一个意义未明变异(VUS),仲裁需要把这组冲突显式列出。示例不输出诊断、治疗或用药剂量建议,fixtures 里没有真实患者数据。
方案
| 角色 | 任务 DAG | 工具 | 模型 | 部署形态 |
|---|---|---|---|---|
| symptom-normalizer | 阶段 1 第 1 个,读 patient-symptom-summary.json,输出 SymptomAudit | 未声明(tools: [],独立的空 ToolRegistry) | claude-sonnet-4-6 / anthropic | npx tsx 单次运行的本地脚本 |
| nonprofit-education-auditor | 阶段 1 第 2 个,读 nonprofit-patient-education.md,输出 NonprofitEducationAudit | 同上 | claude-sonnet-4-6 / anthropic | 同上 |
| guideline-auditor | 阶段 1 第 3 个,读 official-guideline-excerpt.md,输出 GuidelineAudit | 同上 | claude-sonnet-4-6 / anthropic | 同上 |
| genetics-auditor | 阶段 1 第 4 个,读 gene-phenotype-evidence.json,输出 GeneticsAudit | 同上 | claude-sonnet-4-6 / anthropic | 同上 |
| web-claims-auditor | 阶段 1 第 5 个,读 web-claims-snippets.json,输出 WebClaimsAudit | 同上 | claude-sonnet-4-6 / anthropic | 同上 |
| safety-boundary-agent | 阶段 1 第 6 个,读 medical-safety-policy.json,输出 SafetyAudit | 同上 | claude-sonnet-4-6 / anthropic | 同上 |
| rare-disease-triage-arbiter | 阶段 2,输入只有六份审计 JSON,输出 TriageDecision | 同上 | claude-sonnet-4-6 / anthropic | 同上 |
表中模型为示例仓库的默认配置;实际选型在方案阶段按场景确定。
来源隔离靠两处实现:每份 fixture 只拼进对应审计 Agent 的提示词,七个 Agent 各持一个空的 ToolRegistry、tools 为空数组,没有读文件或联网的途径;仲裁的提示词里只有六份审计结果的 JSON.stringify,看不到原始 fixtures。六个审计按顺序依次运行。
七个 Agent 都配了 outputSchema(Zod),温度 0.1、maxTurns 1。框架把 schema 说明追加到系统提示词,首次解析或校验失败时带着错误信息让模型重答一次(src/agent/agent.ts);脚本外层的 runTimed 再给每个审计 Agent 最多 3 次尝试。
仲裁结论取 credible_lead、conflicting_evidence、misleading_or_commercial、needs_specialist_review 四类之一,同时给出 conflicts、missing_evidence、unsafe_elements、safe_next_steps 和 diagnosis_provided 等字段。安全政策 fixture 列出禁止项:不诊断、不确认或排除罕见病、不推荐治疗与剂量、不推荐商业检测、不把 VUS 当诊断依据。
结果
可运行产物与验证方式:
需要 API key。脚本头部写明前置条件是 ANTHROPIC_API_KEY 与 Node.js 20 以上,模型可用 MODEL 环境变量覆盖;运行命令 npx tsx packages/core/examples/cookbook/rare-disease-information-triage.ts。
控制台先逐个打印六个审计 Agent 的 [RUN] / [DONE] 与耗时,汇总每个 Agent 的输出 token 和审计总耗时,再打印仲裁的 TriageDecision JSON。
跑完后执行 5 条断言:结论属于冲突或安全关切三类之一、patient_facing_answer_allowed 为 false、diagnosis_provided 为 false、conflicts 非空、unsafe_elements 非空。任一断言失败,或任一 Agent 没有拿到结构化输出,脚本以退出码 1 结束。
2026-09-23 在 commit 2f1d0ff 上实测:六个审计 Agent 都在第 1 次尝试通过,审计总耗时约 29 秒,仲裁约 7 秒;结论为 misleading_or_commercial、置信度 high,列出 5 条冲突与 5 条不安全内容(包括商业检测页的“quickly confirm MYO-X disease”和把 VUS 当确诊依据),5 条断言全部 PASS,合计 input 7505 / output 7462 token,退出码 0。这次实测把示例里提交的 anthropic / claude-sonnet-4-6 换成 DeepSeek 的 deepseek-flash 运行,其余逻辑照原样。
六份 fixtures 都标注为 MOCK,基因名 MYO-X 与病例 mock-rd-001 均为虚构;产出是一段模型生成的文本,供演示与验证流程使用。
出处
与元定义的关系
本页素材是 open-multi-agent 官方仓库里的 cookbook 示例,由元定义维护。
如果你手上有一条真实的医疗或健康信息整理流程,要把患者自述、指南、检测报告、网络内容分开审计,再在明确的安全边界下汇总成给医生或客户看的材料,并接进你自己的知识库与审核系统,元定义对应的服务是 AI Agent 定制开发 →
最后更新
想知道类似的流程在你这边怎么落地?