一声棒喝,本不立文字
偏要著録,已是二义

huggingface-blog

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:

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 辅助临床决策支持系统在弥合这一差距方面具有重要潜力,但大多数商业化系统在三个关键方面存在不足:

  1. 幻觉式建议,未基于经过验证的指南
  2. 云 API 依赖,阻碍其在隐私敏感的医院环境中进行本地部署
  3. 单体 LLM 架构,在复杂多合并症病例下容易出现上下文饱和

OncoAgent 围绕三个核心原则设计:


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 模式:

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

关键属性:

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 之前运行三层验证级联:

  1. 格式检查 — 验证是否符合 OncoCoT 输出 schema 的结构要求
  2. 安全检查 — 基于确定性规则扫描禁止输出模式(无指南引用的绝对剂量、遗漏药物相互作用等)
  3. 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 使用:

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 语料的距离阈值校准得出:

可选 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_projk_projv_projo_projgate_projup_projdown_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 上失败,原因是两个相互独立的问题:

  1. trl v0.24.0 严格 EOS 验证与 Qwen3VLProcessor wrapper 之间的 tokenisation 冲突
  2. 在标准精度下,目标 effective batch size 所需 VRAM 余量不足

迁移到 Unsloth's FastLanguageModel 后同时解决了两个问题:

所需的 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.safetensorsadapter_config.jsontokenizer.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 风格的对话布局。其功能包括:

实时透明性通过 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 局限性

有几个局限性需要说明:


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 上。


参考文献

  1. Singhal, K. et al. (2023). Large language models encode clinical knowledge. Nature, 620, 172–180.
  2. Nori, H. et al. (2023). Can generalist foundation models outcompete special-purpose tuning? Case study in medicine. arXiv:2311.16452.
  3. Wang, L. et al. (2024). A survey on large language model based autonomous agents. Frontiers of Computer Science, 18(6), 186345.
  4. Shi, W. et al. (2024). Corrective Retrieval Augmented Generation. arXiv:2401.15884.
  5. Shinn, N. et al. (2023). Reflexion: Language agents with verbal reinforcement learning. NeurIPS 2023.
  6. Nogueira, R. and Cho, K. (2019). Passage Re-ranking with BERT. arXiv:1901.04085.
  7. Gao, L. et al. (2022). Precise Zero-Shot Dense Retrieval without Relevance Labels. arXiv:2212.10496.
  8. Hu, E.J. et al. (2021). LoRA: Low-Rank Adaptation of Large Language Models. arXiv:2106.09685.
  9. Dettmers, T. et al. (2023). QLoRA: Efficient Finetuning of Quantized LLMs. NeurIPS 2023.
  10. Han, S. et al. (2024). LangGraph: Building stateful multi-actor applications with LLMs. LangChain Technical Report.

OncoAgent 旨在作为临床决策支持工具。所有输出在任何临床应用前都需要由持证医疗专业人员审核。

译自 huggingface-blog · 录于 二〇二六年五月九日