ECHO:终端 Agent 免费学习世界模型

@DimitrisPapail
英语2个月前 · 2026年5月18日
474K
922
115
51
1.2K

TL;DR

微软研究人员推出了 ECHO,这是一种混合强化学习(RL)目标,旨在训练 CLI Agent 预测终端响应,从而实现更快的训练速度、更好的动态建模,并减少对专家数据的依赖。

与 @VaishShrivas 合著

我们让 CLI Agent 在强化学习期间预测终端响应,同时保持对动作的常规 GRPO 损失。改动很小:相同的展开和前向传播,只是不再遮蔽终端输出 token。效果巨大:所有评估指标都有提升,得到的模型也能明显学习到终端的行为模式。

CLI Agent 可以免费学习一个终端模型——并用它来更好地行动!

这就是 ECHO:一种混合目标,它在交互双方(Agent 写下的内容,以及终端回写的内容)上进行训练。

查看完整的论文和基于 SkyRL 的代码

如果你太忙没时间读完这篇文章,以下是我们的发现:

  • 标准的 Agent RL 丢弃了环境的响应。GRPO 只在动作 token 上训练,并遮蔽终端响应 token,尽管它们已经存在于上下文中、已经通过模型前向传播,并且是 Agent 动作影响环境的真实信号。
  • ECHO 通过同时在交互双方上进行训练来解决这个问题。它保留了对动作 token 的常规 GRPO 损失,并增加了一个简单的环境交叉熵损失(针对终端输出 token)。这只是在任何 GRPO 训练器之上加了几行代码。相同的展开和前向传播,只是对 logits 使用了不同的掩码。
  • ECHO 有效,而且免费!ECHO 在我们测试的所有基准上提升了 Qwen3-8B、OpenThinker-Agent-v1-SFT 和 Qwen3-14B 的效果。ECHO 还能以 2.3 倍的速度达到相同性能。在 TerminalBench-2.0 上,pass@1 几乎翻倍,8B(2.7 → 5.2)和 14B(5.2 → 10.8)均如此。
  • ECHO 能够学习终端动态!在保留的轨迹上,环境 token 的交叉熵随 ECHO 急剧下降,而纯 GRPO 几乎不变。直接证据表明 ECHO 教会模型终端实际上如何响应。那些更好预测终端输出的模型检查点,也能解决更多任务。
  • ECHO 可以替代专家教师。从没有专家演示的基础 Qwen3-8B 开始,ECHO 几乎达到了 GRPO 在 SFT 后加上专家演示的效果。
  • ECHO 让 Agent 无需验证器奖励就能自我改进!没有任何验证器奖励的情况下,仅靠 ECHO(不包含 GRPO)就能让 Agent 通过与环境交互并预测结果来进一步改进。

这始于一个简单的问题:如果每条命令都会产生终端响应,为什么强化学习只针对命令进行训练?

Vaish 完成了所有工作来搞清楚这个问题。我贡献了一个愚蠢的迷宫实验*、对标题的强烈意见,以及当她给我看第一个结果时说的“太牛了”。感谢 Ahmed Awadallah 给我们空间——以及 GPU——来追寻这样的想法,即使它们最初只是一个研究上的痒点。

值得注意:ECHO 的第一个集群运行是在 3 月 29 日启动的 😊

这项工作是在 AI Frontiers 完成的,这是微软研究院内部的一个精品研究实验室。

如何进行持续学习?

这个想法第一次出现时,是源于一个关于自我改进和持续学习的简单问题。Agent 如何仅仅通过在世界中行动来变得更好?

Vaish 和我自去年秋天以来一直在讨论 CLI Agent 的自我改进问题,即“通过与环境(也就是终端)交互来变得更好”意味着什么,尤其是在没有验证器的情况下。

无验证器强化学习是人们多年来一直在研究的问题,大多数尝试都面临同一个问题:如果没有奖励,监督从哪里来?

