训练 Agent 不用真环境了?EnvACE 让模型自己"脑内排练"环境响应
做 Agentic RL 的人最近应该都有同一种焦虑:想训一个会用工具的长程智能体,第一步不是写 reward,也不是调超参,而是——环境从哪来?
真实环境接入成本高、不可重置、没法并行;合成一套可执行环境(数据库、API、验证器全套)工程量大得吓人;退而求其次用 LLM 模拟器扮演环境,又引入幻觉和 grounding 问题。前段时间圈里一连冒出 EnvScaler、AWM、ScaleEnv 这一串"环境扩展"工作,思路都是把环境供给侧做强。这周看到的这篇 EnvACE(arXiv: 2608.06197)走了条更激进的路:干脆不要外部环境,让策略自己扮演环境。
说实话我第一反应是怀疑——自己给自己出题又自己批改,这不就是左脚踩右脚上天吗?但看完实验设计我承认,这篇的想法比标题看起来扎实。
核心摘要
EnvACE 提出 world rehearsal:训练时策略在同一个参数里轮流扮演两个角色——先产生工具调用(Act),再切换到"环境视角"预演这个动作会引发的响应(Rehearse),后续决策条件于自己生成的响应。两个角色用任务成功奖励端到端联合优化,环境动力学被直接内化进策略参数。在 BFCL-v4、τ²-Bench、VitaBench、FinMCP-Bench 四个基准上,8B 规模的 EnvACE 拿到 Overall 32.91%,超过所有环境扩展类 baseline;测试时还能用内化的世界模型做"私密排练",N=2 的 parallel rehearsal 再把 Overall 从 36.7% 推到 40.9%,全程零外部环境交互。我的定位:这不是底层理论突破,但可能是今年 Agentic RL 训练范式里最"省"的一个思路——把环境这个最贵的资产直接蒸馏进参数。
论文信息
- 标题:EnvACE: Internalizing Environment Dynamics via World Rehearsal for Agentic Reinforcement Learning
- 作者:Zishan Xu, Zhiyuan Yao, Yuxin Chen, Yifu Guo, Zhengxi Lu, Yuquan Lu, Jinyang Huang, Yan Xu, Yasheng Wang, Weinan Zhang, Xingshan Zeng, Weiwen Liu
- 发表:2026 年 8 月 6 日提交,arXiv: 2608.06197
- 代码:https://github.com/Within-yao/EnvACE
🎯 问题动机:环境成了 Agentic RL 的卡脖子资源
先把这个领域的供给端困境说清楚。训一个多轮工具调用的 Agent,RL 需要成千上万次 rollout,每次 rollout 都要一个能执行工具、返回真实观测、还能判断任务成败的环境。目前主流三条路:

图1:三种 rollout 范式的对比——真实环境 rollout(左)响应真实但贵且难扩展;外部模拟器 rollout(中)便宜但响应是"编"的;EnvACE 的 world rehearsal(右)让策略内部消化环境响应。
第一条,真实环境 rollout。响应是 ground truth,但接入成本高、状态不可重置、并行度上不去。第二条,外部模拟器。用一个独立 LLM 扮演环境,可扩展了,但模拟响应容易幻觉,和真实工具行为对不上。第三条就是今年很火的环境合成:EnvScaler 用程序化合成造了 191 个环境和约 7000 个场景,AWM(Agent World Model)更进一步,端到端合成 1000 个 SQL 后端、MCP 接口的可执行环境,每个环境平均 18.5 张数据库表、35 个工具、2000 行代码。
这些工作我都跟过,工程上确实漂亮。但你注意到没有——它们都在给"环境"做加法。环境越造越多,训练管线越来越重,验证器越来越复杂。EnvACE 反过来问了一个问题:如果策略自己就能预演环境响应,我们还需要外部环境吗?
这个问题不是凭空问的。人类专家在执行复杂操作前本来就会脑内推演——写 SQL 前先想一下这条语句会返回什么,调 API 前先预判参数格式对不对。如果这种"预演"能力能被 RL 训进参数里,环境就从外部依赖变成了内部能力。
当然,风险也明摆着:自己生成的响应如果和真实环境脱节,训出来的就是个活在自己幻想里的 Agent。这正是实验要回答的核心问题,后面细说。
🧠 方法核心:一个策略,两个角色
World Rehearsal 的交替机制
常规 Agentic RL 把任务建模为 POMDP:策略出动作 \(a_t\),环境按动力学 \(P\) 返回观测 \(o_t\),历史 \(h_{t+1} = h_t \oplus (a_t, o_t)\),优化目标是最大化轨迹奖励 \(\mathcal{J}(\theta)=\mathbb{E}_{\tau\sim(\pi_\theta,P)}[R(\tau)]\)。这里的环境 \(P\) 是外部的、固定的。
EnvACE 动了的地方就一个:把 \(o_t \sim P(\cdot \mid h_t, a_t)\) 换成策略自己生成。
每个 turn 分两步走。Acting 角色先出动作:
然后同一个策略切到 Rehearsal 角色,预演这个动作会引发的环境响应:
预演出来的 \(\hat{o}_t\) 直接追加进历史 \(h_{t+1} = h_t \oplus (a_t, \hat{o}_t)\),下一个动作就条件于这个自生成观测。整条轨迹从头到尾是策略自己展开的——这就是 world rehearsal。

