用两种老师教一个模型:Agentic-R1 如何让数学题既快又准?
“
关键词:Agentic-R1、DualDistill、工具调用、长链推理、数学推理、代码执行、模型蒸馏
在解一道复杂的数学题时,你会怎么做?
有人习惯先在草稿纸上一步步推导;也有人直接打开计算器或写几行 Python 脚本,让机器代劳。两种办法各有优劣:手写推导灵活却容易算错;代码跑得飞快,可一旦思路跑偏,结果就南辕北辙。
语言模型也面临同样的两难。最近,卡内基梅隆大学的研究团队发布了一个叫 Agentic-R1 的新模型,它学会了“两条腿走路”——先用自然语言思考,再视情况调用代码工具,最终把两种策略融会贯通。背后的技术被称为 DualDistill,简单说就是让一个“学生模型”同时向两位风格迥异的“老师”学习,再自我反思、自我改进。
本文用尽量通俗的语言,带你拆解 Agentic-R1 是如何炼成的,并给出可直接复现的训练与评测步骤。读完你将了解:
-
为什么单一策略(纯推理或纯工具)都不够好 -
DualDistill 如何把两位老师的解题轨迹“拼接”成一份教材 -
自己如何上手训练、微调、评估这套流程 -
项目的局限与下一步可以探索的方向
一、纯推理 vs. 纯工具:为什么都不够完美?
举个例子:
-
题目让算 2016 层嵌套的代数式极限,纯手写推导可能算到天荒地老; -
反过来,若题目要求“证明某组合恒等式”,光跑代码只能枚举小规模,无法给出通用证明。
Agentic-R1 的核心思路是:让模型先判断题型,再决定“动脑”还是“动手”。
二、DualDistill:把两位老师的“解题录像”剪成教材
2.1 两位老师是谁?
-
Teacher A:OpenHands
基于 Claude-3.5-Sonnet 的代码智能体,擅长写脚本、调库、跑数值。 -
Teacher R:DeepSeek-R1
长链推理专家,靠一步步文字推导拿下高难度数学题。
两位老师风格南辕北辙,但正好互补。
2.2 “拼接”而非“复制”——轨迹合成(Trajectory Composition)
研究团队准备了 2600+ 道数学题,让两位老师各解一遍,再按下面的规则“剪片子”:
最终拼成一份 2.6k 条精选轨迹 的小数据集,远小于传统蒸馏动辄几十万条样本的规模,却足够教会学生“何时切换策略”。
2.3 自我反思:Self-Distillation
学生模型第一次学完后,仍可能“手生”:有时明明心算就能搞定,它偏要写脚本,结果代码写错反而误事。
于是研究团队让它 自己再做一遍题,把做对的、做错的统统收集起来,再用老师给出的“标准答案”做二次微调。
这个过程被称为 Self-Distillation,相当于学生写完作业后,再对照老师批改,查漏补缺。
三、动手实战:从 0 到 1 训练自己的 Agentic-R1
下面给出官方仓库原封不动的命令行流程,确保你能完整复现。所有脚本已开源在 GitHub。
3.1 环境准备
# 1. 克隆仓库
git clone https://github.com/StigLidu/DualDistill.git
cd DualDistill
# 2. 创建 Python 环境(推荐 3.11)
conda create -n dualdistill python=3.11
conda activate dualdistill
# 3. 安装依赖
pip install -r requirements.txt
pip install flash-attn --no-build-isolation
3.2 下载基座模型与训练数据
# 下载 7B 基座模型
python script/data_script/model_download.py \
--repo_id deepseek-ai/DeepSeek-R1-Distill-Qwen-7B \
--local_dir models
# 自动拉取教师轨迹数据
python script/data_script/teacher_data_download.py
3.3 第一次微调:教师蒸馏
bash script/sft_script/SFT.sh
这一步用 4×A6000 GPU 大约跑 12.7 小时,产出 Agentic-R1-7B。
3.4 第二次微调:自我蒸馏
# 启动推理服务
bash script/eval_script/start_inference_server.sh \
[第一次产出模型路径] agentic-r1 8080
# 采样自我训练轨迹(约需数小时)
python sft/self_distillation_sampler.py \
--server_url http://localhost:8080/v1 \
--model_name agentic-r1 \
--model_path [模型路径] \
--save_path traj_cache/
# 数据后处理
python script/data_script/extract_training_solution.py
python script/data_script/processing_self_distillation_traj.py
# 再次微调
bash script/sft_script/expert_iteration.sh \
[模型路径] [数据路径] [输出路径]
产出 Agentic-R1-7B-SD,即最终强化版。
四、效果实测:数字说话
“
数据来自论文 Table 1,指标为 Large Budget(32k tokens) 下的准确率。
可见融合策略后,Agentic-R1 在需要“又算又推”的题目上明显领先;同时在传统纯推理题上也没有掉队。
五、真实轨迹赏析:模型如何“灵机一动”切换策略?
示例 1:从代码到文字
题目要求计算极限
模型先用 Python 跑数值,发现浮点精度不够,随即切换文字推导,最终锁定极限值为 589824。
(完整对话见论文附录图 6)
示例 2:从文字到代码
题目问:有多少个 26 元组 (k1…k26)
,每个元素取 0、1、3 且总和为 15?
模型先尝试手算组合公式,发现枚举量巨大,立刻写了一段动态规划脚本,2 秒得出 853,423,740。
(完整对话见论文附录图 7)
六、局限与未来工作
研究团队非常坦诚地列出了当前不足:
-
过渡语手工痕迹重
目前切换策略时的提示语是事先写好的,偶尔显得生硬。未来希望模型自己学会更自然的衔接。 -
数据量仍偏小
2600 条轨迹足以让 7B 模型“学会选择”,但若要从零培养全新策略,数万条才够。扩充数据集是下一步重点。 -
仅限数学任务
框架在数学上验证充分,尚未拓展到物理、化学或真实业务场景。
七、如何引用与获取资源
如需引用,请使用以下 BibTeX:
@article{du2025agentic,
title={Agentic-R1: Distilled Dual-Strategy Reasoning},
author={Du, Weihua and Aggarwal, Pranjal and Welleck, Sean and Yang, Yiming},
journal={arXiv preprint arXiv:2507.05707},
year={2025}
}
八、结语:教会模型“动脑”也“动手”
Agentic-R1 的突破在于,它不再执拗于“要么全靠想,要么全靠算”,而是像一位经验丰富的解题者:
-
先扫一眼题目,判断数值大不大、逻辑抽象不抽象; -
再决定是拿起笔推导,还是敲几行代码; -
如果半路发现策略不对,及时换招。
这种“双策略蒸馏”思路不仅适用于数学,也为其他需要混合推理与工具的任务提供了范式。期待社区在此基础上,把更复杂、更贴近真实世界的问题也一一攻克。