大约在同一时间,我在 Twitter 上发了一条愚蠢的帖子,结果与 @willccbb 通了个电话,再次讨论了持续学习。在这次谈话中,我记得我说了类似这样的话:

也许持续学习就是对着环境对你的动作给出的响应进行训练。

Dimitris Papailiopoulos - inline image

这应该能让模型学到些什么,对吧?

事实证明,是的!

世界就是一个损失函数!

当 Agent 在一个环境中行动时,环境对该动作的响应总是真实的。

来自物理世界的一个例子:如果你拨动电灯开关,灯要么亮,要么不亮。如果不亮,那也是一个合理的响应:它告诉你一些关于灯泡、电线或断路器等方面的信息。不管怎样,返回给你的是一小段信息,说明世界因为你的动作发生了什么变化。你并没有接触电力、开关和灯泡的完整机制,但你看到了结果:灯亮了吗?这足以让你开始构建一个关于“拨动开关能开灯”的心理模型。

终端的工作原理大致相同。

执行一条 bash 命令后的输出,是对该命令运行后计算机/容器状态变化的一个小总结。你会看到 stdout、stderr、退出码、文件列表等。你不会看到内核状态、进程树或任何非常详细的内容。

Dimitris Papailiopoulos - inline image

你看到的是后台变化的低维投影,而这正是 CLI Agent 在选择下一个动作以实现任务目标时所使用的信息。就像电灯开关一样,这个信号足以构建一个心理模型——或者如果你愿意,可以称之为世界模型——来理解系统是如何运行的。

最棒的是,终端输出(它再次反映了系统状态的变化)是一个监督信号,在每一轮都是免费为你计算好的。

酷!

问题在于,标准的 Agent 强化学习(例如 SkyRL 中的 GRPO)只在动作 token 上传播梯度,而忽略终端输出 token。尽管终端输出已经在上下文中,模型确实关注到了它,前向传播也为其计算了 logits,但训练器还是将其从损失中屏蔽掉。

真是浪费好 token 啊 😊

那么,如果我们不这样做呢?

模型已经被这些 token 所条件化,它已经对它们产生了概率分布。增加一个交叉熵损失基本上不需要任何成本。

如果我们这样做……模型就有理由去学习终端实际是如何行为的,从而在其内部构建一个它所作用的系统的隐式模型。为了预测 ls 会返回什么,模型必须跟踪它刚刚创建了哪些文件、哪些文件在什么地方等。

正如 Ilya 所说:

如果可以很好地预测下一个 token,就意味着你理解了产生该 token 背后的底层现实。

在我们的场景中,这意味着:一个善于预测终端输出的 Agent,在某种程度上确实是构建了一个终端的隐式模型。

那么,我们如何让 Agent 预测终端输出呢?

ECHO:无需付出代价即可学习世界模型

一个终端 Agent 的展开已经交织了两类 token 流:Agent 的动作 token 和环境的观测 token。标准的 GRPO 只对动作 token 施加损失。

这尤其浪费,因为终端奖励是稀疏、延迟且二元的。在我们的 Qwen3-8B 设置中,许多任务上只有不到 15% 的在线策略展开是成功的。但失败的轨迹并非无用的数据:它们仍然包含文件列表、错误、日志、堆栈跟踪、grep 输出以及 Agent 命令的其他后果。

我们的方法是学习这些后果的最令人尴尬的简单方法 😊

我们在环境观测 token 上添加了一个长度归一化的交叉熵损失,同时在动作 token 上保留标准的 GRPO 损失。ECHO 就是混合目标:

其中 Actions 是 Agent 动作位置,Observations 是终端输出位置。

