AgentGarten:智能体 4 轮学会搭掩体,对照强化学习要 2500 万局
智能体能学到多少,为什么先被它练在什么环境里锁死?
2019 年,OpenAI 让两支智能体队伍在一间虚拟房间里玩捉迷藏。躲藏方要把箱子垒成掩体堵住入口,追捕方要搬来斜坡翻过围墙。这看起来像个玩具,背后却是一笔惊人的账。躲藏方第一次学会垒掩体,大约用了 2500 万局自对弈;追捕方学会用斜坡翻墙,又在 2500 万局之上多花了约 7500 万局;等到有智能体能踩着箱子冲浪钻进掩体,累计局数已经逼近 3.8 亿。Hide-and-Seek
七年之后的一篇论文说,同样这间房间、同样这两个里程碑,它只用了 4 轮和 10 轮。从千万量级掉到个位数,第一反应会以为它把算法调快了一万倍,可它真正换掉的不是速度,而是练法。于是本文要回答的其实只有一个问题:这 4 轮到底是怎么做到的?这个问题会分两层来答,一层是这个世界怎么搭起来,在紧接着的两章展开,另一层是智能体靠什么一轮轮变强,放到倒数第二章交代。要读懂这两层答案,得先交代两件前置背景。一个是好环境究竟难在哪里,另一个是这条路此前走到了哪一步。
第一件背景,是好环境究竟难在哪里。一个合格的环境要同时满足两个要求。第一个叫忠实,指世界的状态、规则和动力学前后一致,动作的后果可复现、不自相矛盾。第二个叫真实,指智能体看到的画面贴近真实世界的图像分布,而不是简陋的几何块或像素点。麻烦在于这两个要求天然互相拉扯。规则的可复现性历来靠人手工写出来的物理模拟器保证,画面的真实感历来靠神经生成模型去逼近,两条路各走各的。也正因为智能体每试一个动作,环境都得把一个既可信又好看的后果算出来,一个合格的环境本身就是一笔昂贵的开销。迄今为止,没有任何方案能在多样世界上同时握住忠实与真实,这正是论文开篇摆出来的那个瓶颈。换句话说,智能体每试错一次,都要为这个既可信又好看的后果付一次账。要读懂那 4 轮省下的到底是什么,这是第一块必须记住的背景。AgentGarten
第二件背景,是这条路此前走到了哪一步。2018 年 Ha 和 Schmidhuber 的 World Models 已经让智能体在自己学出来的世界里训练。一个 VAE 把画面压成低维向量,一个 RNN 在潜空间里预测下一帧,控制器只在这个梦里学动作,学完再搬回真实环境。World Models 它第一次证明了生成式神经网络可以扮演环境,但它扮演出来的世界是潜空间里的抽象,任务相关的动力学勉强够用,视觉上的真实感完全无从谈起。换句话说,过去这些年,忠实那一半一直有人守着,掉队的始终是真实那一半。这篇论文叫 AgentGarten,由一个来自清华、北大与 MirroS 的团队提出,它的答案可以先用一句话说清:把这两件事拆给两个人,代码引擎管规则、神经渲染器管画面。一个负责世界怎么运转,一个负责世界长什么样。至于这两者靠什么对接、渲染器又怎么训出来,是后面几章的事。AgentGarten

