把试错经验烧进模型权重:体验一次 EPD,告别昂贵的环境交互

你有没有这种感觉:智能体在一个任务上跑了几轮、试了几次错之后,表现肉眼可见地涨了——但把对话历史从 context 里抽掉,模型立刻"翻脸不认人",性能直接打回零样本?

这个现象在 2024 年之后做 agent 的人应该都撞到过。In-context learning(ICL)确实高效,给几段示范、几轮反馈,模型就学会。但 ICL 的代价是:它只在 context 里才有用,context 一旦清空,学的就清零了。

另一边,强化学习倒是能把"经验"烧进权重里——但代价是疯狂地吃环境样本。一个 SWE 任务让 PPO 跑出来,env sample 能烧掉几千个;GRPO 在文本游戏里也好不到哪去。

Monash + ByteDance Seed 的 Chenhui Gou 等人这次干的事,简单说就是:把 ICL 烧进权重里,而且不再消耗任何额外的环境样本。他们管这个叫 Experience Distillation(EPD)

核心摘要

EPD 的核心思路是:让"看过经验"的教师模型在已经发生过的历史点上重新决策一次,然后把这一次决策蒸馏进学生权重。整个过程不需要世界模型不需要再跑一遍环境只采样一次动作(one-step branch rollout)。

效果有多离谱呢?

  • 749 个 SWE 任务:zero-shot 5.3% → 直接 SFT 8.0%(几乎没涨)→ EPD 51.4 个百分点,ICL 上限 76.4%。EPD 留住了 ICL 64.8 个百分点的增益,SFT 只留了 3.8%。
  • 6 个文本冒险游戏(TaleSuite):zero-shot 18.5 → SFT 17.8(甚至倒退了)→ EPD 43.8,ICL 上限 45.6。EPD 留住了 ICL 93.4 个百分点的增益。
  • 样本效率:ICL + EPD 在 SWE 上拿到 51.4% pass@1,PPO 跑完整训练也才 17.7%,EPD 用了 9.6× 更少的环境样本;在 TaleSuite 上 43.8 vs GRPO 29.9,EPD 用了 57.2× 更少的环境样本

更狠的是,EPD 在分布外任务(494 个没见过的 SWE 任务)上也能涨:pass@1 从 4.62% 涨到 8.84%,pass@5 从 20.39% 涨到 26.13%。反复做 collect-and-distill 循环,6 个 TaleSuite 任务的平均分能从 cycle 0 的 7.1 涨到 cycle 5 的 47.0——而且每一轮都换掉经验 context,从头开始收集。

一句话评价:这是真正把"试错经验"内化为模型能力的方法。它不发明新算法,它重新设计了一个更便宜的监督信号。我觉得这种工作比堆参数更有意思。


论文信息

  • 标题:Sample-Efficient Learning from Agent Experience
  • 作者:Chenhui Gou, Haoqin Tu, Yunhao Fang, Jianfei Cai, Hamid Rezatofighi
  • 机构:Monash University(1, 4, 5 作者)、ByteDance Seed(2, 3 作者)
  • 链接:https://arxiv.org/abs/2607.21051
  • 代码/数据:未公开

为什么需要 EPD?

智能体学习的现实约束特别硬:环境交互贵。论文开篇就举了两个例子——

  • 测一个电池材料要实验室合成 + 测量,一次交互可能耗掉几天;
  • 评估一个法律分析要专业律师 review,慢到离谱。

在 LLM agent 流行的今天,任务时长越来越长(看看 swe-bench、tau-bench 这类基准),rollout 的成本也水涨船高。RL 框架虽然标准,但样本效率是出了名的差,需要成千上万次交互才能训出好策略。

ICL 是另一条路——把 task-specific 的 evidence 塞进 context,模型不动权重也能适配。一个 SWE 任务跑 60~600 个交互轮、80k+ token 的 context,ICL 的 pass@1 能从 5.3% 涨到 76.4%,提升幅度大得离谱

但 ICL 的天花板也很明显:context 抽走,性能归零。

那自然的想法是:用 context distillation 把 ICL 的提升内化进权重。教师模型带着 experience context 决策,学生模型不带着 context 学着做一样的决策。这条路 2024 年开始有人探索(OPC、OPD、SkillsD 等),但有一个绕不过去的坎——