图2:EnvACE 总览。上方是 world rehearsal 的 act-rehearse 交替循环;左下是 Role-Wise GRPO 优化——同一条轨迹的奖励按角色分组算基线,但两个角色的输出共同更新共享参数;右下是测试时的 parallel/sequential 两种私密排练模式,排练结果汇总成 rehearsal memory 后再做单次真实执行。
这个设计最妙的地方是参数共享。如果 acting 和 rehearsal 用两套独立参数,那就是个套娃版模拟器,没什么新意。共享参数意味着:rehearsal 角色学到的"环境会怎么响应"的知识,和 acting 角色学到的"该做什么动作"的知识,存在同一份 \(\theta\) 里。论文管这个叫 agent world model——世界模型不再是外挂的模块,而是策略参数本身。
Role-Wise GRPO:基线分开算,参数一起更新
训练用的是 GRPO 的变体。对每条指令采样 \(K\) 条 rollout,每条拿轨迹级奖励 \(R_i\)(可以是可验证的结果评估器,也可以是 checklist 式 LLM judge)。关键设计在优势计算上——按角色分组:
具体讲就是:Act 输出的优势跟别的 Act 输出比,Rehearse 输出的优势跟别的 Rehearse 输出比,但所有输出共同更新同一份参数。
为什么要分开算基线?想想看,一个 rollout 里 acting 输出可能只有十几条(每轮一个动作),rehearsal 输出也是十几条,两类输出的分布完全不同——动作是结构化工具调用,响应是自由文本。混在一起算基线,方差会互相污染。这个设计看起来小,但对 GRPO 这种组内相对比较的算法来说挺关键的。
测试时的 Private Rehearsal
训练完的模型自带世界模型,测试时就能玩点花样:真实执行前先脑内排练 \(N\) 次。
两种模式。Parallel:\(N\) 次尝试各自独立生成想象轨迹,互不可见,最后汇总。Sequential:每次新尝试能看到之前所有排练轨迹和自评反馈(评估加修改建议),边排练边修正。排练完把所有轨迹和反馈压缩成一段 rehearsal memory \(m_x\),acting 角色以此为条件,在真实环境里只做一次提交执行。
排练全程是私有的——不改外部环境状态,不产生真实副作用。这个性质对生产环境太重要了:你可以在脑子里试十次危险操作,现实中只执行那次想清楚的。
📊 实验:数据说话
实验设置
基座是 Qwen3-8B(主实验)和 Qwen3-1.7B(规模分析),训练数据来自 CM2 数据集,judge 用 Qwen3-30B-A3B。训练配置:470 步,学习率 1e-6,batch size 16,每个 prompt 采 4 条 rollout,KL 系数 1e-4,最大输入 12000 token、最大响应 8000 token,单轨迹最多 30 轮交互,verl 框架跑在 16 张 H20 上。非 TTS 实验报 Avg@4。
对比的 baseline 是今年环境扩展方向的代表作:Simulator-8B(LLM 模拟器路线)、TOUCAN-7B、EnvScaler-8B、AWM-8B/14B、ScaleEnv-8B。
主实验:四基准整体领先
表1:BFCL-v4、τ²-Bench、VitaBench 主结果(Overall 为三基准平均分的算术平均,单位 %)
| 方法 | BFCL Avg. | τ² Avg. | Vita Avg. | Overall |
|---|---|---|---|---|
| Qwen3-8B | 44.04 | 30.0 | 11.4 | 28.48 |
| Simulator-8B | 19.78 | 38.5 | 1.8 | 20.03 |
| TOUCAN-7B | 35.33 | 22.4 | 2.8 | 20.18 |
| EnvScaler-8B | 47.07 | 32.9 | 15.8 | 31.92 |
| AWM-8B | 44.29 | 31.2 | 10.2 | 28.56 |
| AWM-14B | 47.32 | 30.7 | 19.6 | 32.54 |
| ScaleEnv-8B | – | 38.5 | 15.0 | – |
| EnvACE-8B | 46.04 | 36.7 | 16.0 | 32.91 |
几个值得咀嚼的点:
EnvACE 的 Overall 32.91% 是完整结果里最高的,比 EnvScaler-8B 高 0.99 个点,比 14B 的 AWM 还高 0.37 个点——用 8B 打过 14B,说明收益确实来自方法而非规模。
但细看分项就没那么一边倒了。BFCL 上 EnvACE 的 46.04 其实略低于 EnvScaler 的 47.07 和 AWM-14B 的 47.32;VitaBench 上 16.0 也输给 AWM-14B 的 19.6。EnvACE 真正拉开差距的是 τ²-Bench——36.7 比 EnvScaler 高 3.8 个点、比 AWM-8B 高 5.5 个点。τ²-Bench 是有状态、带模拟用户的多轮对话任务,环境动态最复杂,这恰好是 world rehearsal 最该发挥的场景。这个结果分布和理论预期是对得上的,反而增加了可信度。
另外 Simulator-8B 那行很能说明问题:τ²-Bench 拿了并列最高的 38.5,BFCL 却崩到 19.78,VitaBench 只有 1.8。纯模拟器路线严重偏科——模拟器在哪训的就像哪,换个分布直接露馅。这也是"外部模拟"路线的结构性软肋。
表2:FinMCP-Bench 结果(%)
| 方法 | TR | TP | TF1 |
|---|---|---|---|
| Qwen3-8B | 43.18 | 39.47 | 41.24 |
| AWM-8B | 46.43 | 39.18 | 42.50 |
| Simulator-8B | 11.36 | 26.72 | 15.95 |
| EnvScaler-8B | 49.35 | 39.18 | 43.68 |
| EnvACE-8B | 41.23 | 54.04 | 46.78 |
FinMCP-Bench 上 EnvACE 的 TF1 拿到最好的 46.78%,靠的不是召回(TR 41.23 反而最低),而是 tool precision 冲到 54.04%——比第二名高了近 5 个点。我的解读:world rehearsal 让模型在调用前先预演后果,无效调用自然少了,precision 就上去了。这个推断和后面的 case study 是互相印证的。
消融:收益到底从哪来