图注:六条横向 reward 曲线,躲藏方在上、追捕方在下,被阴影切成 (a) 到 (f) 六个阶段,顶部六张缩略图依次对应追猎、垒掩体、用斜坡、移走斜坡、踩箱冲浪、锁箱六个阶段;实线是 3 个随机种子的均值,横轴是 PPO 自对弈的进度。这张图是 OpenAI 的对照基线,不是 AgentGarten 的结果。Hide-and-Seek
回到那间捉迷藏房间,两块背景摆齐之后,开篇那个唯一的问题就可以问得更准。真正值得追问的不是"能不能更快地搜索",而是:有没有办法,让世界不必重新发明规则,却又能长出像样的画面?4 轮对 2500 万局的反差,答案就藏在这个问句里。下一章从 AgentGarten 的架构讲起。
要既忠实又真实,能不能把「规则」和「画面」拆成两件事?
AgentGarten 的答案是把它拆成两个人干。
论文把一个 code world 写成一个三元组 $(p, \text{engine}, R_\theta)$:$p$ 是描述场景的程序,engine 负责执行它,$R_\theta$ 是那个共享的神经渲染器。数学上,引擎的状态转移是
$$(s_{t+1}, \pi_{t+1}) = f_p(s_t, \pi_t, a_t), \quad c_t = h_p(s_t, \pi_t)$$
而渲染器生成下一帧的方式是
$$x_t = R_\theta(x_{<t}, c_{\le t}, x_0, y), \quad t \ge 1$$
这里 $s_t$ 是场景状态,包括物体位姿、关节开合和任务变量;$\pi_t$ 是相机位姿;$a_t$ 是智能体的动作;$c_t$ 是从引擎导出的结构化条件;$x_0$ 是一张决定外观的参考图;$y$ 是一句文本描述。
真正关键的地方在于第一行右边那个函数不吃渲染出来的画面。引擎只根据上一刻的状态、相机和动作往下推,它从不把生成的像素当作输入。这个设计上的小选择带来两个后果,论文反复强调它们。渲染误差永远回灌不进世界状态,所以再糊的画面也不会让物理规律错乱;反过来,录下来的状态轨迹还能换一套外观或换一个相机重新渲染一遍,而底层发生的事件一点不变。AgentGarten
打个比方,这就像把拍电影的两拨人彻底分开。编剧和场记决定谁在哪、发生了什么,摄影和调色只决定这件事看起来什么样。剧情写在剧本里,跟摄影师无关;换一个摄影师重拍,人物的走位和事件顺序不会跟着变,变的只是画面质感。engine 就是那个剧本,神经渲染器就是那个摄影师。这里要小心别读反了:渲染器改不了剧情,它出的任何差错都只是画面问题。
那两者靠什么对接?靠结构化的条件。AgentGarten 选的是深度图和表面法线,两者都是三通道的图,正好能塞进预训练视频编码器而不用改结构。引擎可以从几何直接导出它们,因为这两张图只描述形状和朝向,不需要材质、颜色和纹理。对渲染器来说,这几乎等于一张丢掉了所有材质细节的几何线稿。

图注:横向流程图。左侧智能体方框提交动作进入引擎与渲染器的循环;中间 3D 场景以紫、青、橙三色表面法线条纹表示结构化条件;右侧渲染观察包含一张外观参考帧、一条近期历史带,以及下一帧预测。箭头在动作与引擎、条件与渲染器之间循环。AgentGarten
这条拆法并不孤单。两个月前提交的 Magpie 几乎做了同一件事:把规则执行留在游戏引擎里,把视觉合成挪到一台独立的渲染服务器,并用引擎渲出的白盒帧当作唯一持续的条件。Magpie 两篇论文在相近时间各自收敛到同一个架构选择,这说明"拆开"是当下的一条共识方向,而不是 AgentGarten 的孤立发明。作为对照,2024 年的 GameNGen 已经证明纯神经网络能实时跑复杂游戏,但它的条件是过去若干帧加动作,没有这样一个结构化接口,换个世界就无从谈起。GameNGen
拆开之后,压力全部转移到了同一个地方:渲染器。世界的规则都交给引擎了,画面全落到这一个模型头上。那它该怎么训,才能既听得懂几何条件,又能实时地一帧接一帧滚下去?
怎么把一个预训练视频模型,变成「可条件控制、又能实时」的渲染器?
让视频扩散模型当渲染器,不是 AgentGarten 首创。DiffusionRenderer 已经先做过一遍。它拿一个预训练视频扩散模型,喂给它一整套 G-buffer 通道,包括法线、深度、反照率、粗糙度和金属度,让它按这些几何与材质条件生成照片级的视频。DiffusionRenderer 这证明了"结构化条件加视频扩散等于渲染器"这条思路可行。
AgentGarten 借用了这个思路,但把接口收得很紧,只用深度和表面法线两个通道,每张都是三通道图。工程上的理由很实在:这两种图刚好塞进预训练编码器不用改通道数,而且引擎端可以从几何直接吐出来,不必预先准备材质和纹理。条件是以 token 的形式在序列维度上和 RGB token 拼在一起送进同一套 Transformer 层的,既不是通道拼接,也不是 ControlNet 那样另开一支旁路。这样做是为了不让渲染器背上"像素必须对齐"的归纳偏置。
第二个问题更硬。预训练的视频扩散模型大多是双向注意力的,生成任何一帧都要看到前后文,包括还没发生的未来。质量是高,但没法实时,因为智能体要的是"我现在按一下键,下一帧立刻出现"。这条路上的先行者已经踩出了答案。CausVid 把一个多步的双向教师蒸馏成一个 4 步的因果学生,掩码规则是同一块内保持双向、跨块之间只准看历史,于是模型可以一块接一块地往前滚。CausVid
这里要补一个概念,因为它决定了后面所有训练的坑。训练时模型看到的历史上下文来自真实数据,推理时它看到的历史只能来自它自己刚刚生成的、带误差的上下文。这条训练与推理之间的落差叫暴露偏差。Self Forcing 一开始偏差很小,但自回归一旦滚长,误差会累积,画面开始过饱和、发糊甚至跳变。

