把环境关掉,多轮蒸馏反而更好?ReOPD 的"前缀陷阱"和解药
你有没有觉得,最近一段时间,agent 训练变得越来越"贵"了?以前训练一个 SFT 模型,准备好数据、跑几个 epoch 就完事了。现在要把模型丢到工具调用、搜索、代码执行这种交互环境里,让它"自己走几步",再把走出来的轨迹拿来当训练信号。每一步动作都要重新跑一遍环境,每一步都要去问老师模型要一次监督。
这事儿贵到什么程度?ReOPD 这篇论文 直接给你算了一笔账:在数学 + Python 工具的环境里,传统的 on-policy distillation(OPD)每跑一次 rollout 要 169 秒,搜索环境要 64 秒。模型训练过程中要部署 32 个并行进程跑 Python,要占 80GB 显存跑 Wikipedia embedding。而他们提出的 ReOPD 把这些数字直接砍到 40 秒、7 秒、0 进程、0 显存——同时准确率还比 OPD 更高。
更狠的是,ReOPD 做到了"训练学生模型期间环境调用次数为零"。所有的教师轨迹都是事先采好的,训练阶段只需要"回放前缀 + 让学生在第 t 步生成动作 + 老师给监督"这个三步流程。学生不再需要真的去执行 Python,也不需要真的去查 Wikipedia。
核心摘要:ReOPD 把多轮 on-policy distillation 从"全程在线"变成了"全程离线"——复用教师在 RL 阶段顺便采好的轨迹池,把学生推到 teacher-forced 的前缀上去做 KL 蒸馏。论文同时给出了一个"前缀陷阱"(prefix trap)的二阶分析:完全 student-on-policy 并不是最优解,因为历史越偏离教师自己的分布,老师的监督就越不可信。最终 ReOPD 用一个简单的 step-decay 采样调度(\(\omega(t)=\kappa^t\))来平衡"学生相关性"和"教师可靠性"这两个目标。在数学 + 搜索两类 agentic 任务上,ReOPD 在多个教师/学生规模下都匹配甚至超过 OPD,平均推理时是 OPD 的 1/4 到 1/9。这是 agent 训练领域少见的、把"在线依赖"从 100% 砍到 0% 同时效果还不掉的工作。
论文信息
- 标题:Multi-Turn On-Policy Distillation with Prefix Replay
- 作者:Baohao Liao, Hanze Dong, Christof Monz, Xinxing Xu, Li Dong, Furu Wei
- 机构:Microsoft Research Asia, University of Amsterdam
- 链接:arXiv:2607.04763
- 项目页:baohaoliao.github.io/ReOPD
- 日期:v1 提交 2026/7/6,v2 更新 2026/7/16
痛点:在线蒸馏为什么这么贵
多轮 agent 训练(数学 + Python 工具、搜索 + 检索)已经成为最近一年 LLM 后训练的标准范式。GRPO / PPO 这类纯 RL 的做法用 outcome reward 即可,但学生信号稀疏,蒸馏(distillation)能给学生更密集的 per-step 监督。
这里有一个关键区分:传统 SFT 是"用教师跑出来的轨迹当静态数据",学生只在教师见过的状态上学习;on-policy distillation(OPD)则是"学生先在环境里走几步得到 prefix,老师在同样的 prefix 上给出 target"。OPD 的理论优势是消除了 covariate shift——学生看到的状态就是自己会到达的状态,所以老师给的监督是对路的。
代价是什么?每个 OPD iteration 都要:
- 把学生模型丢进环境,rollout 一条新的多轮轨迹;
- 在每一步调用老师模型,给出当前历史下的 target;
- 算 per-token 的 KL 散度,做一次参数更新。
环境(Python 执行器、搜索 embedding、Wikipedia 索引)在整个训练过程中都要保持 alive。多个异构环境一起训练时,部署成本和资源消耗是线性的。图 7 里的数字很直观:搜索环境要常驻 80GB 显存跑 E5 embedding,数学环境要常驻 32 个进程跑 Python。