图3:τ²-Bench 消融。8B 规模上,Qwen3 Base 30.0 → 标准 GRPO 31.2 → Per-role Policy 35.5 → EnvACE 36.7;1.7B 上 Per-role Policy 甚至不如标准 GRPO(14.0 vs 14.7),EnvACE 才扳回到 15.3。
这张图信息量比表格大。两个关键阶梯:
- 标准 GRPO 到 EnvACE:31.2 → 36.7,涨 5.5 个点。这是 world rehearsal 本身的贡献。
- Per-role Policy(两角色独立参数)到 EnvACE(共享参数):35.5 → 36.7,涨 1.2 个点。这是参数共享、环境动态内化的贡献。
有意思的是 1.7B 那条线:Per-role Policy 拿到 14.0,比标准 GRPO 的 14.7 还低。小模型分两摊参数两边都学不好,共享参数反而是小模型的救命稻草。这个细节我很喜欢——它没有藏在附录里,直接画在主图上。

图4:1.7B 到 8B 的 scaling。BFCL V4 从 31.81 涨到 46.04,涨 14.23 个点;τ²-Bench 从 15.3 涨到 36.7,涨 21.4 个点。
模型越大,world rehearsal 的收益越大。这其实符合直觉:扮演环境本身就是个重活,需要模型真的理解工具语义和状态转移,1.7B 的容量撑不起高质量的 rehearsal。反过来说,这也暗示了一个隐忧——如果 rehearsal 质量依赖模型容量,那 EnvACE 训出来的"世界模型"到底有多准?论文没直接测 rehearsal 响应和真实环境响应的一致率,这是我看完之后最想问的一个问题。

图5:RL 训练过程中 τ²-Bench 离线评估分,从 step 50 的 30.0% 一路上行到 step 470 的 36.7%,中间有波动但趋势稳定向上。
测试时扩展:私密排练值多少钱
表3:TTS 结果(N=2,Overall 为 τ²-Bench 与 BFCL Multi-Turn 平均分的算术平均,单位 %)
| 配置 | τ² Avg. | BFCL Multi-Turn Avg. | Overall |
|---|---|---|---|
| Non-TTS | 31.4 | 41.9 | 36.7 |
| TTS Par. + Base | 32.2 | 41.4 | 36.8 |
| TTS Par. + EnvACE | 38.0 | 43.9 | 40.9 |
| TTS Seq. + Base | 31.0 | 38.8 | 34.9 |
| TTS Seq. + EnvACE | 34.8 | 42.3 | 38.5 |
Parallel rehearsal + EnvACE 把 Overall 从 36.7 推到 40.9,涨 4.2 个点,而且零额外环境交互。
真正精彩的对照是 Base 那两行:用没训过 world rehearsal 的 base model 做排练,parallel 模式只涨 0.1 个点,sequential 模式反而掉到 34.9,比不排练还差。这个对照设计得很聪明——它直接排除了"收益只是来自多采样多思考"的平凡解释。排练有没有用,取决于排练者脑子里有没有真的世界模型。幻想式排练不如不排练。

