感知还是规划?Crafter 中的 Policy 演化
Crafter 是一款开放世界生存游戏。Agent 必须在探索、采集资源、对抗敌人和推进合成 科技树的同时维持生存。与目标短而明确的环境不同,Crafter 要求许多决策在数百步的 尺度上持续协调。
对于负责演化 Policy 的编程 Agent,这构成了两个相互交织的挑战:
- 感知: 从 observation 中恢复附近地形、生物、背包与玩家状态。
- 长程控制: 把这些状态组织成涵盖生存、探索、战斗与发展的连贯策略。
在本次实验中,我们尝试拆分这两种困难。GPT-5.6 Sol、Terra 与 Luna 面对相同的 Crafter 任务,但它们演化出的 Policy 分别接收原始 RGB observation,或同一可见 状态的局部符号化表示。
这一变化对 Sol 和 Terra 的影响非常显著,对 Luna 的影响则小得多。移除大部分 视觉识别工作之后,三种编程 Agent 所演化 Policy 的不同瓶颈也随之显现。
作为 Policy 演化环境的 Crafter
Crafter 会为每个 Episode 程序化生成一个全新世界。玩家开局没有工具或资源,必须在 眼前的生存需求和长期发展之间取得平衡。
一个有能力的 Policy 需要协调多种行为:
- 维持食物、饮水和生命;
- 探索最初完全未知的世界;
- 收集逐级提升的资源;
- 制作并放置工具与设施;
- 躲避或攻击危险生物;
- 保留足够的局部信息,以便重新找到有价值的地点。
这些目标会相互竞争。探索带来发展机会,也让玩家暴露在更多危险之中。制作工具需要 资源,而资源可能远离安全区域。只关注眼前生存的 Policy 容易停滞;过度激进地推进 科技,又可能因为忽略基本需求而迅速崩溃。
因此,Crafter 检验的是编程 Agent 能否演化出一个协调一致的长程程序,而不只是 发现一条在局部有效的动作规则。
RGB 与局部符号化 Observation
两组条件使用相同的模拟器、程序化世界、Action 空间、reward metric、Episode pool 和评测配置。唯一发生变化的是 Policy 获得的 observation。
RGB
RGB Policy 接收 Crafter 渲染得到的 64 × 64 × 3 画面。
它必须自行推断:
- 颜色和纹理对应的地形;
- sprite 对应的生物和物体;
- HUD 中的背包与生命状态;
- 画面中的玩家位置和朝向;
- 光照变化下的有效状态,包括夜晚的昏暗画面。
局部符号化
Symbolic Policy 得到的是同一局部区域的结构化信息:
- 局部地形与实体 ID;
- 生命、食物、饮水、能量、资源和工具;
- 朝向、睡眠状态和日照强度。
这种表示消除了大部分物体识别、HUD 读取和夜间视觉歧义。
但它不会暴露拥有特权的全局状态。Policy 依然无法获得全局语义地图、绝对坐标、 Environment seed、生物隐藏状态,以及局部 observation 之外的其他信息。
它仍然必须探索世界、记忆有用地点、处理碰撞、安排资源顺序、把握交互时机、对抗 敌人,并协调生存与发展。
因此,这组配对实验简化的是状态识别,同时保留了大部分长程决策问题。
长程生存分
Crafter 的 canonical score 主要围绕成就设计。在 Policy 演化场景中,我们还希望区分 两类 Policy:一种偶尔能够到达高级成就,另一种则能稳定存活,并在生存过程中持续 发展。
因此,我们采用 长程生存分(Long-Horizon Survival Score,LHS Score) 作为主要 Benchmark metric。
在每一步中,生存部分包含两个信号:
- 角色保持存活所获得的 alive reward;
- 由生命、食物和饮水中的最弱一项决定的 vital-quality reward。
选择最弱状态是一项有意的设计:如果 Policy 即将因缺水死亡,那么充足的食物和生命 不应抵消这一危险。
LHS 同时保留有上限的次要发展激励:
- 首次解锁一项新成就;
- 实际恢复食物或饮水;
- 采集资源、战斗和种植等可重复生产行为。
重复行为受滚动窗口额度约束,避免简单的采集或维护循环主导总分。
在跨 Episode 聚合时,LHS 会进一步强调鲁棒性。最终分数综合:
- 平均健康生存 return;
- 对表现最弱的四分之一 Episodes额外加权;
- 有界的发展与维护 return。
从概念上看:
LHS = 平均生存 + 弱尾部鲁棒性 + 有界发展
而不是只奖励表现最好的轨迹。
这意味着,少数成就丰富但迅速死亡的 Episodes 无法弥补脆弱的生存策略;与此同时, Agent 仍然有动力越过被动生存,继续推进发展。
Canonical Crafter score 会作为科技树推进程度的独立诊断指标报告。
实验
我们评测 GPT-5.6 Sol、Terra 和 Luna。
对于每一种编程 Agent,我们分别运行一条 RGB observation 和一条局部符号化 observation 下的 Policy 演化轨迹。六个 Runs 使用相同的长程生存目标。
每个 Run 结束时选出的候选 Policy,都会在 64 个 held-out Episodes 上进行最终 评测。
除 LHS 之外,我们还报告:
- 平均和最长有效生存时间;
- 至少存活 300 步的 Episode 比例;
- canonical Crafter score;
- 成就覆盖数。
这些指标能够帮助我们区分平均鲁棒性、极长的单条轨迹和科技发展程度。
结果
简化感知对三种 Agent 的影响截然不同。
| Agent | LHS Score | 平均生存 | 最长生存 | 存活 ≥300 | Crafter C | 成就覆盖 |
|---|---|---|---|---|---|---|
| Sol | 5.70 → 11.53 | 195 → 316 | 401 → 1043 | 3.1% → 39.1% | 3.91 → 19.47 | 10 → 18/22 |
| Terra | 4.58 → 9.88 | 164 → 291 | 288 → 871 | 0.0% → 31.2% | 1.12 → 11.31 | 5 → 14/22 |
| Luna | 4.58 → 4.97 | 164 → 178 | 288 → 401 | 0.0% → 3.1% | 1.12 → 3.44 | 5 → 11/22 |
每个单元格均为 RGB → 局部符号化 observation。
对于 Sol,LHS 从 5.70 提升到 11.53,平均生存时间从 195 步提高到 316 步, held-out pool 中的最长轨迹则从 401 步增长到 1,043 步。
Terra 的变化同样突出:LHS 增长一倍以上,平均生存增加 127 步,最长轨迹达到 871 步。
Luna 的变化小得多。Symbolic observation 让成就覆盖数从 5 项显著增加到 11 项, 但平均生存只提高了 13 步,LHS 也仅提升约 8%。
这种差距在稳健的长程生存上尤其明显。采用 symbolic observation 后,Sol 有 39.1% 的 Episodes、Terra 有 31.2% 的 Episodes 至少存活 300 步,而 Luna 只有 3.1%。
因此,对 Sol 和 Terra 而言,简化感知不仅改变了最佳情况,也改变了更广泛的生存 分布。
Terra symbolic Run 在 Validation 中出现一次协议失败,在 held-out Assessment 中 出现一次 protocol error。按照 Benchmark 定义,失败的 held-out Episode 计零分; 在成功完成的 Episodes 中,其最短生存时间为 156 步。
同一个世界,六种 Policy
聚合结果衡量的是 Policy 在不同程序化世界中的鲁棒性。为了更直观地观察行为差异, 我们还让六个最终 Policy 在同一个展示世界中运行。
先前选定的固定世界恰好更有利于 Luna。我们改用一个确定性的、独立于正式评测的 128-Episode 展示池重新选择:候选 Episode 必须全部正常完成,Sol 必须优于 RGB 条件下共用的 baseline,三种 symbolic Policy 的有效生存时间必须满足 Sol > Terra > Luna,而且每一级差距至少为 50 步。在合格 Episode 中,我们选择最接近相应 held-out 平均生存时间 的一项,而非差距最大的极端样本。由于筛选使用了 Policy 结果,这些 replay 仍然只是 定性展示,不能作为评测证据。
在 symbolic 条件中,Policy 仍然只接收结构化的局部 observation。GIF 中的 RGB 画面是面向人类观察者的确定性 replay:我们在相同世界中重放该 Policy 记录下来的 Actions,这些 RGB 帧从未作为 Policy 输入。六张 GIF 使用相同时间轴;较早结束的 Policy 会停留在终局画面。
| Sol | Terra | Luna |
|---|---|---|
RGB · 244 步![]() | RGB · 162 步![]() | RGB · 162 步![]() |
Symbolic · 391 步![]() | Symbolic · 261 步![]() | Symbolic · 194 步![]() |
Symbolic 一行现在清楚呈现了聚合结果的方向:Sol 持续最久,Terra 居中,Luna 明显 更早结束。Terra RGB 和 Luna RGB 无法在同一个 Episode 上拉开差距,因为这两条 Run 都选择了字节完全相同的 packaged baseline;两张相同 replay 和 162 步结果是预期 现象。
三种 Agent,三种瓶颈
配对结果揭示了三种 Agent 各自不同的主要瓶颈。
Sol:RGB 下已能推进,symbolic 再带来一次跃升
Sol 在 RGB 下已经超过 packaged baseline,使用 symbolic 输入后又进一步提升:LHS 从 5.70 提高到 11.53,平均生存从 195 步提高到 316 步,成就覆盖从 10/22 扩大到 18/22。它能够同时改进感知与控制,但更可靠的状态识别仍会带来 显著收益。
Terra:感知是主要瓶颈
Terra 的 RGB Run 最终回退到原始 baseline;改用 symbolic 输入后,LHS 从 4.58 提高到 9.88,平均生存从 164 步提高到 291 步,成就覆盖从 5/22 扩大到 14/22。因此,视觉状态提取是这条 Run 中最主要的瓶颈。
Luna:更准确的识别没有解决协调问题
Luna 在 RGB 下也回退到 baseline。Symbolic 输入虽然让成就覆盖从 5/22 扩大到 11/22,但 LHS 仅从 4.58 提高到 4.97,平均生存也只从 164 步提高到 178 步。其主要限制已不只是识别,而是长程行为协调。
改变 observation 契约,会以根本不同的方式影响它们的 Policy 演化。
这组消融实验告诉了我们什么?
乍看之下,Crafter 似乎只有一个问题:演化出一个能在开放世界中生存并发展的 Policy。
配对实验表明,困难可能产生于不同阶段。
对于 Sol 和 Terra,局部视觉状态提取是挑战的重要组成部分。移除物体识别、HUD 读取和夜间视觉歧义后,其生存能力和科技推进都显著增强。
对于 Luna,感知只是问题的一部分。更清晰的状态信息带来了更广的发展,但演化 出的 Policy 仍然难以把这些能力转化为可靠的长程生存。
这正是我们希望 Crafter 这类环境能够揭示的差异。
最终的标量分数可以告诉我们哪个 Program 表现更好;而对 observation 接口进行受控 改变,还能进一步揭示 Policy 演化停止提升的位置。
因此,Crafter 评测的不只是编程 Agent 能否写出游戏 Policy。它还提供了一种方法, 帮助我们区分感知失败与长程规划、控制和程序协调失败。
这六个 Runs 是六条独立的 Policy 演化轨迹,而非重复统计实验;它们消耗的训练 Episodes 也不完全相同。因此,我们不会把结果解释为 Sol、Terra 与 Luna 的一般性 排名。
更窄、也更有信息量的结论是:
移除局部视觉识别,彻底改变了 Sol 和 Terra 所演化的 Policy,却只小幅改善了 Luna 的生存表现——这揭示了长程 Policy 演化背后不同的能力瓶颈。





