我最近在做多轮 Agent 的蒸馏实验时,遇到了一个特别反直觉的现象:一个能力不错的 Agent 基座模型作为教师,去蒸馏一个更小的学生模型。离线测试指标一直在涨,可一旦把学生模型放进真实的多轮环境里跑,效果反而一轮比一轮差,在第二、第三轮开始频繁答非所问,甚至把工具调用参数都传错。这个现象,在 Agent 训练圈里常被叫作 agentic OPD 问题。
OPD 的全称是 Online Policy Distillation,翻译过来就是“在线策略蒸馏”。传统知识蒸馏是让大模型当老师、小模型当学生,通过拟合老师在某个状态下的输出分布来迁移能力。逻辑听起来顺理成章,但任务一旦从单轮问答切换到多轮 Agent 交互,问题就全变了。这篇文章我会把 agentic OPD 背后的机制拆开,讲讲多轮 Agent 为什么越蒸馏越差,也会把我自己踩过的坑、最终的排查和修复路径分享出来,给正在做 Agent 蒸馏或模型压缩的同行一个直接能用的参考。
1. agentic OPD 到底是什么?先分清三个概念
很多人第一次听到 agentic OPD 都会皱眉,觉得这个词组有点拗口。这里面的 agentic 强调的是“Agent 场景”,也就是模型要处理的不只是生成一段文本,而是要根据用户输入和上下文做决策、调用工具、维护多轮状态。OPD 强调的是“在线策略蒸馏”,训练过程会不断和环境交互,再拿新交互数据去蒸馏。两者叠在一起,就是在多轮 Agent 工作流里,让教师模型实时指导学生模型做策略层面的对齐。
1.1 从知识蒸馏到策略蒸馏,中间发生了什么
在传统 NLP 里,知识蒸馏的思路非常直接:教师模型的 softmax 输出里不仅包含正确答案,还包含“哪些错误答案更像正确答案”的信息。学生模型通过拟合这些软标签,能学到比硬标签更丰富的知识,典型场景就是图像分类模型压缩。
到了策略蒸馏,事情就不一样了。教师模型的输出不再是几个分类标签,而是高维动作分布。在一个 Agent 场景里,学生在某个状态下需要决定“下一句回复说什么”“该调用哪个工具”“工具的参数怎么写”。动作空间可能有好几万甚至几十万,评价单个动作好不好本身就是个难题。更麻烦的是,Agent 的动作会改变环境状态,单纯的分类式蒸馏根本没有覆盖这一步。
在线策略蒸馏和离线蒸馏的差别也在这里体现。离线蒸馏是用固定数据集里的状态-动作对训练学生,数据采集成本低,但数据分布完全由教师行为决定。在线策略蒸馏则要求学生在环境中自己跑,把跑出来的状态交给教师打分,再把教师的监督信号拿回来继续训练。这样能把学生自身的分布偏移纳入训练过程,但在多轮场景里,这种跑动产生的分布漂移恰恰是很多坑的开始。
1.2 多轮为什么不是“多几个单轮”
单轮问答的蒸馏,状态基本是静态的。模型答完一个问题,任务就结束了,不存在状态转移。多轮 Agent 则是一个闭环系统:学生模型的每一步输出都会影响下一步环境状态,下一步状态再影响学生后续输出。一个微小的偏差在闭环里会被不断放大,类似麦克风正反馈的啸叫。
举个例子,我在一个客服 Agent 蒸馏实验中,学生模型在前两轮表现得都正常,到第三轮开始记错用户最早说的订单号。用户明明说的是“订单 A123”,学生模型在写查询工具参数时,却把订单号写成了上下文里出现过的另一个字符组合。这个错误一旦发生,后续所有工具返回信息都变得不可信。教师模型为什么不出这种错?因为它有足够强的长程记忆和纠错能力,即使某一步模糊了,也能靠整体的语义理解找回正确上下文。学生模型如果只是局部拟合教师的高频输出,学到的往往是“单步模仿”,而学不到“整盘纠错”。
所以“多轮会越蒸馏越差”并非偶然。它不是训练不充分导致的震荡,而是策略蒸馏目标在多轮闭环环境里天然存在结构性问题。
2. 为什么多轮 Agent 越蒸馏越差:四个核心原因
这一节是全文的骨架。我把实践中反复验证过的四类原因写出来,每一类都会附上机制解释和实战判断标准,方便你对照自己的实验现象。
2.1 分布漂移与暴露偏差:学生在一个不属于自己的世界里模仿
这是最基础也最致命的问题。假设教师策略是 \pi_t,学生策略是 \pi_s。离线蒸馏时,训练数据里的状态大多由教师模型跑出来,也就是状态分布近似 P(s|\pi_t)。学生在这些状态下拟合教师动作,学得再好也只是“教师的舒适区”里的好学生。
到了部署环节,状态分布会变成 P(s|\pi_s),也就是由学生自己的策略主导。学生造出来的状态和在训练教师状态分布里见过的状态并不一致。一旦学生做出一个偏离教师选择的动作,环境会进入一个在训练数据里很少出现的新状态。这个新状态对输出来说更陌生,于是更可能做出错误决策,错误决策又制造更新、更罕见的状态。周而复始,分布漂移就成了正反馈。
这就像驾校学员在固定路线练了上百遍,教练坐在副驾时一切正常。真自己上路后,遇到的路况凡是训练路线里没出现过的,学员就会加速紧张、操作变形,接着进入一个更不熟悉的路口,然后彻底懵掉。多轮 Agent 的暴露偏差就是这条“新路况”循环。所以做多轮 Agent 蒸馏时,如果训练数据里 90% 都是教师采样或历史专家日志,而你发现线下指标提升但线上成功率下降,十有八九是分布漂移。
2.2 稀疏回报与蒸馏信号的冲突:教师也不保证每一步都对
第二个原因是训练信号来源太单一。很多走蒸馏路线的团队,直接把教师输出当成标准答案,用交叉熵或者 KL 散度去拟合,把环境奖励完全扔在一边。单轮分类任务里,这么做问题不大。但在多轮 Agent 任务中,环境奖励通常只在最后一步才出现,比如任务完成得 1 分,没完成得 0 分。中间每个动作的对错都是模糊的。
教师模型本身也远非全知全能。我在实验中就发现,教师模型在某个中间步骤会调用一个略显冗余的工具去确认信息。这个动作放在教师自己的全局规划里完全没问题,因为教师有能力整合后续信息。可学生模型没有这个判断力,它只是模仿了教师的“调用工具”动作,却没有继承“为什么在这里要调用工具”的意图。结果就是学生模型滥用工具,调用频率虚高,真实环境的回报反而更低。
这就是策略蒸馏和普通蒸馏最大的差异:普通蒸馏的学习目标是静态的“正确答案”,策略蒸馏的学习目标必须包含“这个动作放在当前状态里到底产生什么后果”。后果只能从环境反馈里读出来,而环境反馈是多轮结束后才能拿到的。如果蒸馏 loss 完全淹没了 reward 信号,学生就会变成一个“学得很像但在真实环境中没有回报”的面具模型。
2.3 logits 对齐不等于决策对齐:蒸馏目标选错了
第三个原因更隐蔽,也是我最开始没意识到的一个。语言模型蒸馏最常用的损失是让学生模型的 token 概率分布去拟合教师模型的 token 概率分布,通常用 KL 散度,训练时还会把教师输出的 logits 除以一个温度系数,比如 T=2,来放大分布中的暗知识。
这个目标的潜台词是:只要 token 分布接近,模型行为就接近。但在多轮 Agent 中,模型最终好不好,不只是看单个 token 概率像不像,而是要看它“选择的动作序列”和“放弃的动作序列”之间的边界是否一致。两个学生的 top-1 动作可能和教师一致,但在某个工具的调用参数置信度上差一点,在回答多轮问题时对早期上下文的注意力差一点。这些差别在单步评测里根本体现不出来,放到多轮自回归生成里就会被无限放大。
我试着直接对比过学生的解码输出。教师模型在某个不确定节点会有明显的犹豫,概率分布比较平滑。学生模型为了拟合教师分布,也会把平滑区域模仿出来,但在线上推理时,如果采样参数设置得比较激进,比如 temperature 调到 0.9,学生就会把这个“犹豫的尾巴”也采样出来,教师本来不会犯的错,学生竟然“忠实”地犯了一遍。这说明,指导策略蒸馏的不应该是逐 token 的分布拟合,而应该是更抽象的动作序列匹配、工具调用格式匹配和回合级的决策边界匹配。
2.4 多轮复合误差:一个 token 错,一路错
最后一个原因,是由语言生成的自回归特性和多轮闭环特性共同造成的累积误差。Agent 的每一次输出都由大量 token 组成,每个 token 都依赖前一个 token 和整段对话上文。一个 token 生成错,后续所有 token 的生成条件就变了。在单轮短文本任务里,这个误差最多影响一整句话,改正成本还可以接受。多轮 Agent 里,这个错误 token 会进入下一轮上下文,成为新一轮推理的“前提”。
于是你能看到一个典型病相:模型越往深走越蠢。第一轮表现很好,第二轮开始出现和用户话题不一致的回复,第三轮可能把用户之前提到的约束条件忘了,第四轮干脆重复自己刚才说过的话。不是模型突然坏了,而是早期某个低概率 token 的错误,在后续每轮中都在被重新提及和强化。教师模型遇到这种错误,可以用全局规划能力进行 correction。学生模型只学会了局部模仿,没有学会修正策略,于是直接把小错误滚成了大错误。
很多团队看到一个多轮蒸馏模型“单轮指标还行,一进 Eval 就崩”,第一反应是继续加数据、加大训练量。但我的经验是,如果训练量和数据量已经足够,你必须回头检查上述四类机制,再决定下一步怎么调,而不是盲目训练。
3. 实操复盘:一次多轮 Agent 蒸馏失败的全过程
前面说了很多理论判断,可能还是有点抽象。我把我自己最近一次完整的蒸馏实验复盘放在这一节,包括模型配置、失败现象和最终修好的路径。为了避免暴露具体业务信息,我对场景做了脱敏处理,但整体流程和数值形态基本能说明问题。
3.1 复现场景与模型配置
任务场景是一个多轮客服 Agent,需要根据用户的订单号、退货需求、库存状态等信息,决定是否调用查订单工具、查库存工具、发起退款流程。整个 Agent 可能有 4 到 8 轮对话不等,且有状态依赖:用户在第三轮补充的信息会改变工具的查询参数。
教师模型:一个有较强规划能力的通用大模型,参数量大概在 300B 量级。学生模型:7B 量级的开源语言模型。训练数据:离线采集了 2 万条历史 Agent 日志和 5000 条教师模型模拟轨迹,每一条轨迹都标注了完整的状态-动作序列。蒸馏方式:先用教师轨迹做 SFT 预热 1 个 epoch,然后用 KL 散度蒸馏 3 个 epoch,batch size 128,学习率 2e-5,温度系数 T=2。
初始结果:学生模型在离线评测集上的“下一动作准确率”从 61% 涨到 82%,工具调用格式合法率从 88% 涨到 96%,看起来非常理想。我当时一度觉得这次蒸馏稳了。
3.2 失败现象拆解:离线指标 vs 在线指标
真正的 Eval 用了两套指标:一套是离线静态指标,比如下一动作准确率、格式合法率、回复相似度;另一套是在线动态指标,让 Agent 直接在模拟环境里和测试用户跑完整轮次,统计任务成功率、平均轮数、工具调用有效率。
结果就是典型的“离线涨、在线掉”:任务成功率从教师 baseline 的 61%,一路掉到学生模型的 47%,第二轮失败率尤其高,第三轮以后经常出现上下文丢失。我拆了十多个失败案例,发现最集中的错误是“电话号码复制错”“订单号使用旧数据”“同义重复”。这些都是典型的多轮累积误差表现。
我列了一张表,方便你看清这个矛盾:
| 指标类型 | 具体指标 | 蒸馏前学生 | 蒸馏后学生 | 教师参考 |
|---|---|---|---|---|
| 离线 | 下一动作准确率 | 61% | 82% | 90% |
| 离线 | 工具参数格式合法性 | 88% | 96% | 98% |
| 在线 | 整体任务成功率 | 50% | 47% | 61% |
| 在线 | 工具调用有效率 | 64% | 55% | 72% |
| 在线 | 平均对话轮数 | 7.2 | 8.8 | 6.5 |
这张表其实揭示了一个真相:离线指标衡量的是“在当前输入状态下的输出正确性”,在线指标衡量的是“模型实际产生的状态序列是否在朝目标推进”。两个东西在单轮任务里强相关,在多轮任务里几乎可以完全背离。学生模型确实更会模仿教师的高频动作了,但它的动作导致环境状态越来越偏,因此在线表现不升反降。
3.3 从数据回放和课程学习找突破口
发现问题之后,我没有继续堆离线数据,而是对整个训练流程做了一次比较大的改造。核心思路很简单:把环境反馈请回来,让教师当顾问而不是当裁判。
第一步,切换到真正的在线策略蒸馏框架。每个训练 step,先让学生模型在当前环境里随机采样一批轨迹,把轨迹里的中间状态抽出来,送给教师模型打分。教师给出的 soft label 和学生自己的动作共同进入 loss。这样一来,训练数据里的状态不再全部来自教师采样,而是大量来自学生自己的真实足迹。
第二步,对教师的监督信号做置信度过滤。只有教师模型在某个动作上预测概率大于 0.8 的时候,这条数据才参与蒸馏 loss。教师自己都不确定的样本,不再强迫学生模仿。这些低置信样本留给环境 reward 信号来约束。
第三步,加入混合重放缓冲。缓冲区里既有教师的历史轨迹,也有学生的近期轨迹。采样时优先抽取那些在实时评估中表现差、任务失败的轨迹,也就是困难样本挖掘。这样能让学生集中精力修复自己的弱点。
第四步,课程化训练。初期只让学生跑两轮以内的短轨迹,等在线准确率回升后再逐渐增加轮数上限,从两轮加到五轮,最后放开到八轮。这能让模型先在可控的误差范围内学会基础行为,再逐步适应更长的闭环链路。
第五步,对 loss 做了混合。总损失大致是:蒸馏 KL 散度加一个环境 reward 加权后的动作对数似然,再加一个动作熵正则。用公式写大概是这样:
loss = α * KL(student || teacher) + β * reward_weighted_action_logprob + γ * entropy_bonus
其中 α 从 1.0 开始,随着训练进程逐步衰减到 0.3;β 从 0.1 开始逐步升到 0.8;γ 固定为 0.01。这个设计的意图是:前期让教师带路,学生先学到基本的动作结构;后期让环境说了算,学生不能只躺在教师的阴影里。
改造之后,我重新跑了同样的 Eval。任务成功率从 47% 回到了 58%,工具调用有效率从 55% 提升到 68%,平均轮数也从 8.8 降回 7.0。虽然没有完全超过教师模型,但至少不再是“越蒸馏越差”。这个结果也验证了我对核心原因的判断:问题不在学生模型的容量,而在训练目标把多轮闭环里的状态转移忽略掉了。
4. 常见问题与排查技巧实录
在实际做 Agent 蒸馏的过程中,肯定还会碰到各种分不清是数据问题、策略问题还是评估问题的情况。我整理了下面几类高频问题和排查方法,都是自己踩过坑之后沉淀下来的。
4.1 怎么判断是蒸馏本身出问题,还是评估环境有问题
一个很重要的自检方法:把教师模型放在完全相同的在线 Eval 环境里跑一遍。如果教师模型的在线指标也在掉,说明评估环境本身可能有问题,不一定是学生模型的锅。如果教师模型在线表现稳定,学生模型在线掉分,而离线指标又在涨,那大概率是蒸馏过程中的分布漂移或目标错配。
我还会加一个动态诊断:把学生模型的参数冻结几层,比如只训练后半段或者只训练 LoRA 层。如果训练 loss 下降很正常,但下游任务成功率在下降,那几乎可以肯定模型正在过度拟合教师的表面分布,而不是学到策略背后的决策逻辑。这时候必须停下来检查蒸馏目标,而不是继续跑训练。
4.2 在线收集数据还是离线固定数据集
很多团队受条件限制,只能做离线蒸馏,因为在线环境要么太贵,要么根本没搭好。我的建议是:纯离线做多轮 Agent 蒸馏的成本其实非常隐性。你看起来省了环境部署的钱,但后续 debug 可能要花好几倍时间。如果实在只能离线,至少要保证数据集里 30% 以上的轨迹来自“多样性探索”而不是“教师单一策略”,也就是尽量覆盖用户乱说话、模型出错、工具返回报错等边缘状态。
如果预算允许,我强烈建议至少留一部分在线数据作为联合训练。不需要一开始就全程在线,用 20% 比例的在线新鲜数据 + 80% 离线数据混合训练,就可能明显缓解分布漂移。我自己实验下来,加入 30% 在线数据时,在线成功率回升最明显,再往上加收益就开始递减,成本却高很多。
4.3 该不该混合偏好学习和蒸馏损失
多轮 Agent 场景里,我越来越倾向于把蒸馏损失和偏好学习混合起来用。理由很简单:蒸馏告诉学生“教师大概率会这样做”,偏好学习告诉学生“哪些做法更受环境或用户欢迎”。这两者在数据形式上并不冲突。
实操时,我会把每条轨迹按最终结果打个分:完成目标为正样本,没完成或副作用很大为负样本。正负样本组成对比对,用 Bradley-Terry 目标或 DPO 目标来优化。这个损失可以和蒸馏损失并行计算,共同作用于学生模型的策略网络。实验结果里,混合偏好学习之后,学生模型不仅任务完成率提高了,而且“胡说八道”的频率明显降低,因为它不再需要模仿那些教师会做但学生把控不住的失败动作。
4.4 避坑清单速查表
下面这张表我经常发给团队里的新同学,它基本能覆盖多轮 Agent 蒸馏最常见的坑和排查方向:
| 失败现象 | 最可能的原因 | 建议处理方式 |
|---|---|---|
| 离线指标上涨,在线指标下跌 | 分布漂移 / 暴露偏差 | 加入学生 rollout 数据做在线蒸馏 |
| 训练 loss 波动剧烈,难以收敛 | 教师输出不稳定 | 降低蒸馏权重 α,增大 batch size,过滤低置信教师样本 |
| 工具调用格式错误频繁 | 训练中格式损失占比不够 | 增加格式合法率损失,或推理时加格式约束解码 |
| 越往后面轮次越差 | 多轮复合误差与上下文遗忘 | 使用课程学习、外部记忆或长上下文微调 |
| 回复趋向单一、缺少探索 | 熵塌缩,蒸馏温度太低 | 提高温度 T,增加熵正则项 |
| 学生模型过度调用工具 | 教师行为被无理解耦 | 给工具调用加成本惩罚,提高环境 reward 权重 |
这张表不是金科玉律,但在我几十次实验中,命中率比我预期的要高。遇到类似症状时,可以直接按对应方向去检查。
5. 留给你的几条实战建议
讲到这里,我不打算再来一段“总结与展望”。我只想说几条自己在多轮 Agent 蒸馏上沉淀下来的实操体会。
第一条体会是,教师模型不是“真理机器”。在一对一问答领域,教师偶尔错一步影响不大。但在 Agent 多轮任务里,教师某一步看似合理的动作,可能是依赖它强大的全局纠错能力才显得合理。学生学了这个动作,却没有配套的纠错能力,就会东施效颦。以后做蒸馏前,先想想你要迁移的到底是“知识”还是“策略”。知识可以静态拟合,策略必须放到环境里去闭环验证。
第二条体会是,多轮 Agent 的目标函数不能只盯着逐 token 的似然。我最后悔的事情就是一开始用标准的知识蒸馏工具直接套在多轮任务上。正确做法是把回合级收益、工具调用有效性、用户状态变化全部编码成训练信号的一部分。没有这些,你的模型再像教师,也是纸老虎。
第三条体会是,小步快跑比一口吃成胖子更稳。课程学习不是多此一举,它是在用最自然的方式让学生模型逐渐适配自己的分布偏移。如果你发现模型在一进多轮环境就崩,先限制轮数,用两轮以内的 mini 任务把基础策略巩固好,再慢慢放开。这个过程虽然看起来慢,但通常能帮你省掉很多不必要的返工。
最后再分享一个我做 debug 时的小技巧:保存每一个 epoch 的模型 checkpoint,跑到在线 Eval 环境里跑同一个固定测试集。在线指标突然掉的那一个 epoch,往回看对应训练数据往往就是“教师低质量输出”大量涌现的地方。优先清理这些脏数据,比调任何超参数都管用。希望这些经验和工具能让你少走几步弯路,也希望你这边的多轮 Agent 蒸馏能顺利跑通。