一些技术细节:

  • ECHO 进行在线策略学习。它不是在一个冻结的终端转录集(来自基础模型或教师)上进行训练,而是从当前模型在强化学习期间产生的终端响应中学习。随着 Agent 变得更好,它会探索环境的新部分,并从新的“动作→观测”转换中获得新的监督。更好的策略引发更好的反馈;更好的反馈预测为策略提供更好的动作先验。一个循环!多有趣啊!
  • 在联合目标中,λ 很重要。如果 λ 非常小,环境损失对模型的影响不大。如果过大,策略可能会优化出可预测的输出,而不是任务进展。需要平衡!
  • 目标 token 很重要。我们训练的是实际的终端输出,而不是 harness 的警告。警告很容易记住;有用的信号是实际的终端响应——文件名、堆栈跟踪和错误消息。

那么,这需要什么成本呢?

敏锐的读者可能会问:

如果你在更多 token 位置上反向传播梯度,反向传播不是会更昂贵吗?

几乎不会。反向传播中昂贵的部分是注意力层和 MLP 层的矩阵乘法,而这些计算是在整个 token 序列上进行的,无论哪些输出位置对损失有贡献。每个响应位置的 logits 在 GRPO 中已经计算好了。动作掩码和观测掩码只是从这些 logits 中选取不同的子集用于不同的损失项。

暂停一下:我们增加了一个世界建模损失,而成本基本为零!没有额外的展开、教师模型,也没有额外的前向传播。

ECHO 能帮助训练更好的 CLI Agent 吗?

我们在多轮终端任务上进行了最干净的比较:相同的模型、相同的 GRPO 方案、相同的任务、相同的展开和轮次预算、相同的训练步数。如果 Agent 在 n 轮后通过了测试用例,奖励=1,否则为 0。

唯一的区别是终端输出 token 是否也计入损失。

粉色曲线是 ECHO,青色曲线是 GRPO。在不同的模型大小和评估切片上,答案是一样的:加入环境预测使得 Agent 明显更好。

Dimitris Papailiopoulos - inline image

ECHO 在所有三个留出验证集上持续提升性能——粉色曲线从一开始就与青色曲线分离,并且通常保持在上方。

ECHO 的学习速度也快得多:ECHO 在 Terminal-Bench Lite 上以 280 步更少的步数就达到了 GRPO 在 500 步时的性能!速度提升了 2.3 倍,并且还在继续攀升 😊

这些结果证实了我们对 ECHO 的直觉。GRPO 只使用稀疏的二元结果奖励进行训练。对于终端任务这样困难且小模型通过率低的领域,这意味着许多任务几乎没有或根本没有信号。

ECHO 通过将失败的动作转化为监督,使训练的效率大大提高。即使一个动作没有解决任务,终端响应仍然教会了模型该动作导致了什么!而预测失败动作的后果可以帮助 Agent 选择更好的动作。

如果你更愿意在评估指标上看数字,表格形式也是同样的故事:

Dimitris Papailiopoulos - inline image

看每个块的最后一行:ECHO。TerminalBench-2.0 的 pass@1 几乎翻倍,8B(2.7 → 5.2)和 14B(5.2 → 10.8)规模均是如此。重要的是,这并不是来自额外的数据、展开、教师模型或不同的验证器。展开中已经包含了终端响应,ECHO 只是从中学习。

“性能几乎翻倍,且不增加额外成本” 这句话在整个研究生涯中很少见 😊。

ECHO 在所有基准和模型大小上都大幅超越 GRPO 性能,样本效率更高,而且成本基本为零。你在策略改进的同时学习了一个世界模型,这反过来又帮助策略改进得更快。

不过,怀疑者可能会反驳:你真的学到了一个世界模型吗?

我们来看看!

ECHO 真的能学习终端动态吗?

这里我们需要稍微谨慎一点,因为世界模型研究群体可能有点激烈。

我们不会声称 ECHO 在最强意义上学习了一个“世界模型”。但我们会说:ECHO 训练出了一个隐藏状态吸收了终端行为某些方面的策略,并且该策略预测终端将做什么的能力有了可衡量的提升。

