用 32B 参数做出专家级医学研究员:MedResearcher-R1 的技术拆解与实操指南

对话式长文,面向有一定 Python 基础的开发者与医学信息从业者


1. 为什么通用“深度研究”工具在医学场景里会失灵?

很多人第一次用 ChatGPT 或同类“深度研究”工具时会觉得惊艳:它能同时搜索、阅读、总结,似乎无所不能。
可一旦把问题换成医学场景,准确率就会断崖式下跌。团队把 OpenAI 的 o3-deepresearch 拿到 2025 年发布的 MedBrowseComp 医学基准测试上跑,结果只有 25.5% 的准确率——医学领域成了通用模型的“滑铁卢”。

模型 在 MedBrowseComp 上的准确率
o3-deepresearch 25.5 %
Gemini-2.5-Pro-deepresearch 25.0 %
MedResearcher-R1-32B 27.5 %(新 SOTA)

问题出在哪?

  • 知识稀疏:罕见病、最新临床试验、药物相互作用这类信息在通用语料里密度极低。
  • 工具错位:通用搜索 API 对医学权威数据库(FDA、ClinicalTrials.gov、PubMed 子集)支持有限,导致推理链在关键环节断掉。

于是,团队做了三件事:

  1. 用医学知识图谱自动“长链”造题,让模型在训练期就接触高难度多跳问题。
  2. 自建 PrivateMedicalRetrieverClinicalReasoningEngine,把权威数据库封装成可调用的工具。
  3. 先用 2100+ 条合成轨迹做监督微调,再用强化学习奖励“答得准、工具用得少”。

2. 整体框架:一条从“罕见实体”到“可执行动作”的流水线

用一张思维导图(图 1)先给出鸟瞰:

graph TD
A[罕见医学实体] --> B[构建子图]
B --> C[抽取最长推理链]
C --> D[合成问答对]
D --> E[轨迹 Masking]
E --> F[SFT + RL 训练]
F --> G[32B 模型上线]

对应的系统模块在代码仓库里就是三个文件夹:

  • KnowledgeGraphConstruction(子图与问答生产)
  • TrajectoryGenerationPipeline(轨迹重写、过滤)
  • EvaluationPipeline(线上评估与交互)

3. 步骤拆解:手把手跑通一次“问题-轨迹-模型”闭环

3.1 环境准备(3 分钟)

方式 命令
venv python -m venv .venv && source .venv/bin/activate && pip install -r requirements.txt
conda conda create -n med_r1 python=3.10 && conda activate med_r1 && pip install -r requirements.txt

注意:Python ≥ 3.10 才能用上 match-case 语法。

3.2 启动可视化界面,先“肉眼”理解数据长什么样

python KnowledgeGraphConstruction/start_web.py

浏览器打开 http://localhost:5000,左侧上传一份包含医学实体的小 CSV(示例里叫 demo_medical.csv),界面上会实时画出一张力导向图,节点是疾病/药物/症状,边是“治疗”“导致”“相互作用”等关系。

你可以:

  • 点一个罕见病节点,看它 3 跳之内能连到哪些靶点。
  • 用“max_chain”策略按钮,让系统一次性抽最长路径,自动生成问答文本与推理链。

3.3 批量生成问答对(可选,也可以直接用开源数据)

cd KnowledgeGraphConstruction
python batch_qa_cli.py \
  --seed-file demo_medical.csv \
  --output ../TrajectoryGenerationPipeline/dataset/qa.jsonl \
  --max-iterations 3      # 迭代次数越大,问题越复杂

生成完的文件长这样(节选):

{"id":"rare_001","question":"针对携带 LMNA 基因突变的扩张型心肌病患者,目前有哪些处于 II 期临床试验阶段的新药?","answer":"截至 2025-08,符合条件的药物有 XXX-124(NCT059...)和 YYY-987(NCT061...)。","reasoning_chain":["检索 LMNA 关联疾病→定位扩张型心肌病→限定 II 期试验→交叉 FDA 药品库"]}

3.4 把问答变成“可训练”的多轮轨迹