图 3:左边是 OPD,每个环境都要保持在线;右边是 ReOPD,轨迹先离线采好合并,学生训练时环境完全关闭
一个自然的问题是:既然 GRPO 训练老师时已经在线跑了那么多环境、采了那么多轨迹,能不能把这些轨迹"废物利用"?ReOPD 的核心 idea 就是这个。
方法:把轨迹当 prefix 来回放
ReOPD 的算法流程只有 11 行,但背后藏着一个挺深的观察。
输入:teacher pool D_T,teacher π_T,student π_θ,step-decay schedule ω(t;κ) = κ^t
1: 初始化 θ_old ← θ
2: for each OPD iteration do
3: 从轨迹池中拼出候选位置 {(x, h_t)} ▷ prefix h_t = 教师前 t 步的动作/观察
4: 按 p_t ∝ ω(t; κ) 采样位置 ▷ 早步骤、低 shift 的位置被采到更多
5: for each sampled position (x, h_t) do
6: 学生生成动作 A_t ~ π_{θ_old}(·|x, h_t) ▷ 纯 token 推理,不调环境
7: 累加 per-token KL: Σ D_KL(π_θ || π_T)
8: end for
9: 更新 θ;θ_old ← θ
10: end for
伪代码看起来非常朴素,关键在第 3 行和第 4 行的设计。
第 3 行的 prefix \(h_t\) 来自教师自己的轨迹——也就是训练老师时 GRPO 自然采出来的那些 \((o_1, a_1, o_2, a_2, \ldots, o_t)\)。这是 ReOPD 最重要的免费午餐:老师训练时的环境交互直接成了学生的训练数据,不需要额外花一分钱。
第 4 行的 \(\omega(t; \kappa) = \kappa^t\) 是本文的核心机制。当 \(\kappa=1\) 时退化为均匀采样("所有步骤同等重要"),\(\kappa<1\) 时早步骤被采样到的概率指数级更高。为什么是"早步骤"?这是 ReOPD 第二个关键洞察:
越长的 prefix,学生和老师的分布差异(shift)越大;shift 越大,老师的"条件"就越不可信。
论文把这叫做 prefix trap——一个双向的分布偏移:
- 学生侧 shift(occupancy mismatch):prefix 越长,越偏离学生本来会走到的状态,老师的监督虽然在该 prefix 上"合理",但对学生来说相关性下降;
- 老师侧 shift(reliability shift):prefix 越偏离老师自己的 support,老师在该 prefix 上的条件分布就越接近"瞎猜",target 不可信。
经典 DAgger 的做法是让 student-on-policy 来消除第一项 shift,结果却让第二项变差。ReOPD 的解法是承认这个 tradeoff,用 step-decay 把训练质量主要放在"早步骤、低 shift"的区域上,牺牲一点尾部的样本效率,换来的是整体训练信号更可靠。
下面这张对比图把 ReOPD 和 OPD 的本质差异画得挺清楚:

图 2:OPD vs ReOPD 训练流程对比。ReOPD 把环境调用从学生训练阶段彻底剔除了
为什么 step index 是个够用的 proxy
论文里有一个挺巧的实验观察,让"step-decay"这个看起来粗暴的启发式变得有依据。Figure 4 画的是 \(\log \hat{r}_t = \sum_{s \lt t} \log \pi_{\theta_{old}}(a_s)/\pi_T(a_s)\)——也就是学生和老师在前缀 \(h_t\) 上的累积似然比——随归一化 step index \(t\) 的变化。