要拿到教师模型的"决策分布",你得在环境里再跑一遍教师模型。这就又吃环境样本了。

如果再跑教师模型本身就要几千次环境交互,那这所谓的"蒸馏"和直接 RL 训练有啥区别?

这就是 EPD 要解决的核心问题:怎么蒸馏 experience,却不消耗额外的环境样本


EPD 怎么做的?

论文的方法论非常清晰,分三步走。

Step 1:建模成 trajectory-level 上下文蒸馏

\(M\) 是一个任务(一个 POMDP),\(\theta_0\) 是基座模型。教师模型带着 experience \(\tau^{\mathrm{exp}}\) 在 context 里的决策分布记为 \(p_M^{\theta_0}(\tau' \mid \tau^{\mathrm{exp}})\),学生模型不带着 experience 的分布是 \(p_M^\theta(\tau')\)。理想的 context distillation 目标就是最小化两者的 KL:

\[\mathcal{L}_{\mathrm{CD}}(\theta; M, \tau^{\mathrm{exp}}) = D_{\mathrm{KL}}\left(p_M^{\theta_0}(\tau' \mid \tau^{\mathrm{exp}}) \,\|\, p_M^\theta(\tau')\right)\]

展开后可以证明,只有 policy factor 不同(环境的初始 observation 和 response distribution 是共享的),所以这个 objective 等价于在每个历史点上做 local policy matching。

但问题是——要采样 \(\tau' \sim p_M^{\theta_0}(\cdot \mid \tau^{\mathrm{exp}})\),你得让教师在环境 \(M\) 里再跑一次。

Step 2:one-step branch rollout——砍掉环境交互

经典 model-based RL 的思路是用学到的 world model \(\widehat{M}\) 替代真环境。但 world model 的误差会随 rollout 长度累积,长 trajectory 直接崩掉。

Branched rollout 是个折中:从真实 history 出发只 rollout 几步。EPD 走得更极端——只 rollout 一步

\[\mathcal{L}_{\mathrm{EPD}}(\theta; \tau^{\mathrm{exp}}) = -\sum_{t=0}^{T-1} \mathbb{E}_{a_t' \sim \pi_{\theta_0}(\cdot \mid h_t^{\mathrm{exp}}, \tau^{\mathrm{exp}})}\left[\log \pi_\theta(a_t' \mid h_t^{\mathrm{exp}})\right]\]