图注:上下两幅训练流程。上半 Student Initialization 用双向教师生成的一对 ODE 轨迹先预训练因果学生;下半 Asymmetric Distillation 左侧是注意力跨全帧双向的教师,右侧是块级因果的学生(同一块内双向、跨块因果),并标出 KV cache 写入与 DMD 损失回流。CausVid
AgentGarten 的渲染器训练分三步。第一步是几何条件适配,让预训练模型学会吃下深度或法线。为了让接口对方差较大的估计器也稳,训练时会随机保留某一种模态、偶尔把两种都丢掉,还会压低高频纹理、施加轻微的平滑形变、给条件加噪。真实视频的深度来自 ViPE 配 Depth Anything 3,法线来自 NormalCrafter;仿真场景则由引擎从几何直接导出。每个训练样本随机选一种模态。
第二步是并行 teacher forcing,让模型学会成块地自回归。每个目标块在 Transformer 里有两份拷贝,一份干净,当作历史;一份带噪,是待去噪的目标。论文设计的注意力掩码让带噪的拷贝能看见更早的干净块、能在自己内部双向看,但永远看不到它自己的干净答案。这样全部目标块就能并行训练,各自独立采样一个噪声时刻,而不必一个块一个块串行地等。AgentGarten
到这里,渲染器已经能被几何条件控制,也能实时地滚下去了。但训练里还藏着一个不易察觉的漏洞,它不在损失函数里,而在梯度回传的路径上。
渲染器「看得见过去」却「学不到过去」——Adversarial Forcing 补的是哪条梯子?
先说清楚这个漏洞。在 Self Forcing 那类训练里,模型生成完一个块,就把它写进一份冻结的 KV cache,后面再拿这份缓存当历史。问题在于"写"这个动作没有梯度。后续的损失能告诉模型"该怎么读这份缓存",却回不到"当初这份缓存该怎么写"。而写缓存和读缓存用的是同一套参数,读这一侧被更新了,写那一侧就跟着漂移,却没有任何梯度回来纠正它。论文把这条缺失的监督路径命名为历史上下文梯度缺口。SGF
这个漏洞有个很贴切的读法。把它想成一个学生:每次考试前他会先誊抄一份笔记,答题时参考这份笔记。批改只评价他在答题时参考得好不好,却从不评价他当初该往笔记里抄什么。久而久之,他答题的技巧在提升,笔记本身越抄越偏,而且没有任何反馈把这份偏差纠正回来。
补这条路径的原型来自 Self Gradient Forcing,思路是跑两遍。第一遍关掉梯度,老老实实按推理的方式自回归滚一遍,把每个块在最后一步的输入和干净输出都记下来;第二遍丢掉第一遍那份串行缓存,用同样的可见性把计算重新铺开、并行重做一遍,这一次历史键值的写入保留梯度,于是后面的损失就能一路回传到"当初是怎么写缓存"的计算上。SGF 自己报告的恢复误差是 1.41% 的相对 L2,论文把它解释为和 bf16 的累加舍入误差同量级。注意这个数字和 AgentGarten 后面要用的数字口径不同,不能直接比较。SGF
AgentGarten 的关键改动落在第二遍重放的实现方式上。SGF 用整条序列的 FlexAttention 来重放,即便掩码完全一致,内核算子和张量形状的差异在有限精度下仍会放大成可见的偏差。AgentGarten 改成一块一块地调用 SDPA,让重放时的键值顺序和调用形状与第一遍 rollout 完全一样,把差异压到零,做到逐位相同。在同一张 36 层骨干、480×832 分辨率、61 个 latent 帧的 BF16 设置下,对照的 FlexAttention 重放偏差是 3.99% 的相对 L2,换成 block-by-block SDPA 之后是 0。论文还报告这次改动让单次前向从 2.95 秒降到 2.79 秒,峰值显存从 50.83 GiB 微增到 50.92 GiB。AgentGarten