图 4:累积似然比 \(\log \hat{r}_t\) 随 step 几乎线性下降,所以 step index 本身就是个不错的 shift 代理
绿线一路下滑,说明在老师自己的 prefix 上做累积似然比,会随着 step 增加而下降——直观上就是"走得越远,学生的可能性就越来越偏离"。这个图给了一个"step-decay 是合理的工程近似"的实证基础,不需要学一个复杂的 reliability estimator 了。
当然作者也在最后坦承(Limitation 部分):step index 是粗的代理,理想情况下应该直接估计"该 prefix 距离学生-教师分布 overlap 有多远",但前者已经够好用了。
一些数值上的惊喜
主实验覆盖数学(Python 工具)和搜索(Wikipedia 检索)两类环境,跨多个教师-学生规模组合。下面挑 Table 4 的核心数据看:
数学任务(学生 Qwen3-4B-Instruct-2507,6 个数学竞赛 benchmark 平均):
| 老师 | 方法 | Avg | AIME24 | AIME25 | MATH500 |
|---|---|---|---|---|---|
| Qwen3-4B | SFT | 46.1 | 21.7 | 21.3 | 80.9 |
| Qwen3-4B | OPD | 55.1 | 35.4 | 29.2 | 86.9 |
| Qwen3-4B | ReOPD | 57.2 | 40.8 | 31.3 | 88.9 |
| Qwen3-8B | OPD | 51.0 | 28.3 | 26.3 | 85.8 |
| Qwen3-8B | ReOPD | 53.7 | 36.7 | 29.2 | 84.7 |
| Qwen3-30B-A3B | OPD | 51.1 | 28.3 | 25.8 | 83.8 |
| Qwen3-30B-A3B | ReOPD | 52.5 | 32.5 | 26.7 | 86.5 |
看清楚了吗?ReOPD 不是"匹配 OPD",而是在每一行都明显超过 OPD。比如 4B 教师 + 4B 学生,OPD 平均 55.1,ReOPD 平均 57.2,多 2.1 个点;AIME24 上 35.4 → 40.8,多 5.4 个点。8B 教师 + 4B 学生,OPD 51.0,ReOPD 53.7,多 2.7 个点。
这跟论文的 prefix trap 理论是一致的:当老师和学生差距越大(4B 对 4B 差距小,8B 对 4B 差距大,30B 对 4B 差距更大),OPD 的 student-on-policy roll-in 越容易把老师推到不可靠的区域,ReOPD 退到 teacher-supported prefix 的优势就越明显。
搜索任务(Table 5)的结果就反过来:OPD 和 ReOPD 几乎打平。这是因为搜索任务里 4B 老师在 4B 学生诱导出来的状态上本身就很可靠,student-occupancy shift 主导,teacher-reliability shift 几乎不起作用,ReOPD 没有"发挥空间"。
关于 decay 系数 κ 的实验观察
Figure 5(b)画了 \(\kappa\) 从 0.2 到 1.0 的扫描结果。Qwen3-8B 教师 + 4B 学生这个组合下:
- \(\kappa=0.2, 0.4, 0.6\):准确率 53.4% / 53.0% / 53.4%(基本打平);
- \(\kappa=0.8\):52.2%;
- \(\kappa=1.0\)(均匀):50.9%。

图 5:左图说明"早步骤更值钱",右图说明 κ 选个中等值(比如 0.2~0.6)就够了
这是一个相当鲁棒的结果。只要有一个温和的 decay 就能拿到比均匀采样好得多的效果,强烈 decay(接近 0)反而没什么额外收益。这跟有些论文里"超参敏感"的吐槽形成对比——step-decay 是个相当"傻瓜化"的设计选择。
异构环境:ReOPD 的真正杀手锏
Table 6 是我最欣赏的一组实验。论文里直接训练了一个 Qwen3-4B 学生,同时在数学和搜索两个环境上做蒸馏,并评估两个领域的 benchmark。
这事儿在 OPD 设定下是非常痛苦的:你要同时部署 Python 执行器、Wikipedia embedding、E5 retriever,每种环境都要在线跑一遍,每个教师(环境的 4B 老师是分开的)都要单独 rollout。ReOPD 只需要:
- 数学教师在数学环境里跑出 6K 轨迹;
- 搜索教师在搜索环境里跑出 6.5K 轨迹;
- 把这些轨迹合并成一个统一的 prefix 池;
- 学生模型在这个池子上做 ReOPD。
训练过程中两类环境都完全关闭。结果是数学平均 55.3(vs OPD 55.2,GRPO 55.5),搜索也基本追平 OPD。单个学生模型,多个异构环境,没有任何额外基础设施成本。Figure 3 那个"左 N 个 teacher 同时跑 vs 右 N 个 teacher 分别跑 + 合并"的对比例子,把这种工程上的解耦展示得很清楚。
等等,这一切真的吗?让我来挑挑刺
读这篇论文的时候,我有几个地方想多问一句。
1. 教师轨迹真的是"免费"的吗?
论文反复强调 "RL rollouts are already collected during training, so the prefix pool comes for free"。这话在他们的实验里完全成立——他们训练老师时采了 6K-6.5K 轨迹,刚好够用。但在工业场景里,如果老师是闭源 API 模型(如 GPT-4o、Claude Sonnet),你采不到完整的多轮轨迹;如果你手头只有一个已经训好的开源老师,但训练日志没保留,你也采不到。这两种情况下 ReOPD 只能退化到"重新让老师跑一遍环境采轨迹"。
Figure 8 测了这个退化场景:把"教师重新采样"的时间算进去后,ReOPD 在数学上还能有 2.1 倍加速,在搜索上 4.6 倍加速——依然赢,但加速比没"免费"那么大。所以"零成本"这个宣传语是有前提的。