配置文件 TrajectoryGenerationPipeline/src/trajectory_generation/config.json 里填好:

  • api_base:你的 OpenRouter 或本地 vLLM 地址
  • model:如 openai/gpt-4o-mini 或自己训好的 checkpoint
  • dataset:上一步生成的 qa.jsonl

执行:

cd TrajectoryGenerationPipeline
python src/trajectory_generation/run_reasoning.py        # 生成原始轨迹
python src/postprocessing/pipeline.py \
  --input_dir generation/gpt-4o-mini/qa \
  --mode eval_filter                                   # 过滤掉幻觉轨迹
python src/postprocessing/pipeline.py \
  --input_dir generation/gpt-4o-mini/qa \
  --mode rewrite                                       # 再写一次,减少 token

完成后得到 rewritten_results.jsonl,可直接喂给 32B 模型做 SFT。


4. 训练:两段式,先模仿再强化

阶段 数据量 目标 关键技巧
监督微调 (SFT) 2100+ 轨迹 学会“何时调用哪个工具” 5 % 工具输出随机损坏,逼模型做异常处理
强化学习 (GRPO) 在线采样 最大化答案准确率,最小化工具调用次数 奖励=答对 + 0.2×专家偏好 – 0.1×冗余调用

两段加起来,在 8×H200 上 3 个 epoch 就能收敛;单机 8×A100 约 6 小时。


5. 上线:用 vLLM/SGLang 起服务,再用评估脚本跑分

5.1 起服务

pip install sglang[all]
CUDA_VISIBLE_DEVICES=0,1 \
python -m sglang.launch_server \
  --model-path ./MedResearcher-R1-32B \
  --port 6001 --tp-size 2

5.2 单题交互(方便 Debug)

cd EvaluationPipeline
python eval_cli.py --mode interactive

在命令行里输入问题,模型会返回 Thought → Tool Call → Observation → Final Answer 的完整轨迹,方便肉眼检查。

5.3 批量跑 Benchmark

python eval_cli.py \
  --mode batch \
  --dataset medbrowsecomp \
  --workers 20

跑完自动生成 score.json,直接对标论文里的 27.5% 数值。


6. 常见疑问 FAQ

Q1:我只有一张 4090,能复现吗?
A:可以。把 max-iterations 设小、batch size 调低即可;或者直接用开源的 open_data.jsonl 做 LoRA 微调,12 GB 显存就能跑。

Q2:非医学领域能不能用?
A:框架完全通用。把实体换成金融、法律、工业安全等领域,替换种子文件即可。问答生成、轨迹重写、RL 训练脚本都不用改。

Q3:为什么一定要用 Masked Trajectory Guidance?
A:如果只给完整轨迹,模型会“背答案”;把实体 Mask 掉以后,模型必须自己调用工具去补全,真正学会“怎么找”而不是“记住答案”。


7. 从“技术”到“产品”:一条更长期的路径

论文里有一句话:

“训练模型的过程就是构建产品的过程。”

在 MedResearcher-R1 项目里,团队把“问题生成系统”做成可交互前端,把“轨迹重写”做成一键脚本,把“评估”做成可扩展 benchmark。
于是,模型不再只是“跑在 GPU 里的权重”,而是一整套可复现、可迭代的医学研究工作流

下一步,团队计划:

  1. 支持放射影像、病理切片等多模态工具。
  2. 引入医生实时反馈,做人类偏好对齐 RLHF。
  3. 把上下文从 32 K 扩展到 128 K,支持更长病历的连贯推理。

8. 如何引用

@article{medresearcher2025,
  title={MedResearcher-R1: Expert-Level Medical Deep Researcher via A Knowledge-Informed Trajectory Synthesis Framework},
  author={Ailing Yu and Lan Yao and Jingnan Liu and Zhe Chen and Jiajun Yin and Yuan Wang and Xinhao Liao and Zhiling Ye and Ji Li and Yun Yue and Hansong Xiao and Hualei Zhou and Chunxiao Guo and Peng Wei and Jinjie Gu},
  journal={arXiv preprint arXiv:2508.14880},
  year={2025}
}

如果你已经动手跑通了上面的脚本,恭喜你,你已经拥有了一个可扩展、可迁移、可商业落地的 Deep Research 框架。
下一步,换一份领域语料,它就能在另一个专业赛道里继续“攀登”。