图注:两层 block 级注意力掩码示意图。上层 rollout 中每个 block 通过一次注意力调用读取来自冻结缓存的更早 block;下层 replay 沿用同样的可见性与调用形状,但历史键值在计算图内以可微方式重算。横轴刻度标出 block 0、1、2、3,阴影格表示因果可见范围。AgentGarten
第三件套是真实数据上的对抗监督。论文在一个冻结的骨干之上加了一个可训练的头,让它当判别器,用真实图像去逼生成画面靠近真实分布。判别器常用的 R1/R2 正则需要对输入梯度再求一次导,这在融合注意力内核上通常做不了,只能用随机扰动去近似。AgentGarten 的做法是利用骨干被冻结这个事实,把精确惩罚及其对头参数的梯度用一次普通反向就算出来,既避开了双重反向,也不需要任何随机方向近似。这篇论文把这三件套合起来称为 Adversarial Forcing。
训好之后还要跑得动。单张 H100、BF16、480×832 分辨率下,一个 16 帧的块总墙钟时间约 438.8 毫秒,换算下来约 35 FPS。其中条件编码 10.6 毫秒、Transformer 的四步去噪加缓存发布 414.4 毫秒、微型解码器加传输 8.8 毫秒。这个数字是一次单块的墙钟分解,不是跨块跨硬件的持续吞吐基准,读的时候要带上这个限定。AgentGarten
渲染器到这里就位了:跑得动、训得稳、听得懂几何。但智能体自己还没上场。世界搭好了,它靠什么一轮比一轮强?
环境织好了,智能体靠什么一轮轮变强、这条回路真能替掉数百万次试错吗?
AgentGarten 的智能体回路是这样的。每一轮开始时,智能体拿到一份任务文件,里面写明目标、可用动作和限制,唯独不给解法。然后一个或多个智能体在固定预算内并行开始玩,它们只能看到相机拍到的画面,没有坐标,没有地图,没有隐藏状态,甚至看不到对手,回合结束前也拿不到分数。玩完之后,每个智能体写一份 playbook,那是一组短小的 Markdown 技能文件,一课一文件,可以带代码,记下自己试过什么、看到什么、还有什么存疑、下一步想测什么。这些 playbook 会被归档。下一轮的智能体以全新对话启动,拿到任务文件,外加之前几轮的 playbook。值得注意的是,成功的尝试和失败的尝试一样会进入下一轮的修订。AgentGarten
在捉迷藏里,这套回路把里程碑压到了第 4 轮和第 10 轮。躲藏方在第 4 轮学会用挡板堵住入口,追捕方在第 10 轮学会把斜坡搬到内墙翻过去,而且一次跳跃没成功后,它会重新摆好斜坡再试一次。跟前面 OpenAI 的基线放在一起,就是 4 轮对 2500 万局、10 轮对约 1 亿局。