直觉是这样的:

  • \(h_t^{\mathrm{exp}} = (o_0, a_0, \ldots, o_t)\) 是已经发生过的历史点(真实数据,不需要再采样);
  • 教师模型在 \(h_t^{\mathrm{exp}}\) 处,带着 experience context,采样一次新的决策 \(a_t'\)
  • 学生模型在同样的 \(h_t^{\mathrm{exp}}\) 处,不带着 experience context,去拟合教师的决策 \(a_t'\)

这一步是纯 teacher-side 的生成——教师只生成一个动作,不生成未来 observation。世界模型被彻底干掉了,未来的 observation 直接从真实 \(\tau^{\mathrm{exp}}\) 里复制

这就是 EPD 名字里 "Experience" 的来源:监督信号来自真实经验中已经发生过的历史点,而不是采样未来的轨迹。

Step 3:Branch packing——把 4096 个样本压成 128 个序列

如果每个 branch point 单独做一个训练样本,那 749 个任务 × 几百个 step = 几千个样本。每个样本前面都带一段长长的历史 prefix(80k+ token),重复计算直接爆炸。

论文的解法是把同一条 trajectory 上连续的 branch 点打包成一条训练序列

\[c_T = (o_0, a_0', a_0, o_1, \ldots, a_{T-1}', a_{T-1}, o_T)\]

其中 \(a_t'\) 是教师重新决策的,\(a_t\) 是原 trajectory 里的真实动作(用作 context)。整个 packed sequence 用 NTP loss 训练,只有 \(a_t'\) 参与 loss,\(a_t\)\(o_t\) 当 context

数学上这是个近似(教师之前的决策会影响之后分支点的 context),但实验证明这个近似几乎不掉点(平均 G_ICL 从 84.2% 涨到 90.1%),同时把训练步数从 768 砍到 64,总时间砍掉超过 10×

三个让 EPD 真正 work 的工程细节

光有上述三步还不够。论文还做了几个细节优化:

  • Experience Preprocessing(\(g(\tau^{\mathrm{exp}})\):原始经验又长又吵,无关的探索轮次、啰嗦的 environment response 混在中间。直接喂给教师容易撑爆 context window。EPD 用 \(g\) 把原始经验改写、抽象、压缩,让任务相关信息密度更高、长度能塞进 context。
  • Enhanced Teacher Reasoning(提示变量记为 \(I\)):用一个固定的 prompt 让教师多思考几步再决策。Detective 任务上,开了 enhanced reasoning 之后 G_ICL 从 34.9% 飙到 72.5%,翻了 2 倍多
  • 学习率 vs 训练 epoch:附录里的 ablation 显示,小学习率 + 多 epoch 比大学习率 + 少 epoch 好。\(10^{-6}\) 跑 16 个 epoch 的 G_ICL 比 \(10^{-5}\) 跑 4 个 epoch 高出一大截。训练 loss 和评估性能不是单调关系。

实验结果:数据说话

主实验:EPD 显著优于 SFT,逼近 ICL

下表是论文最重要的主结果表。在两个截然不同的领域(长程 SWE 任务、长程文本冒险游戏)上对比 ICL / zero-shot / SFT / EPD 四种方法:

方法 SWE 749 任务(pass@1) SWE G_ICL TaleSuite 6 任务(平均分) TaleSuite G_ICL
ICL(参考上限) 76.4% 100.0% 45.6 100.0%
Zero-shot 5.3% 0.0% 18.5 0.0%
SFT 8.0% 3.8% 17.8 −2.6%
EPD 51.4 个百分点 64.8 个百分点 43.8 93.4 个百分点

SWE 上 16× 的提升(5.3 → 51.4),TaleSuite 上 2.4× 的提升(18.5 → 43.8),而且 SFT 在 TaleSuite 上甚至负增长(−2.6%),这说明直接把 ICL 轨迹当 SFT 数据是有害的——因为教师在 ICL 状态下的决策分布和无 context 时差异巨大,SFT 只能学到表面模式。

样本效率:比 PPO/GRPO 少一个数量级

这是最震撼的对比。论文用 PPO(curated SWE)和 GRPO(TaleSuite)做 RL baseline,把完整训练 budget 算进去对比:

图1:环境样本效率对比

图 1:左图是 749 SWE 任务,ICL + EPD 用 9.6× 更少样本拿到 51.4% vs PPO 的 17.7%;右图是 TaleSuite 6 任务,ICL + EPD 用 57.2× 更少样本拿到 43.8 vs GRPO 的 29.9。x 轴是 \(\log(1+x)\) 变换。

注意几个关键点:

  • ICL + EPD 的样本成本 = ICL 收集经验的成本(EPD 本身不消耗环境样本)。
  • RL baseline 把"完整训练 run 的最佳表现 vs 完整预算"算成对 RL 最有利的对比方式
  • 即使这样,EPD 还是赢了一个数量级。

这个对比给我最大的冲击不是绝对数值,而是思路上的差异:PPO/GRPO 是在用大量样本慢慢学 policy,EPD 是先快速试错 ICL,然后一次性内化。一个 1 天能搞定的 ICL 收集 + 几小时 EPD 蒸馏,抵得过几天的 PPO 训练。

Model-free > Model-based:越短越好

论文还做了一个消融:既然是 branched rollout,那 \(k\) 步分支和 \(k=1\) 步分支到底哪个好?答案是\(k=1\) 最好

任务 Zero-shot ICL Model-free 1-step Model-based Branch (2 步) Model-based Full (100 步)
Acorncourt 17.2 38.5 34.9 / 83.1% 53.6 / 170.9%
Balances 15.9 39.6 34.9 / 80.2% 21.6 / 24.1%
Detective 31.3 90.8 82.9 / 86.7% 71.8 / 68.1% 42.7 / 19.2%
Enter 40.2 68.5 59.7 / 68.9% 38.5 / −6.0%
Inhumane 5.9 36.5 36.5 / 100.0% 14.9 / 29.4%
平均 22.1 54.8 49.8/83.8 个百分点 40.1/57.3 个百分点

平均 G_ICL:1-step 83.8% > branch 57.3% > full 19.2%。这印证了一个朴素但重要的观察:让 LLM 模拟环境,不如直接用真实数据。World model 看着美好,rollout 长度一长就崩。

Branch packing:10× 加速,效果持平

Branch packing 消融表直接给出"工程 ROI"——

指标 单独 branch 样本 Branch-packed 序列
生成的训练实例 4096 128
训练步数 768 64
总时间(归一化) >10.0 1.0
平均归一化分 43.1 43.8
平均 G_ICL 84.2 个百分点 90.1 个百分点

从 4096 个样本压成 128 个 packed sequence,总时间砍掉超过 10×,平均分几乎一样。这是我最喜欢的工程优化之一。

OOD 泛化:能迁移到没见过的任务

把 749 个任务上学到的 EPD 模型放到 494 个 OOD 任务上(其中 278 个跨仓库 OOD,216 个仓库内 OOD):

任务子集 方法 pass@1 pass@5
全 OOD (494) Zero-shot 4.62% 20.39%
EPD 8.84 26.13
跨仓库 OOD (278) Zero-shot 4.72% 21.40%
EPD 8.87 27.22
仓库内 OOD (216) Zero-shot 4.49% 19.08%
EPD 8.80 24.73

涨幅几乎翻倍,而且对完全没见过的仓库也有效。这说明 EPD 学到的不只是"这 749 个任务怎么解",而是某种通用的 agent 能力——比如怎么用工具、怎么读 issue、怎么从测试反馈修 bug。

持续学习:cycle 之间能累积

最后一组关键实验是持续 EPD——每个 cycle 都重新收集经验(context 清空),然后蒸馏。看看分数能不能跨 cycle 累积:

图 2:持续 EPD 学习曲线

图 2:左图是按 distillation cycle 看的,右图是按累计环境样本看的。Cycle 0(初始)平均分只有 7.1,cycle 5 已经涨到 47.0。6 个 TaleSuite 任务的均值,每 cycle 收集 4 次 trial,每个 task 累计 20 个环境样本。

这个图特别有说服力。每一轮都换经验——也就是说,没有"作弊"地把上一次的 context 留到下一轮。分数从 7.1 涨到 47.0,说明经验通过权重累积下来了。这是 EPD 区别于单纯 ICL 的关键能力:ICL 学完就忘,EPD 学完能记住。

Forward KL vs Reverse KL:OPD 为什么不行

论文还做了一个特别有启发的对比。EPD 默认用教师采样 + forward KL(在真实历史点采教师决策,学生去拟合)。还有一种更"对称"的做法:学生采样 + reverse KL(学生自己 rollout,教师在学生轨迹上给 per-token supervision),这正是 on-policy distillation(OPD)的思路。

任务 Zero-shot ICL Forward KL(EPD 默认) Reverse KL(OPD)
Balances 0.0% 100.0% 96.7 9.1%
Detective 0.0% 100.0% 98.4 0.4%

差距大到离谱。EPD 几乎追平 ICL,OPD 直接挂掉。论文的解释我觉得特别到位——

学生在没看到 experience context 的情况下,几乎不可能自己 sample 出"教师在 ICL 状态下才会做的高质量决策"。那 reverse KL 监督的轨迹里,根本没有这些高质量决策,自然就 transfer 不过去。

这是一个用实验数据支持的好直觉。它告诉我们:蒸馏上下文知识,让教师在有 context 的状态下先产生高质量样本,比让学生自己去探索、再让教师打分,重要得多

Scaling:教师生成数据越多越好,但有上限

最后一组实验是教师生成数据的规模化。同一个 experience trial,让教师生成 1 ~ 16 个不同的 packed sequence:

图 3:教师数据规模化

图 3:x 轴上半部分是每个 experience trial 生成的 packed sequence 数(1 ~ 16),下半部分是教师生成 token / 61.7M 经验 token 的比值(0.17× ~ 2.79×)。G_ICL 从 31.8% 单调涨到 64.8%。

这条曲线说明两件事:

  1. EPD 还有 scaling 空间——多生成一些教师数据,效果就继续涨;
  2. 目前的瓶颈是教师生成成本——生成 2.79× 的 token 才有 2× 的 G_ICL 增长。论文明确承认 "current teacher-generation cost remains a limitation"。

我的判断

亮点

  1. 思路上的根本性转换:把 agent 学习的核心约束从"环境样本"换成了"教师生成数据"。前者贵到无法 scale,后者贵但可以并行、可以缓存、可以复用。这条路一旦走通,agent 学习就不再被环境束缚
  2. 极简的实现:one-step branch rollout + branch packing,没有世界模型、没有未来采样、没有 reward model。能把 RL 干的事情用监督学习做出来,工程上很优雅。
  3. 跨领域验证:SWE 和文本游戏两个完全不同的领域都 work,说明这个方法不是某个 benchmark 调参调出来的,而是真的抓住了 agent 学习的一个普遍规律
  4. OOD 泛化和持续学习这两个结果特别有价值。它说明 EPD 学到的是"如何从经验中学习"这种元能力,而不只是某个具体任务的解法。

需要谨慎的地方

  1. 教师生成 token 仍然是成本。当前 EPD 需要生成 2.79× 经验 token 才能达到 64.8% G_ICL。如果想逼近 ICL 上限(100% G_ICL),可能要 5×、10× 的额外 token。这些 token 不会污染训练数据(不来自环境),但仍是推理算力。论文也坦承 "the current teacher-generation cost remains a limitation"。
  2. ICL 收集经验本身仍然要环境样本。EPD 没有"零样本"做到 SWE 51.4%——它需要先做 60~600 轮的 ICL 试错来产生经验。这个经验是 SWE 任务上的"完整成功轨迹 + 各种失败尝试",成本并不为零。论文把 ICL 的样本成本算进 ICL+EPD 的预算(9.6× 比 PPO 少),但如果你的任务连 ICL 都做不了,EPD 也用不了。
  3. G_ICL 还有 35% 左右的提升空间没补上。在 SWE 上 EPD 离 ICL 上限还有 11.8 个百分点的差距(51.4 vs 76.4)。这部分差距具体来自哪里——是教师本身就不完美,是分支点采样不够多,还是 NTP loss 损失了信息——论文没完全拆开。
  4. 教师 = 学生同 checkpoint这个假设值得注意。论文里 EPD 的教师和学生是同一个 base model,教师只是"有 experience context"那个版本。如果教师和学生能力差距大,蒸馏效果可能完全不同。
  5. 没有和更强的 RL baseline 对比。PPO 和 GRPO 是经典选择,但 2024~2025 年新出的 RL 方法(DPO 系列、Process Reward Model、各种 process supervision)都没有比较。如果这些方法在 SWE 上已经能逼近 ICL 上限,那 EPD 的相对优势会缩小。

一个延伸的思考

EPD 其实揭示了一个比单纯训练方法更深的洞察:在 agent 学习的语境下,知识来源比学习方法更重要。RL 的问题是它的知识来源是 reward——一个非常稀疏、低带宽的信号。EPD 的知识来源是教师模型的决策分布——一个高带宽、密集的信号。

类似的思路其实在 In-Context RL 领域有先例(Algorithm Distillation、Prompt-DT、Decision-Pretrained Transformer 等),但 LLM agent 时代把它重新包装成了"context distillation"的形式。我觉得接下来值得看的方向是:

  • 教师本身的提升:让教师在生成决策前多思考几步(Enhanced Teacher Reasoning 已经是个苗头);
  • 经验压缩:现在的 \(g(\tau^{\mathrm{exp}})\) 是个黑盒,论文没说怎么实现。可以借鉴 Long-Context LLM 的压缩技术(memsum、LLMLingua 等);
  • 多教师蒸馏:让不同教师在不同经验片段上做蒸馏,相当于 ensemble 一下 EPD 模型。

写在最后

读完整篇论文最让我感慨的一点是:它没有发明任何新东西。ICL 是 2020 年的,Context Distillation 也是 2021 年的,Branched Rollout 是 2019 年 model-based RL 的老思路。但作者把这三件事拼在一起,给 agent 学习打开了一个新维度——不再被环境样本数卡死。

有时候好的研究就是这样:不是造新轮子,是把旧轮子装在新的车上

如果你也在做 LLM agent,手头有一批任务能跑 ICL、但环境样本很贵,那 EPD 几乎是最值得尝试的方案。它的实现门槛不高(核心代码就是 one-step branch sampling + NTP loss),工程 ROI 却高得离谱——9.6× 的样本效率提升不是开玩笑的。

论文:https://arxiv.org/abs/2607.21051 arXiv ID: 2607.21051


觉得有启发的话,欢迎点赞、在看、转发。跟进最新AI前沿,关注我。