如果你反转 Ilya 的名言,你会得到一个更可证伪的版本。对于我们的场景,它会是这样的:

如果模型学习了终端动态,那么它必须善于预测终端输出。

因为没有其他方法可以持续地为正确的 token 赋予高概率。一个更好的预测器,在信息论意义上,是它所预测系统的更好压缩器。

所以问题变成了经验性的:ECHO 是否真的让模型成为更好的终端输出预测器?

是的,而且强很多。

为了使测试干净,我们使用更强的教师模型 Qwen 3 32B(未用于任何训练运行)为每个验证集生成轨迹。然后,我们评估了我们的初始策略、用 GRPO 训练的策略以及用 ECHO 训练的策略,并测量了每个模型对生成的终端输出 token 的“惊讶”程度。

每个面板上的模式都是一样的:相对于初始策略,GRPO 几乎没有改变环境 token 的交叉熵。ECHO 则急剧降低了它。

Dimitris Papailiopoulos - inline image

所以我们不会用大写的 W 来说“世界模型”。但我们想这样说:

ECHO 产生了在它们未生成的轨迹上,在压缩终端动态方面明显更好的策略。

这就是标题在操作层面的含义,也是完全可以辩护的版本。

令人惊讶的发现 1:ECHO 减少了对专家 SFT 的依赖

Agent 强化学习的一个常见配方是:先从更强的模型的行为克隆专家轨迹,然后运行强化学习。这在终端 Agent 中尤其常见,因为奖励稀疏且动作空间巨大。

在我们的设置中,专家 SFT 基线是 OpenThoughts-Agent-v1-SFT (OT-SFT):Qwen3-8B 在由更强的 GLM-4.6 教师生成的终端 Agent 演示上进行微调。

所以我们问:ECHO 能在不行为克隆教师的情况下,恢复多少专家 SFT 的好处?

ECHO 能让你跳过专家 SFT 吗?在我们的设置中,大部分情况下可以!

Dimitris Papailiopoulos - inline image

此图比较了三个运行:基础模型上的纯 GRPO、基础模型上的 ECHO、以及 SFT 模型上的 GRPO(SFT + GRPO)。相对于 GRPO 和 SFT+GRPO 之间的差距(例如从 SFT 开始带来的增益),ECHO 在 ITD 上恢复了 104% 的增益,在 Terminal Bench Lite (TBLite) 上恢复了 89%,在 TerminalBench-2.0 (TB2) 的 pass@1 上恢复了 50%。

结果表明,专家 SFT 价值的很大一部分可能来自于教会模型一个交互先验,而不仅仅是专家策略先验。专家演示既展示了如何像终端 Agent 一样行动——检查文件、运行测试、追踪回溯等——也展示了专家在特定状态下会做什么。ECHO 并不模仿这些专家选择。相反,它训练模型预测自身动作的终端后果,从而学会哪些命令暴露有用状态、哪些错误具有诊断价值、以及哪些终端输出 token 标志着进展。更好的策略可以通过交互而非模仿来涌现。

这也有助于解释基准上的差异。在 ITD 和 TBLite 上,ECHO 几乎与专家 SFT 持平,表明那里的 SFT 优势大部分来自于更好的终端交互模型。在 TB2 上,ECHO 在没有演示的情况下仍然恢复了 50% 的差距,这是一个可观的比例。剩余的差距与 TB2 更困难且分布上远离训练集是一致的。

我们不认为这是一个固定的上限:在类似 TB2 的任务上进行更广泛或更长时间的训练应该能进一步提升 Agent。

所以结论不是专家 SFT 过时了,而是专家 SFT 带来的好处中,很大一部分可能是一种更好的终端交互模型,而这部分可以直接从环境中学习。

底线:终端就是老师!

令人惊讶的发现 2:无奖励的自我改进火花

到目前为止,ECHO 都是带有辅助环境损失的 GRPO。验证器仍然告诉 Agent 是否解决了任务,GRPO 更新模型的动作 token。这是标准的强化学习设置,只是加了一小项。

