OncoAgent:用于隐私保护肿瘤学临床决策支持的双层 Multi-Agent 框架
"OncoAgent: A Dual-Tier Multi-Agent Framework for Privacy-Preserving Oncology Clinical Decision Support"
OncoAgent Research Group 提出开源肿瘤临床决策支持系统 OncoAgent,采用双层 fine-tuned LLM、8 节点 LangGraph、Corrective RAG、Reflexion 与 HITL。系统基于 70+ NCCN/ESMO 指南和 266,854 例 OncoCoT 语料,用 QLoRA 在 AMD MI300X 上训练,约 50 分钟完成 fine-tuning。
](https://huggingface.co/MaximoLopezChenlo)
thumbnail: https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/blog/oncoagent-thumbnail.png authors:
- user: oncoagent-research tags:
- oncology
- multi-agent
- LangGraph
- RAG
- QLoRA
- AMD
- open-source
- clinical-ai
- healthcare
OncoAgent:面向隐私保护型肿瘤临床决策支持的双层 Multi-Agent 框架
技术预印本 · 2026 年 5 月 · OncoAgent Research Group
摘要
我们提出 OncoAgent,一个开源、保护隐私的肿瘤临床决策支持系统。OncoAgent 结合了双层 fine-tuned LLM 架构、先进的 multi-agent LangGraph 拓扑、覆盖 70+ 份医师级 NCCN 和 ESMO 指南的四阶段 Corrective RAG pipeline,以及执行严格 Zero-PHI 策略的三层 reflexion 安全验证器。
系统通过一个加性复杂度评分器将临床 query 路由到 9B 参数的速度优化模型(Tier 1)或 27B 深度推理模型(Tier 2)。两者均使用 QLoRA 在 266,854 个真实和合成生成的肿瘤病例语料上进行 fine-tuning,训练基于 Unsloth 框架并运行在 AMD Instinct MI300X 硬件(192 GB HBM3)上。
MI300X 上的 sequence packing 使全数据集 fine-tuning 可在约 50 分钟 内完成,相比基于 API 的生成实现 56× 吞吐加速。修复后,CRAG 文档评分达到 100% 成功率,平均 RAG confidence score 达到 2.3+。完整系统 100% 开源,可在本地部署,消除对专有云 API 的依赖,并保护患者数据主权。
关键词: clinical decision support, oncology AI, multi-agent systems, retrieval-augmented generation, QLoRA, AMD ROCm, open-source healthcare AI, HITL safety, LangGraph, Corrective RAG
1. 引言
肿瘤学是临床医学中信息密度最高、认知负荷最重的领域之一。循证指南的数量、异质性和快速演进——从 National Comprehensive Cancer Network (NCCN) 到 European Society for Medical Oncology (ESMO)——在已发表证据与床旁实践之间造成了持续存在的知识差距。
AI 辅助临床决策支持系统在弥合这一差距方面具有重要潜力,但大多数商业化系统在三个关键方面存在不足:
- 幻觉式建议,未基于经过验证的指南
- 云 API 依赖,阻碍其在隐私敏感的医院环境中进行本地部署
- 单体 LLM 架构,在复杂多合并症病例下容易出现上下文饱和
OncoAgent 围绕三个核心原则设计:
- 架构分解: 临床推理被分解到八个专门的 LangGraph 节点中,每个节点都有边界明确、可审计的功能。
- 有依据的生成: 所有模型输出都通过一个带显式相关性门控的四阶段检索 pipeline,锚定到经整理的向量知识库。
- 硬件主权: 完整推理与训练 stack 原生运行在 AMD Instinct MI300X 上,使用 ROCm 和开源框架,使医院无需数据外流即可部署。
2. 相关工作
2.1 临床 LLM 与决策支持
Large language models 在临床 NLP 任务中已展现出显著潜力,包括诊断编码、文献摘要和患者沟通。以 BioMedLM、Med-PaLM 2 和 ClinicalBERT 为代表的领域特定 fine-tuning 方法,在医学 benchmark 上相较通用模型持续提升性能。OncoAgent 将这一路线扩展到肿瘤分诊和治疗路径推荐这一特定子领域,在该领域中,hallucination 的后果最为严重。
2.2 Multi-Agent 架构
分解式 multi-agent 系统已成为处理复杂推理任务的一种原则性方法。OncoAgent 综合了四种典型 SOTA 模式:
- Claude Code pattern — 将确定性的安全约束与 LLM 推理分离
- Hermes Agent pattern — 结构化 tool-calling,并进行按会话的 memory 隔离
- Corrective RAG (Shi et al., 2024) — 文档相关性评分与 query 重写
- Reflexion (Shinn et al., 2023) — 通过反馈增强的重试循环实现自我纠正生成
2.3 医学中的 Retrieval-Augmented Generation
标准 bi-encoder 检索不适合术语精确性至关重要的临床领域(例如 "tyrosine kinase inhibitor" 与 "TKI")。OncoAgent 实现了一个包含 cross-encoder re-ranking 的多阶段 pipeline,并集成 Hypothetical Document Embeddings(HyDE; Gao et al., 2022),通过将自然语言 query 投影到 guideline embedding 空间来解决医学同义词不匹配问题。
3. 系统架构
3.1 概览
OncoAgent 使用 LangGraph 实现为有状态有向图。系统状态表示为不可变的 AgentState TypedDict,包含 11 个逻辑部分和约 30 个 typed key。每个节点向特定 key 追加内容,而不修改上游数据,从而保留完整审计轨迹。
8 节点拓扑如下:
Router → Ingestion → Corrective RAG → Specialist ↔ Critic → HITL Gate → Formatter → END
↓
Fallback → END
关键属性:
- 5 条条件边
- 1 个 reflexion 重试循环(最多 2 次迭代)
- 1 个针对高复杂度或低置信度输出的强制 HITL interrupt
3.2 复杂度 Router 与模型分层
在调用 Specialist 前,病例复杂度通过加权加性模型量化:
S = w_cancer + w_stage + w_mutations + w_treatment
其中:
| 因素 | 条件 | 权重 |
|---|---|---|
| 癌种 | 罕见 | +0.40 |
| 癌种 | 原发灶不明 | +0.30 |
| 分期 | Stage IV | +0.25 |
| 分期 | Stage III | +0.15 |
| 突变 | ≥2 个已识别 | +0.30 |
| 突变 | 单个 | +0.15 |
| 既往治疗 | 任意关键词匹配 | +0.10 |
决策边界:S ≥ 0.5 → Tier 2(Qwen 3.6-27B 深度推理)· S < 0.5 → Tier 1(Qwen 3.5-9B 快速分诊)
验证: 一个 Stage IV 胰腺癌伴 KRAS + BRCA2 突变病例正确得到 S = 0.80,路由到 Tier 2。✅
临床医生也可以通过 UI 手动覆盖 tier 选择。
3.3 带文档评分的 Corrective RAG
CRAG 节点会在转发给 Specialist 之前,对每个检索到的文档进行临床相关性评分。未通过二元相关性分类的文档会触发自动 query 重写(最多 1 次重试)。这消除了 RAG pipeline 中主要的 hallucination 来源——检索到标题看似合理但语义上无关的内容。
将评分步骤从 Qwen 3.5 迁移到 Qwen 2.5 Instruct 后,成功率从 0% → 100%,在子宫癌分诊测试中 RAG confidence score 达到 2.3+。
3.4 Reflexion 安全循环(Critic 节点)
Critic 节点在任何输出到达 HITL gate 之前运行三层验证级联:
- 格式检查 — 验证是否符合 OncoCoT 输出 schema 的结构要求
- 安全检查 — 基于确定性规则扫描禁止输出模式(无指南引用的绝对剂量、遗漏药物相互作用等)
- LLM entailment check — 验证 Specialist 的建议是否完全由检索到的 RAG context 支持
如果 FAIL,Critic 的具体反馈会被注入回 Specialist context 以重试(最多 2 次迭代)。关键在于,Critic 以确定性代码运行,而不是由 LLM 控制的逻辑——确保安全执行不会被对抗性 prompting 绕过。
3.5 Human-in-the-Loop Gate 与 Fallback
HITL gate 对所有 Tier 2 病例,以及任何 rag_confidence < 0.3 的输出提供强制临床医生 interrupt。专用 Fallback 节点捕获不可恢复的失败,并返回临床上安全的拒答——"Información no concluyente en las guías provistas"——在任何失败模式下避免生成幻觉式替代方案。
3.6 按患者隔离的 Memory
PatientMemoryStore 模块为每个患者会话分配唯一 thread_id(格式 PT-XXXX),并作为 configurable 参数传递给 LangGraph 原生 checkpointing 系统。这在支持会话内迭代式多轮咨询的同时,强制实现严格的按患者 memory 隔离。
4. 知识库构建与 RAG Pipeline
4.1 指南摄取与清洗
知识库由 77 份直接医师指南 PDF 构建,这些 PDF 由并发 web scraper 识别,该 scraper 在 60 秒内处理了 138 个 NCCN 详情页面。文本提取使用 PyMuPDF (fitz) 进行 block-level 结构解析,保留多栏临床版式的语义阅读顺序。
基于 regex 的清洗步骤会在摄取前移除机构品牌信息。面向患者的材料通过启发式过滤排除。最终语料覆盖 70+ 份专业肿瘤指南,涵盖所有主要癌种,包括 HCC、NSCLC、乳腺癌、结直肠癌和神经内分泌肿瘤。
4.2 医学 Embeddings 与 Vector Store
标准通用 embedding 模型(例如 all-MiniLM-L6-v2)因临床术语语义表现较差而被弃用。OncoAgent 使用:
- Embeddings:
pritamdeka/S-PubMedBert-MS-MARCO— 在 PubMed 和 MS-MARCO 上 fine-tuned,用于非对称医学语义搜索 - Vector store: 本地 ChromaDB 持久化索引 — 零云端、符合 Zero-PHI
4.3 四阶段检索 Pipeline
| 阶段 | 组件 | 功能 | 配置 |
|---|---|---|---|
| 1. Recall | PubMedBERT Bi-Encoder | 广撒网式检索 | top-15 candidates |
| 2. Distance Gate | Cosine Distance Filter | 反 hallucination 下限 | threshold = 0.10 |
| 3. Re-Ranking | Cross-Encoder (MS-MARCO MiniLM) | 联合 query-document 相关性 | top-5 returned |
| 4. Context Trimming | Character-Budget Limiter | 适配 LLM context window | max 6,000 chars |
反 Hallucination 策略: 任何未通过 Stage 2 的 query 都会返回 "Información no concluyente en las guías provistas",而不会调用 Specialist。这保证了对域外临床输入零幻觉式建议。
基于 NCCN 语料的距离阈值校准得出:
- 医学 query 距离:~0.06–0.09
- 域外距离:~0.11–0.15
- 硬阈值:0.10
可选 HyDE 模块会生成一个假想指南段落,并将其作为 Stage 1 检索的 embedding 锚点,以解决同义词不匹配(例如 "neoplasia pulmonar" 与 "lung carcinoma")。
5. 双层 QLoRA Fine-Tuning
5.1 训练语料:OncoCoT(266,854 个样本)
| 来源 | 类型 | 样本数 | 说明 |
|---|---|---|---|
| PMC-Patients | 真实临床病例 | ~85,000 | PubMed Central 患者报告 |
| Asclepius | 真实临床数据 | ~85,000 | 经整理的医学 QA 语料 |
| OncoCoT Synthetic | 合成(Qwen 3.6-27B) | 96,941 | 在 MI300X 上生成,~6,800 cases/hr · 拒收率 0.65% |
| 总计 | — | 266,854 | 90/10 train/eval split · SHA-256 hashed · deduplicated |
所有病例均使用 ChatML template 以兼容 Qwen。Thinking tokens 被禁用(chat_template_kwargs: {enable_thinking: False}),以防止 JSON 解析损坏。
5.2 QLoRA 配置
两个 tier 均通过 BitsAndBytes 使用 4-bit NormalFloat4 (NF4) 量化,并让 LoRA adapters 覆盖所有主要投影模块:q_proj、k_proj、v_proj、o_proj、gate_proj、up_proj、down_proj。
| 参数 | Tier 1 (Qwen 3.5-9B) | Tier 2 (Qwen 3.6-27B) |
|---|---|---|
| Per-device batch size | 4 | 2 |
| Gradient accumulation | 4 | 8 |
| Effective batch size | 16 | 16 |
| Learning rate | 2×10⁻⁴ | 1×10⁻⁴ |
| LoRA rank (r) | 16 | 32 |
| Sequence packing | True, 2048 tokens | True, 2048 tokens |
| Early stopping | Patience = 3 | Patience = 3 |
| Quantisation | NF4 4-bit | NF4 4-bit |
5.3 使用 Unsloth 进行 AMD MI300X 优化
原始 HuggingFace transformers + PEFT pipeline 在 MI300X 上失败,原因是两个相互独立的问题:
trlv0.24.0 严格 EOS 验证与Qwen3VLProcessorwrapper 之间的 tokenisation 冲突- 在标准精度下,目标 effective batch size 所需 VRAM 余量不足
迁移到 Unsloth's FastLanguageModel 后同时解决了两个问题:
- VRAM 降低: 峰值使用量下降约 60%(从 OOM 到在 192 GB 设备上稳定约 64 GB)
- 训练速度: 提升约 2×,在 effective batch 16 下达到约 16 s/step
所需的 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 Sequence Packing 与吞吐突破
通过 SFTConfig 中的 packing=True 进行 sequence packing,可将多个短临床记录拼接为单个 2048-token 序列,消除 padding 开销,并大幅减少 forward pass 次数。
Unsloth kernels 与 sequence packing 在 MI300X 上的叠加效果,使 266,854 个样本语料的全数据集 fine-tuning 可在约 50 分钟内完成,而初始估计为 5 小时,相当于约 6× 的训练时间压缩。GPU 利用率峰值约 70%,吞吐稳定在约 11.3 s/iteration。
Checkpoint-1000 结果: Tier 1 adapter 训练 1,339 steps · training loss ≈ 0.05 · adapter size 187 MB · 已根据包含
adapter_model.safetensors、adapter_config.json和tokenizer.json的 11 文件 manifest 验证。
系统支持自适应推理路由:当 ROCm 可用时,通过 LocalModelManager singleton 进行本地 BF16 推理,并可平滑 fallback 到 Featherless.ai API 以保证高可用。
6. 安全与隐私框架
6.1 Zero-PHI 策略
专用 Zero-PHI 脱敏节点作为 Ingestion 节点中的第一处理步骤运行,在任何文本到达 LLM 之前执行。它识别并替换 Protected Health Information(患者姓名、出生日期、MRN 编号、地址、医疗机构标识符),用临床中性的占位符替代。脱敏后的表示存储在 AgentState 中;原始文本被丢弃。
这确保没有 PHI 会到达任何下游 LLM 调用——无论本地还是远程——并通过设计而非策略满足 HIPAA 去标识化要求。
6.2 分层安全架构
系统的安全保证由四个独立层执行。任何单层失败都不会破坏整体安全态势。
| 层 | 机制 | 应对问题 |
|---|---|---|
| L1: Retrieval Gate | Distance Gate(cosine threshold 0.10) | 域外 hallucinations |
| L2: Confidence Gate | RAG confidence score < 0.3 → block | 低质量检索 grounding |
| L3: Reflexion Critic | 格式 + 安全 + LLM entailment(最多 2 次重试) | 无支持或不安全的 Specialist 输出 |
| L4: HITL Gate | 对 Tier 2 / flagged cases 强制临床医生 interrupt | 需要专家判断的高复杂度病例 |
第 1 层和第 2 层在检索层运行。第 3 层在生成层运行。第 4 层在部署层运行。所有第 3 层检查均以确定性代码运行,而不是由 LLM 控制的逻辑,从而防止通过对抗性 prompting 绕过安全机制。
7. 临床界面
OncoAgent UI 实现为实时流式 Gradio 应用,采用 ChatGPT 风格的对话布局。其功能包括:
- 左侧边栏: 会话控制、KPI tiles、证据来源 tabs
- 主聊天区域: 每个节点完成时显示实时 agentic reasoning 更新
实时透明性通过 LangGraph 的 .stream(stream_mode="updates") API 实现,该 API 在每个节点完成时发出 {node_name: node_output} dictionaries。UI 将每个节点映射为人类可读的临床标签(例如 corrective_rag → "Retrieving NCCN/ESMO guidelines"),为临床医生提供完整 pipeline 可见性。
rag_confidence score 和检索到的来源数量会被突出显示,使临床医生能够立即了解每条建议背后的指南 grounding 质量。
该界面按 WCAG 2.1 AA 标准设计——Lucide-style inline SVG icons、slate-900/sky-500 dark theme、Figtree/Inter typography、prefers-reduced-motion media query,所有 transitions 均限制在 200 ms 以内。
8. 结果
| 组件 | 指标 | 数值 |
|---|---|---|
| 知识库 | 已摄取指南 | 70+ |
| 解析 PDF | 138 in < 60 s | |
| 索引解析错误 | 0 | |
| CRAG Pipeline | 文档评分成功率(修复后) | 100% |
| RAG confidence score(子宫癌测试) | 2.3+(修复前为 0.0) | |
| 并行评分延迟(3–5 docs) | < 5 s | |
| 复杂度 Router | Stage IV 胰腺癌 + KRAS + BRCA2 | Score = 0.80 → Tier 2 ✅ |
| 训练(Tier 1, 9B) | 完整 266k-sample 训练时间 | ~50 min(对比 5 hr 估计) |
| 稳态吞吐 | ~11.3–16 s/step | |
| GPU 利用率(MI300X) | ~70% peak | |
| VRAM 利用率(Unsloth) | ~64 GB / 192 GB | |
| checkpoint-1000 训练损失 | ~0.05 | |
| 合成数据吞吐(MI300X vs. API) | 6,800 vs. 120 cases/hr(56× ↑) | |
| 合成语料拒收率 | 0.65% | |
| Graph Topology | 已验证编译节点 | 8 / 8 |
| 通过的模块测试套件 | 6 / 6 | |
| UI | 分诊期间浏览器超时 | 0 |
| UI 渲染延迟 | < 200 ms |
9. 讨论
9.1 将硬件主权作为临床要求
完整 OncoAgent stack——训练、推理、RAG 和 UI——能够在单个 AMD MI300X 实例上运行且不依赖云 API,这不仅是工程便利。在受 HIPAA(美国)、GDPR(欧盟)及同等国家框架约束的医院环境中,将数据保留在受控基础设施内是绝对的法律和伦理义务。OncoAgent 表明,在这一约束下实现 SOTA multi-agent 临床 AI 是可行的。
9.2 吞吐突破
56× 的合成数据生成加速(从约 120 到约 6,800 cases/hr)与约 6× 的训练时间压缩,共同构成了对时间受限场景下领域特定 fine-tuning 可行性的重要实践贡献。这些结果表明,当 AMD 的 CDNA3 架构与 Unsloth 的 Triton kernel 优化和 SFT sequence packing 结合时,标准 HuggingFace 训练 pipeline 可能远未充分利用其能力,并且这种性能差距可以在不改变底层模型架构的情况下缩小。
9.3 局限性
有几个局限性需要说明:
- 训练语料约 36% 依赖合成生成病例。尚未针对 board-certified oncologist 判断进行大规模临床准确性验证。
- 当前知识库主要覆盖英文 NCCN 指南;ESMO 和非英文临床语料留待未来工作。
- Tier 1 adapter 是可能更长训练轨迹中的 checkpoint-1000;完整收敛和下游临床 benchmark 评估(MedQA、USMLE-style oncology subsets)计划在后续版本中进行。
10. 结论
OncoAgent 建立了一个完整、开源、保护隐私的肿瘤临床决策支持架构,整合了 SOTA multi-agent 设计模式、领域特定 fine-tuning,以及四阶段 grounded retrieval pipeline。
系统表明,生产级临床 AI 并不需要专有基础设施:完整 stack——包括 266k-sample QLoRA fine-tuning、70+ 指南 RAG、八节点 LangGraph 编排、三层 reflexion 安全验证,以及实时临床流式 UI——都可在 ROCm 下运行于单个 AMD Instinct MI300X 实例。
这些架构贡献——尤其是将 Corrective RAG、Reflexion 和 HITL gating 综合为一个一致安全 stack——为特定领域临床 AI 部署提供了可复用蓝图,适用于 hallucination 后果关乎生命安全的场景。
所有代码、adapter weights 和 OncoCoT 合成语料将公开发布在 Hugging Face Spaces 和 GitHub 上。
参考文献
- Singhal, K. et al. (2023). Large language models encode clinical knowledge. Nature, 620, 172–180.
- Nori, H. et al. (2023). Can generalist foundation models outcompete special-purpose tuning? Case study in medicine. arXiv:2311.16452.
- Wang, L. et al. (2024). A survey on large language model based autonomous agents. Frontiers of Computer Science, 18(6), 186345.
- Shi, W. et al. (2024). Corrective Retrieval Augmented Generation. arXiv:2401.15884.
- Shinn, N. et al. (2023). Reflexion: Language agents with verbal reinforcement learning. NeurIPS 2023.
- Nogueira, R. and Cho, K. (2019). Passage Re-ranking with BERT. arXiv:1901.04085.
- Gao, L. et al. (2022). Precise Zero-Shot Dense Retrieval without Relevance Labels. arXiv:2212.10496.
- Hu, E.J. et al. (2021). LoRA: Low-Rank Adaptation of Large Language Models. arXiv:2106.09685.
- Dettmers, T. et al. (2023). QLoRA: Efficient Finetuning of Quantized LLMs. NeurIPS 2023.
- Han, S. et al. (2024). LangGraph: Building stateful multi-actor applications with LLMs. LangChain Technical Report.
OncoAgent 旨在作为临床决策支持工具。所有输出在任何临床应用前都需要由持证医疗专业人员审核。