OncoAgent:一种面向隐私保护肿瘤学临床决策支持的双层多智能体框架
技术预印本 · 2026年5月 · OncoAgent研究团队
摘要
我们提出OncoAgent,一个面向肿瘤学的开源、隐私保护型临床决策支持系统。OncoAgent将双层微调大语言模型架构与最先进的多智能体LangGraph拓扑结构、基于70余份医师级NCCN和ESMO指南的四阶段校正型RAG流水线,以及严格执行零受保护健康信息策略的三层反射安全验证器相结合。
该系统通过一个加性复杂度评分器将临床查询路由至90亿参数的快速优化模型(第一层)或270亿参数的深度推理模型(第二层),两者均通过QLoRA在包含266,854个真实及合成肿瘤病例的语料库上,利用Unsloth框架在AMD Instinct MI300X硬件(192 GB HBM3)上完成微调。
MI300X上的序列打包技术使得全数据集微调仅需约50分钟——相比基于API的生成实现了56倍的吞吐量加速。修正后,CRAG文档评分达到100%的成功率,平均RAG置信得分为2.3以上。整个系统完全开源并可本地部署,消除了对专有云API的依赖,保障了患者数据主权。
关键词:临床决策支持、肿瘤学AI、多智能体系统、检索增强生成、QLoRA、AMD ROCm、开源医疗AI、人在回路安全、LangGraph、校正型RAG
1. 引言
肿瘤学是临床医学中信息密度最高、认知负荷最大的领域之一。从美国国家综合癌症网络到欧洲肿瘤内科学会,循证指南的数量、异质性和快速演变,在已发表的证据与临床实践之间造成了持续的知识鸿沟。
AI辅助的临床决策支持系统在弥合这一鸿沟方面具有变革性潜力,然而大多数商用系统在三个关键方面存在不足:
- 产生未经验证指南支撑的幻觉性建议
- 依赖云端 API,导致在注重隐私的医院环境中无法进行本地部署
- 单体式大语言模型架构在处理复杂的多病共患情况时,容易出现上下文饱和问题
OncoAgent 的设计围绕三个核心原则:
- 架构解耦:临床推理被分解到八个专门的 LangGraph 节点中,每个节点都具有边界清晰、可审计的功能。
- 有据生成:所有模型输出都通过一个四阶段检索流程(包含显式的相关性门控机制)锚定到经过整理的向量知识库。
- 硬件主权:完整的推理和训练栈原生运行在 AMD Instinct MI300X 上,使用 ROCm 和开源框架——这使得医院能够在无需外泄数据的情况下进行部署。
2. 相关工作
2.1 临床大语言模型与决策支持
大语言模型在临床自然语言处理任务中展现出巨大潜力,包括诊断编码、文献摘要和患者沟通。领域特定的微调方法——例如 BioMedLM、Med-PaLM 2 和 ClinicalBERT——在医学基准测试上的表现始终优于通用模型。OncoAgent 通过针对肿瘤分诊和治疗路径推荐这一特定子领域(在此领域中,模型幻觉的后果最为严重)来扩展这一研究方向。
2.2 多智能体架构
解耦的多智能体系统已成为处理复杂推理任务的一种原则性方法。OncoAgent 综合了四种经典的 SOTA 模式:
- Claude Code 模式——将确定性安全约束与大语言模型推理相分离
- Hermes Agent 模式——结构化的工具调用,并带有按会话隔离的内存
- 纠正性 RAG(Shi 等人,2024)——文档相关性评分与查询重写
- 反思机制(Shinn 等人,2023)——通过反馈增强的重试循环实现自我纠正生成
2.3 医学中的检索增强生成
标准双编码器检索在术语精确性至关重要的临床领域(例如“酪氨酸激酶抑制剂”与“TKI”)表现不佳。OncoAgent 实现了一个包含交叉编码器重排序的多阶段流水线,并集成了假设性文档嵌入(HyDE;Gao 等人,2022),通过将自然语言查询投影到指南嵌入空间来解决医学术语同义词不匹配问题。
3. 系统架构
3.1 概述
OncoAgent 使用 LangGraph 实现为一个有状态的有向图。系统状态表示为一个不可变的 AgentState TypedDict,包含 11 个逻辑部分和大约 30 个类型化键。每个节点向特定键追加内容,而不改变上游数据,从而保留完整的审计追踪。
8 节点拓扑结构如下:
Router → Ingestion → Corrective RAG → Specialist ↔ Critic → HITL Gate → Formatter → END
↓
Fallback → END
关键属性:
- 5 条条件边
- 1 个反思重试循环(最多 2 次迭代)
- 1 个针对高复杂度或低置信度输出的强制性人机交互中断
3.2 复杂度路由与模型分层
在调用专家之前,使用加权加性模型对病例复杂度进行量化:
S = w_cancer + w_stage + w_mutations + w_treatment
其中:
| 因素 | 条件 | 权重 |
|---|---|---|
| 癌症类型 | 罕见 | +0.40 |
| 癌症类型 | 原发灶不明 | +0.30 |
| 分期 | IV 期 | +0.25 |
| 分期 | III 期 | +0.15 |
| 突变 | 识别出 ≥2 个 | +0.30 |
| 突变 | 单个 | +0.15 |
| 既往治疗 | 任何关键词匹配 | +0.10 |
决策边界:S ≥ 0.5 → 第 2 层(Qwen 3.6-27B 深度推理)· S < 0.5 → 第 1 层(Qwen 3.5-9B 快速分诊)
验证:一个带有 KRAS + BRCA2 突变的 IV 期胰腺癌病例正确得出 S = 0.80,路由至第 2 层。✅
临床医生也可以通过用户界面手动覆盖层级选择。
3.3 带文档评级的纠正性 RAG
CRAG 节点在将检索到的文档转发给专家之前,会对其临床相关性进行评级。未通过二元相关性分类的文档会触发自动查询重写(最多重试 1 次)。这消除了 RAG 流水线中模型幻觉的主要来源——检索到标题看似相关但语义无关的内容。
在将评级步骤从 Qwen 3.5 迁移到 Qwen 2.5 Instruct 后,成功率从 0% 提升至 100%,在子宫癌分诊测试中 RAG 置信度得分达到 2.3 以上。
3.4 反思安全循环(评判节点)
在输出到达人机协同(HITL)门控之前,Critic 节点会运行一个三层验证级联流程:
- 格式检查——验证输出结构是否符合 OncoCoT 输出模式
- 安全性检查——基于确定性规则扫描禁止的输出模式(如未引用指南的绝对剂量、药物相互作用遗漏等)
- LLM 蕴含检查——验证 Specialist 的建议是否完全得到检索到的 RAG 上下文支持
若检查失败,Critic 的具体反馈会被注入回 Specialist 的上下文中进行重试(最多 2 次迭代)。关键在于,Critic 以确定性代码而非 LLM 控制的逻辑运行——这确保了安全机制不会被对抗性提示词绕过。
3.5 人机协同门控与回退机制
HITL 门控对所有 Tier 2 病例以及任何 rag_confidence < 0.3 的输出提供强制性的临床医生中断。专用的 Fallback 节点会捕获不可恢复的失败,并返回一个临床安全的拒绝响应——"Información no concluyente en las guías provistas"(所提供指南中无结论性信息)——从而在任何故障模式下避免产生模型幻觉式的替代方案。
3.6 每位患者的记忆隔离
PatientMemoryStore 模块为每位患者的会话分配一个唯一的 thread_id(格式为 PT-XXXX),并将其作为可配置参数传递给 LangGraph 的原生检查点系统。这既强制执行了严格的每位患者记忆隔离,又支持在单次会话内进行迭代式的多轮问诊。
4. 知识库构建与 RAG 流水线
4.1 指南摄入与清洗
该知识库由 77 份直接的医师指南 PDF 构建而成,这些 PDF 由一个并发网络爬虫识别,该爬虫在 60 秒内处理了 138 个 NCCN 详情页面。文本提取使用了 PyMuPDF(fitz)进行块级结构解析,保留了多列临床布局的语义阅读顺序。
在摄入之前,一个基于正则表达式的清洗步骤会去除机构品牌标识。通过启发式过滤排除了面向患者的材料。最终生成的语料库涵盖 70 多份专业肿瘤学指南,覆盖所有主要癌症类型,包括肝细胞癌(HCC)、非小细胞肺癌(NSCLC)、乳腺癌、结直肠癌和神经内分泌肿瘤。
4.2 医学嵌入向量与向量存储
标准的通用嵌入模型(例如 all-MiniLM-L6-v2)因临床术语语义表现不佳而被弃用。OncoAgent 采用:
- 嵌入向量:pritamdeka/S-PubMedBert-MS-MARCO——在 PubMed 和 MS-MARCO 上微调,用于非对称医学语义搜索
- 向量存储:本地 ChromaDB 持久化索引——零云端、符合零受保护健康信息(Zero-PHI)要求
4.3 四阶段检索流水线
| 阶段 | 组件 | 功能 | 配置 |
|---|---|---|---|
| 1. 召回 | PubMedBERT 双编码器 | 广域检索 | 前 15 个候选 |
| 2. 距离门控 | 余弦距离过滤器 | 抗幻觉下限 | 阈值 = 0.10 |
| 3. 重排序 | 交叉编码器(MS-MARCO MiniLM) | 联合查询-文档相关性 | 返回前 5 个 |
| 4. 上下文裁剪 | 字符预算限制器 | 适配大语言模型上下文窗口 | 最多 6,000 字符 |
抗幻觉策略:任何未通过阶段 2 的查询将返回“在所提供指南中未找到结论性信息”,且不调用专科智能体。这保证了对于领域外的临床输入,不会产生任何幻觉推荐。
针对 NCCN 语料库的距离阈值校准确定:
- 医学查询距离:约 0.06–0.09
- 领域外查询距离:约 0.11–0.15
- 硬阈值:0.10
一个可选的 HyDE 模块会生成一段假设性的指南段落,并将其用作阶段 1 检索的嵌入锚点,从而解决同义词不匹配问题(例如“neoplasia pulmonar”与“lung carcinoma”)。
5. 双层 QLoRA 微调
5.1 训练语料库:OncoCoT(266,854 个样本)
| 来源 | 类型 | 样本数 | 备注 |
|---|---|---|---|
| PMC-Patients | 真实临床病例 | 约 85,000 | PubMed Central 患者报告 |
| Asclepius | 真实临床数据 | 约 85,000 | 精选医学问答语料库 |
| OncoCoT 合成数据 | 合成数据(Qwen 3.6-27B) | 96,941 | 在 MI300X 上生成,速率约 6,800 例/小时 · 拒绝率 0.65% |
| 总计 | — | 266,854 | 90/10 训练/评估划分 · SHA-256 哈希处理 · 去重 |
所有案例均使用 ChatML 模板以兼容 Qwen。思维 token 已被禁用(chat_template_kwargs: {enable_thinking: False}),以防止 JSON 解析损坏。
5.2 QLoRA 配置
两个层级均通过 BitsAndBytes 使用 4 位 NormalFloat4(NF4)量化,LoRA 适配器针对所有主要投影模块:q_proj、k_proj、v_proj、o_proj、gate_proj、up_proj、down_proj。
| 参数 | 第一层(Qwen 3.5-9B) | 第二层(Qwen 3.6-27B) |
|---|---|---|
| 每设备批大小 | 4 | 2 |
| 梯度累积 | 4 | 8 |
| 有效批量大小 | 16 | 16 |
| 学习率 | 2×10⁻⁴ | 1×10⁻⁴ |
| LoRA 秩(r) | 16 | 32 |
| 序列打包 | 开启,2048 个 token | 开启,2048 个 token |
| 早停 | 耐心值 = 3 | 耐心值 = 3 |
| 量化 | NF4 4 比特 | NF4 4 比特 |
5.3 使用 Unsloth 进行 AMD MI300X 优化
原始的 HuggingFace transformers + PEFT 流水线在 MI300X 上因两个独立问题而失败:
- trl v0.24.0 严格的 EOS 验证与 Qwen3VLProcessor 封装器之间的 token 化冲突
- 在标准精度下,目标有效批量大小的显存余量不足
迁移到 Unsloth 的 FastLanguageModel 同时解决了这两个问题:
- 显存减少:峰值使用量下降约 60%(从内存溢出到在 192 GB 设备上稳定约 64 GB)
- 训练速度:在有效批量大小为 16 时,提升约 2 倍,达到约 16 秒/步
需要针对 AMD ROCm 进行适配:
# 1. Pass inner tokenizer, not the Qwen3VLProcessor wrapper
trainer = SFTTrainer(tokenizer=model.get_tokenizer(), ...)
# 2. Prevent incompatible EOS injection
training_args = SFTConfig(eos_token=None, ...)
# 3. AMD-specific bitsandbytes for ROCm 6.2/gfx942
# pip install bitsandbytes --find-links <amd-continuous-release-wheel>
# 4. BF16 workaround (is_bf16_supported() returns False on ROCm despite hardware support)
training_args = TrainingArguments(fp16=True, ...)
# Final deployment uses native BF16:
model = AutoModelForCausalLM.from_pretrained(..., torch_dtype=torch.bfloat16)
5.4 序列打包与吞吐量突破
通过在 SFTConfig 中设置 packing=True 实现的序列打包,将多个简短临床记录拼接成单个 2048 token 的序列,消除了填充开销,并大幅减少了前向传播次数。
Unsloth 内核与序列打包在 MI300X 上的联合效果,使得包含 266,854 个样本的完整数据集微调在大约 50 分钟内完成——而最初估计需要 5 小时——相当于训练时间压缩了约 6 倍。GPU 利用率峰值达到约 70%,持续吞吐量约为 11.3 秒/迭代。
Checkpoint-1000 结果:Tier 1 适配器训练了 1,339 步 · 训练损失 ≈ 0.05 · 适配器大小 187 MB · 已根据包含 adapter_model.safetensors、adapter_config.json 和 tokenizer.json 在内的 11 个文件清单进行验证。
该系统支持自适应推理路由:当 ROCm 可用时,通过 LocalModelManager 单例进行本地 BF16 推理,并可优雅地回退到 Featherless.ai API 以实现高可用性。
6. 安全与隐私框架
6.1 零 PHI 策略
一个专用的零 PHI 编辑节点作为摄取节点中的第一个处理步骤运行,在任何文本到达大语言模型之前。它会识别受保护的健康信息(患者姓名、出生日期、病历号、地址、机构标识符),并将其替换为临床中性的占位符。编辑后的表示存储在 AgentState 中;原始文本则被丢弃。
这确保了没有任何受保护的健康信息会到达任何下游的大语言模型调用——无论是本地还是远程——并通过设计而非策略来满足 HIPAA 的去标识化要求。
6.2 分层安全架构
该系统的安全保障在四个独立层级上强制执行。任何单一层级的故障都不会损害整体安全态势。
| 层级 | 机制 | 应对问题 |
|---|---|---|
| L1:检索门控 | 距离门控(余弦阈值 0.10) | 领域外模型幻觉 |
| L2:置信度门控 | RAG 置信度分数 < 0.3 → 拦截 | 低质量检索依据 |
| L3:反思评判器 | 格式 + 安全 + 大语言模型蕴含(最多重试 2 次) | 不支持或不安全的专科医生输出 |
| L4:人机交互门控 | 针对 Tier 2 / 标记案例的强制性临床医生中断 | 需要专家判断的高复杂度案例 |
层级 1 和 2 在检索层运行。层级 3 在生成层运行。层级 4 在部署层运行。所有层级 3 的检查均作为确定性代码运行——而非大语言模型控制的逻辑——从而通过对抗性提示词防止安全绕过。
7. 临床界面
OncoAgent 用户界面实现为一个实时流式传输的 Gradio 应用程序,采用 ChatGPT 风格的对话布局。其特点包括:
- 左侧边栏:会话控制、关键绩效指标面板、证据来源标签页
- 主聊天区域:每个节点完成时实时显示智能体推理更新
通过 LangGraph 的 `.stream(stream_mode="updates")` API 实现实时透明性,该 API 在每个节点完成时输出 `{node_name: node_output}` 字典。用户界面将每个节点映射为人类可读的临床标签(例如,`corrective_rag` → "正在检索 NCCN/ESMO 指南"),为临床医生提供完整的流程可见性。
`rag_confidence` 分数和检索到的来源数量会被突出显示,使临床医生能够立即了解每条建议背后指南依据的质量。
该界面按照 WCAG 2.1 AA 标准设计——采用 Lucide 风格的内联 SVG 图标、slate-900/sky-500 暗色主题、Figtree/Inter 字体排版、prefers-reduced-motion 媒体查询,所有过渡动画时长限制在 200 毫秒以内。
8. 结果
| 组件 | 指标 | 数值 |
|---|---|---|
| 知识库 | 已摄入的指南 | 70 余份 |
| 已解析的 PDF | 138 份,耗时 < 60 秒 | |
| 索引解析错误 | 0 | |
| CRAG 流水线 | 文档评分成功率(修复后) | 100% |
| RAG 置信度分数(子宫癌测试) | 2.3+(修复前为 0.0) | |
| 并行评分延迟(3–5 份文档) | < 5 秒 | |
| 复杂度路由 | IV 期胰腺癌 + KRAS + BRCA2 | 分数 = 0.80 → 第 2 级 ✅ |
| 训练(第 1 级,9B) | 完整 266k 样本训练时间 | 约 50 分钟(预估为 5 小时) |
| 稳态吞吐量 | 约 11.3–16 秒/步 | |
| GPU 利用率(MI300X) | 峰值约 70% | |
| VRAM 利用率(Unsloth) | 约 64 GB / 192 GB | |
| checkpoint-1000 处的训练损失 | 约 0.05 | |
| 合成数据吞吐量(MI300X 对比 API) | 6,800 对比 120 例/小时(提升 56 倍) | |
| 合成语料拒绝率 | 0.65% | |
| 图拓扑 | 已验证的编译节点 | 8 / 8 |
| 通过的模块测试套件 | 6 / 6 | |
| 用户界面 | 分诊期间的浏览器超时 | 0 |
| UI 渲染延迟 | < 200 毫秒 |
9. 讨论
9.1 硬件主权作为临床需求
能够在单个 AMD MI300X 实例上运行完整的 OncoAgent 技术栈——训练、推理、RAG 和 UI——且无需依赖云 API,这不仅仅是一种工程上的便利。在受 HIPAA(美国)、GDPR(欧盟)及同等国家框架约束的医院环境中,将数据维持在受控基础设施内的法律和伦理义务是绝对的。OncoAgent 证明了在此约束下实现 SOTA 多智能体临床 AI 是可行的。
9.2 吞吐量突破
56 倍的合成数据生成加速(从约 120 例/小时提升至约 6,800 例/小时)以及约 6 倍的训练时间压缩,共同构成了对在时间受限场景下进行领域特定微调可行性的重大实际贡献。这些结果表明,AMD 的 CDNA3 架构在与 Unsloth 的 Triton 内核优化及 SFT 序列打包技术配合使用时,其潜力可能被标准的 HuggingFace 训练流水线大幅低估——并且无需改变底层模型架构即可缩小性能差距。
9.3 局限性
若干局限性值得指出:
- 训练语料库中约 36% 为合成生成案例。针对委员会认证肿瘤科医生判断的临床准确性验证尚未大规模开展。
- 当前知识库主要覆盖英文版 NCCN 指南;ESMO 及非英文临床语料库留待后续工作处理。
- Tier 1 适配器代表了一条可能更长训练轨迹中的第 1000 个检查点;完全收敛及下游临床基准评估(MedQA、USMLE 风格肿瘤学子集)计划在后续版本中完成。
10. 结论
OncoAgent 建立了一套完整、开源、保护隐私的肿瘤学临床决策支持架构,该架构整合了 SOTA 多智能体设计模式、领域特定微调以及四阶段接地检索流水线。
该系统证明,生产级临床 AI 并不需要专有基础设施:完整技术栈——包括 266k 样本 QLoRA 微调、70 余项指南 RAG、八节点 LangGraph 编排、三层反射安全验证以及实时临床流式 UI——可在单个 AMD Instinct MI300X 实例上于 ROCm 环境下运行。
架构层面的贡献——特别是将 Corrective RAG、Reflexion 和 HITL 门控整合为一个统一安全栈——为幻觉后果关乎生命安全的领域特定临床 AI 部署提供了可复制的蓝图。
所有代码、适配器权重以及 OncoCoT 合成语料库将在 Hugging Face Spaces 和 GitHub 上公开发布。
参考文献
- Singhal, K. 等 (2023)。大语言模型编码临床知识。《自然》,620,172–180。
- Nori, H. 等 (2023)。通用基础模型能否超越专用微调?医学案例研究。arXiv:2311.16452。
- Wang, L. 等 (2024)。基于大语言模型的自主智能体综述。《计算机科学前沿》,18(6),186345。
- Shi, W. 等 (2024)。校正性检索增强生成。arXiv:2401.15884。
- Shinn, N. 等 (2023)。Reflexion:具有语言强化学习的语言智能体。NeurIPS 2023。
- Nogueira, R. 和 Cho, K.(2019)。《基于 BERT 的段落重排序》。arXiv:1901.04085。
- Gao, L. 等人(2022)。《无需相关性标签的精确零样本稠密检索》。arXiv:2212.10496。
- Hu, E.J. 等人(2021)。《LoRA:大语言模型的低秩适配》。arXiv:2106.09685。
- Dettmers, T. 等人(2023)。《QLoRA:量化大语言模型的高效微调》。NeurIPS 2023。
- Han, S. 等人(2024)。《LangGraph:使用大语言模型构建有状态的多智能体应用》。LangChain 技术报告。
OncoAgent 旨在作为临床决策支持工具。在应用于任何临床场景之前,所有输出均需经持证医疗专业人员审核。