但是,如果 ECHO 确实教会了策略一些关于终端行为的东西,那么也许我们根本不需要验证器信号。

我们问:如果关掉验证器会发生什么?没有奖励可供学习,只有这个:

也就是说,模型行动、观察,仅通过预测作为自身动作后果的终端输出来更新。

听起来这不应该改善任务性能。没有标签表明哪个动作是好的。如果策略变好了,那一定是因为学习预测终端间接重塑了策略的动作先验。

所以我们试了一下!

我们拿最强的 Qwen3-8B+ECHO 检查点,完全去掉 GRPO 项,仅使用环境交叉熵损失在留出任务上再训练 100 步。问题是:模型能否纯粹通过与环境交互并预测返回结果,在它从未见过的 OOD 任务上有所改进?

这个疯狂的想法有用吗?有点用!

Dimitris Papailiopoulos - inline image

在 val100(分布内)上:+3.8 pp。在 ITD 上:+5.2 pp。在 PyTerm(一个留出的 OOD 集,包含大量 Python 终端任务)上:在过滤到干净的工具调用轨迹后,+10.0 pp。

仅环境训练会在终端输出提供有用监督时改善策略。没有奖励信号,模型只训练来预测由自身动作导致的输出,所以增益取决于这些输出是否暴露了有用的动态。

在 val100(接近训练混合)上,增益真实但较小:+3.8 pp,然后饱和。策略在 ECHO 训练期间已经学会了大部分局部动态。

在 ITD 上,较弱的初始策略会产生嘈杂的轨迹——无效命令、解析错误、死循环。过滤到干净展开可以去除噪声,得到 +5.2 pp。

不过,仅靠干净轨迹还不够。同样的过滤并没有持续改善 TBLite,而 PyTerm 从类似的通过率开始却在相同配方下有所改善——这表明瓶颈不仅仅是策略强度。关键的差异在于观测的信息量:Python 任务提供密集的、与动作链接的反馈——代码→回溯→修复——而更广泛的终端任务则通过文件、配置和多步骤设置更间接地暴露状态。

我们认为无验证器自适应是可能的:一旦强化学习产生了一个不错的探索模型,Agent 有时可以仅靠后果继续改进——但前提是它的展开是干净的,并且终端反馈信息丰富。这正是令人惊讶的部分。不是 Agent 可以完美地自我改进,而是它竟然能自我改进,仅仅通过行动和预测返回结果。

总结

ECHO 的核心教训很简单:Agent 展开中包含的监督不仅仅是最终奖励,我们应该利用它。

Agent 运行的每条命令都会产生一个终端响应——stdout、错误、跟踪、文件、日志等——而标准强化学习只把这些 token 作为下一个动作的上下文。ECHO 将它们转变为训练目标。不需要教师模型、额外展开或单独的世界模型。我们只是不再丢弃已经在转录中的环境 token。

这个小小的改变带来了三个令人惊讶的结果:更强的强化学习性能、对专家 SFT 的依赖性大幅降低,以及在有些情况下仅靠环境交互就能实现无验证器的自我改进。我们不认为这意味着奖励或演示已经过时。专家轨迹仍然教授策略,验证器提供最清晰的任务级信号。但 ECHO 表明,在“模仿专家”和“等待稀疏奖励”之间,存在一个密集且未被充分利用的监督来源:Agent 自身动作的后果。

更广泛的想法是辅助预测的延续,这在强化学习中已有悠久历史,近期的工作也重拾了针对 LLM Agent 的世界建模目标,例如 Agent Learning via Early Experience 将动作-后果信号用作预强化学习阶段,VAGEN 为 VLM Agent 增加了世界建模奖励,RWML 在下一状态预测上预训练,而 CWM 则在观测-动作轨迹上中间训练代码模型。ECHO 是同一思想的在线、在强化学习循环中、针对 CLI 风格的版本。