图注:复合图。上半是两种设定的对照示意,一边是自对弈强化学习用对象状态训练策略网络,另一边是预训练智能体只看神经渲染出的第一人称画面、用短 Python 程序行动并积累 playbook。下半是三段第一人称记录:躲藏方用挡板堵住入口、追捕方把斜坡搬到内墙、追捕方调整斜坡后重试。下半的画面来自神经渲染器,并非照片级写实。AgentGarten
但这个对比必须按论文自己划的口径来读。这两者根本不是同等条件下的采样效率之比。OpenAI 那一边是从零开始、按对象状态和奖励训练一个策略网络;AgentGarten 这一边是一个已经预训练过的智能体,只看渲染出来的画面,用短程序行动。它的收益来自把抽象知识落地到闭环执行,而不是来自探索效率本身变高了。AgentGarten 把这句话说破,比报出一个漂亮倍率更重要,因为"4 轮对 2500 万局"很容易被误读成"强化学习被取代了",而论文并没有这么说。
这条回路本身也不是全新技术。AlphaEvolve 早就把同样的四件套装进了工业流程:采样器从数据库里取候选,交给 LLM 做变异,再由评估器打分,好的结果写回数据库,如此循环。AlphaEvolve AgentGarten 借用了这套骨架,但换掉两个零件:评估器不再是一个 Python 函数,而是世界本身,因为动作好不好只有在环境里跑一遍才知道;被改写的东西也不再是源代码,而是 playbook 文本。
为了说明这套回路不止能玩捉迷藏,论文把它搬到另外四个世界,每个也跑 4 轮。
| 世界 | 指标 | R1 | R2 | R3 | R4 |
|---|---|---|---|---|---|
| 陪玩狗 | engagement 分数,越高越好 | 13 | 14 | 19 | 19 |
| 单车道桥 | 两车都到达所需秒数,越低越好 | 71 | 68 | 45 | 41 |
| 牧羊 | 分数,满分 100 | 60 | 90.1 | 87.6 | 88.3 |
| 采石场装载机 | 分数,满分 100 | 30 | 0 | 30 | 90.9 |
采石场那一列从 30 掉到 0 再爬回 90.9,看起来不太好看,但它恰好暴露了这条回路的真实脾气:一轮写下的经验未必都是净收益,playbook 里也会混进误导性的结论,要得到后面几轮才被修正或绕开。这不是粉饰,而是"经验既可继承也可回退"这件事本身的样子。
所以 AgentGarten 真正打通的闭环,不是"更快的强化学习",而是"把每一轮的经验写成下一轮能继承的笔记"。而它之所以敢让经验在轮与轮之间传递,前提恰恰是世界可以被精确重置、精确重放,于是同一条经验在被交给下一个智能体之前,有机会先被验证一次。
这条路走通了什么,又还欠着什么?
把时间线拉直,AgentGarten 站的位置就清楚了。2018 年 World Models 把环境塞进潜空间的 RNN;2024 年 GameNGen 证明纯神经网络能实时跑复杂游戏,单张加速器上 20 FPS,但它的条件是过去帧加动作,既没有结构化接口,也没法轻松造出新游戏。AgentGarten 从 GameNGen 停下的地方往前走了一步,把世界的规则和世界的画面分成两个人管,于是同一个世界可以换皮、可以复制、可以按需写新的代码世界。
另一条路线的对照更能说明它放弃了什么。SIMA 2 不拆引擎,它直接让一个预训练的智能体从像素里学,动作接口就是键盘和鼠标,再配一个模型现场出题、另一个模型按 0 到 100 打分,用打过分、自己生成的轨迹去训练自己。SIMA 2 这条路线里智能体对世界内部状态一无所知,但正因如此,它在从没见过的世界里还能零样本迁移。AgentGarten 选择拆开接口,拿到了渲染器端的结构化信息和更稳的训练,代价是智能体不再能直接靠预训练的世界知识一路滑过去。两条路各有各的账单,没有免费的。
论文自己列出的局限也直白。第一,几何条件是有损的。深度和法线能描述形状和朝向,却分不清一个正在转动的轮子和一个静止的轮子;材质、颜色和物体的身份不由几何决定,长时间遮挡之后,只存在于视觉历史里的属性会丢掉。第二,世界还是一个个手写的。让写代码的智能体自己写世界、自己修订世界,被明确留作 future work,而作者认为更难的问题在后面:一个新世界值不值得花智能体的时间去练,能不能只看它看得见的东西就把它解出来,一个敷衍的策略会不会必然失败,这些检查都还没有自动化。第三,playbook 的跨世界扩展还没演示。世界一多,哪些经验该留、该合并、该丢掉,论文承认需要,但没有给出办法。
AgentGarten 把"既忠实又真实"这一对长期矛盾在工程上拆通了,也让环境能跟着智能体一起在数量和难度上长。可它仍然站在一个前提上:几何就是世界。要让智能体自己写出新世界、并且自己判断这个世界值不值得练,中间还隔着一整段路。
想深入可以读原文:AgentGarten: Code Worlds for Evolving Agents — arXiv:2610.12374
参考文献
- AgentGarten: Code Worlds for Evolving Agents — https://arxiv.org/abs/2610.12374
- Diffusion Models Are Real-Time Game Engines (GameNGen) — https://arxiv.org/abs/2408.14837
- DiffusionRenderer: Neural Inverse and Forward Rendering with Video Diffusion Models — https://arxiv.org/abs/2501.18590
- Self Gradient Forcing: Native Long Video Extrapolation — https://arxiv.org/abs/2607.20368
- AlphaEvolve: A coding agent for scientific and algorithmic discovery — https://arxiv.org/abs/2506.13131
- Emergent Tool Use From Multi-Agent Autocurricula (OpenAI Hide-and-Seek) — https://arxiv.org/abs/1909.07528
- Recurrent World Models Facilitate Policy Evolution (World Models) — https://arxiv.org/abs/1803.10122
- Magpie: Real-Time World Renderer for Interactive Games — https://arxiv.org/abs/2608.27168
- CausVid (autoregressive video diffusion distillation) — https://arxiv.org/abs/2412.07772 ;Self Forcing — https://arxiv.org/abs/2506.08009
- SIMA 2: A Generalist Embodied Agent for Virtual Worlds — https://arxiv.org/abs/2512.04797