图 8:把教师重新采样时间算进来之后,ReOPD 相对 OPD 仍然有 2-4 倍加速
2. Step-decay 是最优的吗?
论文在 Limitation 部分诚实地承认了这一点。Step index 是个"how deep"的代理,不是"how far from overlap"的直接估计。理想情况下应该学一个 reliability estimator,但作者也没做。Figure 6(b)的 κ 扫描显示 0.2~0.6 都差不多,说明这个超参的稳健性不错,但同时也暗示这是个"工程上够用、不是理论最优"的选择。
3. 教师必须能生成教师自己可靠的多轮轨迹。
这是 prefix trap 理论的反面要求。如果教师的"自己 rollout"在某个 step 上就崩了(乱码、不合法的 Python、循环搜索),那这个 prefix 也不可信。论文隐含假设了教师有足够的能力跑出完整轨迹(用了 GRPO 训过的 Qwen3 系列),但这在弱教师场景下不成立。
4. 跟同期工作的对比有限。
论文没怎么和"传统 SFT 加大规模数据"、"rejection sampling FT"、"普通 DAgger 式 on-policy 数据收集"做仔细对比。Table 4 里给了 SFT 和 Cold Start 的 baseline,但 SFT 是在 2K 冷启动轨迹上做的,跟"用同样数据量的 OPD 轨迹 SFT"可能不是最公平的比较对象。这是我希望看到的下一组实验。
我的判断
这是 agent 训练领域一个相当务实的工作。它的核心贡献不是某个花哨的算法,而是把"多轮蒸馏需要在线环境"这个看起来理所当然的假设拆掉了。
读完整篇论文,我的第一反应是:这种"训练数据 + 训练目标 + 训练环境"三者解耦的思路,可能是 agent 训练工业化的下一个关键拼图。一旦你可以把"教师在某环境里的轨迹"当一个静态资产存起来,下游的所有"在该环境上学出来的学生"就不再是孤岛——你可以把多个环境的轨迹合并起来训一个统一的学生,可以复用不同教师在同一环境上的轨迹做模型融合(mixture-of-teachers),可以做"环境-学生"匹配的 curriculum 设计。Table 6 已经演示了第一步,剩下的空间还很大。
另一个让我印象深刻的是 Figure 7 的 prefix source 实验。当学生强制在"用其他模型 prefix + 自己老师给 target"的设定下训时,效果甚至不如"用老师自己 prefix + 自己老师给 target"——这说明老师的可靠性是依赖于老师自己的状态分布的,换个 prefix 来源会污染监督信号。这个观察是 ReOPD 整个设计选择的实证基础,也为"为什么不能简单 SFT 教师轨迹"提供了新的解释角度。
回到工程视角。如果你在做 agent 训练,ReOPD 立刻能给你的工程启发是:
- 训练老师的时候,把所有 RL rollout 持久化到磁盘——这可能是免费的 ReOPD 数据;
- 即便不做 ReOPD,多环境部署的开销也值得被当成一等公民——很多团队其实可以先做"统一轨迹池"这一步;
- step-decay 是个有理论支撑的轻量工具,下次做类似多阶段训练时可以试试类似思路。
一句话总结
ReOPD 用"回放教师轨迹前缀"这个看起来简单的 trick,把多轮 agent 蒸馏从"全程在线"变成"全程离线",同时通过 step-decay 调度绕过了"student-on-policy 会让老师越走越偏"这个 prefix trap。在数学和搜索两类 agentic 任务上,它比 OPD 更准、5-10 倍更快、零环境调用,而且当一个学生要学多个异构环境时,它的工程优势更明显。
觉得有启发的话,欢迎点赞、在看、转发。跟进最新AI前沿,关注我。