这个想法能走多远?

下一步是让这个环境信号更强大——并测试它能泛化多远。ECHO 使用原始终端输出,因为它们已经在展开中,但最佳学习目标可能是更干净、更紧凑的表示:状态的摘要或任务相关视图。另外:我们应该在哪些观测上训练?何时过滤轨迹?如何权衡环境预测与策略优化?同样的想法能否扩展到终端之外:浏览器 Agent、多工具系统、长周期编码 Agent,或面向用户的助手,其中跟进、纠正和偏好是另一种形式的交互反馈?

我们的赌注是:在任何 Agent 行动且世界以 token 形式响应的场景中,这些响应 token——或它们的更好表示——都应该是学习信号的一部分。ECHO 是我们能想到的这个想法的最简单版本,我们猜测到 2026 年底,某种形式的环境 token 预测将成为 Agent 强化学习训练器中的标配。

查看完整的论文和基于 SkyRL 的代码

试试 ECHO,告诉我们你的 Agent 训练速度提高了多少。

脚注:在我的笔记本电脑上训练一个迷宫世界模型……差不多吧

还记得我说我“贡献了一个愚蠢的迷宫实验”吗?这就是那个愚蠢的迷宫实验。

设置是 ECHO 的一个超迷你版本:一个微型终端中的网格迷宫。Agent(一个循环中的 10M transformer)发出一个方向——上、下、左、右——然后终端响应 Agent 相对于其“邻居”的位置(基本上是一个 2D 网格中的寻路问题),以及到目的地的距离。所以展开看起来完全像 CLI Agent 的展开(在很小的意义上),只是简单得多 😊:动作→环境响应→动作→环境响应,等等。

我在一个从头训练 10M 参数 transformer 上测试了两种条件:1)仅训练动作 token;2)训练动作 token 和终端响应(邻居、距离等)。所有训练都是在全新的 6×6 / 7×7 / 8×8 迷宫上进行的。

Dimitris Papailiopoulos - inline image

这个迷宫小实验能发 Nature 论文吗?不能。但是:我认为我一直强调的一个观点是,它是可以泛化的。

几乎每个干净的想法都有一个微观世界:一个缩小的版本,你可以在笔记本电脑上花一个晚上运行,它会告诉你这个想法是否值得扩展。

迷宫实验并没有证明 ECHO 会成功。它给了我足够的信心给 Vaish 发了一条 Teams 消息,而不是忘记这个想法。结果 Vaish 一直在独立地围绕同一个想法盘旋,当她的第一个集群运行结果出来时,我激动不已,真的被惊到了。ECHO 迷宫实验暗示了方向是正确的,但它不可能预测到 TerminalBench 分数的翻倍、恢复大部分专家 SFT,或者无奖励的自我改进。那些是 Vaish 的结果。“差不多解决了一个 6×6 迷宫”和“在 TerminalBench 上翻倍”是非常不同的认知状态。

但这个附录的重点并非笔记本电脑取代了集群实验。关键在于,我的大多数想法都是错的,而笔记本电脑实验(借助 Claude Code 和 Codex)能告诉我哪些想法应该在浪费他人时间之前就放弃。偶尔,某个想法能幸存下来,当它幸存时,或许就有资格值得合作者投入时间和 GPU 资源了。

ECHO 就是其中之一。

存到 YouMind

使用 YouMind 深度阅读爆款文章

保存原文、追问细节、总结观点,并在一个 AI 工作空间里把爆款文章沉淀成可复用笔记。

了解 YouMind
写给创作者

把你的 Markdown 变成干净的 𝕏 文章

图片上传、表格、代码块,往 𝕏 上手动重排太痛苦。YouMind 把整篇 Markdown 一键转成干净、可直接发布的 𝕏 文章草稿。

试试 Markdown 转 𝕏

更多可拆解样本

近期爆款文章

探索更多爆款文章