图6:BFCL Multi-Turn 上排练次数 N 的扫描。所有配置都在 N=2 达到峰值,N=3 时全面回落——EnvACE parallel 从 43.88 掉到 39.00,但任何 N 下 EnvACE 排练都优于 base 排练。
N=3 的回落值得注意。作者的解释是排练轨迹塞进上下文后逼近甚至超出有效窗口(训练时最大输入 12000 token),反而干扰决策。这个瓶颈很真实,也说明 rehearsal memory 的压缩方式还有优化空间。
Case Study:预演到底改变了什么

图7:查订单案例。用户只给了不带 "#" 前缀的订单号 W4284542。EnvACE 在 thinking 里先 planned call、预演出响应"order will not be found because the leading # is missing",于是把调用参数修正为 "#W4284542" 再执行,一次成功拿 reward 1。EnvScaler-8B 和 Vanilla 都是直接调用、报错、再向用户澄清,多绕好几轮,最后还都做出了违反策略的取消订单操作,双双拿 0。
这个案例把 world rehearsal 的行为改变展示得很具体:预演不是玄学,它让模型在执行前就"看见"了参数格式错误,然后在 thinking 阶段完成自我修正。另一个航班改签案例(Figure 8)更进一步——EnvACE 预演发现计划的写操作 update_reservation_flights 信息不全且不被允许,主动换成只读查询;两个 baseline 则真的执行了无效写操作导致任务失败。
🤔 我的判断
这篇最值钱的地方:它把"环境"从训练的基础设施变成了模型的内部能力。环境合成路线(EnvScaler、AWM)越做越重——AWM 一个环境 2000 行代码、35 个工具,很壮观,但管线复杂度也是真的高。EnvACE 提供了一条轻得多的路:不需要造环境、不需要维护模拟器,训练完的世界模型还能在测试时继续榨出 4 个点的收益。Role-wise GRPO 和参数共享的消融把收益归因拆得比较干净,Base 排练对照也堵住了"只是 test-time compute 堆出来的"这个最明显的质疑。整体上实验设计是花了心思的。
我持保留的地方,主要有三个:
一,rehearsal 的保真度没有直接度量。整个故事建立在"策略预演出的环境响应足够真"之上,但论文只通过下游任务分间接验证,从没报告过 \(\hat{o}_t\) 和真实 \(o_t\) 的一致率。τ²-Bench 这种环境动态相对规整的基准上 work,换成响应模式更多样的开放环境会不会崩?Simulator-8B 那行的偏科惨状就是前车之鉴。
二,只在 8B 上验证,而 scaling 曲线明确显示收益随容量增长。那 32B、70B 上是继续涨还是饱和?这直接决定方法的天花板,论文受算力限制没答。
三,和 baseline 的比较口径可以更狠一点。EnvACE 在 BFCL 和 VitaBench 的单项上并没赢 EnvScaler 和 AWM-14B,Overall 领先主要靠 τ²-Bench 拉开。当然反过来说,它省掉了整个环境合成管线,这个账怎么算见仁见智——如果你团队本来就有成熟环境,EnvScaler 们可能更香;如果你在冷启动,EnvACE 的吸引力就大得多。
工程启发:如果你在搭 Agentic RL 训练管线,这个思路值得认真考虑——尤其是对真实环境写入有顾虑的场景(生产数据库、支付接口),"脑内排练 + 单次提交执行"的范式天然规避了副作用问题。即使不全套采用,"模型自己预判工具调用后果"这个能力也可以作为辅助信号加进现有 reward 或 filter 里。另外 N=3 性能回落的教训也通用:往上下文里塞自生成内容不是越多越好,压缩和选择机制很关键。
环境的尽头不一定是造更多环境。把世界装进参数里,这条路 EnvACE 至少走通了第一段。
参考链接
- 论文:https://arxiv.org/abs/2608.06197
- 代码:https://github.com/Within-yao/EnvACE
- 相关工作:EnvScaler(arXiv: 2601.05808)、Agent World Model(Snowflake)、τ²-Bench、BFCL-v4
觉得有启发的话,欢迎点赞、在看、转发。跟进最新AI前沿,关注我