让 AI 边玩游戏边编写世界规则:从 XLand 到 ARC-AGI-3 的实验记录

想象一下,你打开一个从没玩过的格子游戏。画面上有一扇门、几个物体和一块会变色的地板,游戏没告诉你它们有什么用。你走一步,看到某个物体变了颜色。接下来,你要决定是再试一次确认规律,还是利用这条线索去开门。你甚至还不知道开门是不是这一关的目标。

我做的实验,就是让语言模型自己完成这个过程。它边玩边把猜到的规则写成可以运行的程序,用程序预测动作结果,拿真实反馈修订,再决定怎么走。整个项目从小规模的符号规则学习开始,后来复现了 TWIN 的交互流程,做过程序压缩、在线规则合并和有共同对照的通关实验,最后把重心转向一个更具体的问题:代理能不能只探索当前目标所需的机制,并把验证过的操作经验带到下一关?

这条路线有几个独立的结果。XLand 上,程序缩小了约 11%,固定测试上的预测正确数略有增加。FT09 的一次配对里,加了去冗余决策指引的代理通关,使用相同运行框架的对照组完成四关。SC25 上,问题驱动版本也有一次完整通关。后来的目标树与复盘版本把前四关的动作数从 681 降到 475,同时花了更多模型请求和运行时间。

一、研究背景:让智能体从交互中理解世界

我用 Code as World 概括这条路线。研究上,它连接了程序归纳 和基于模型的智能体。前者问「能不能从少量输入、输出和反例,归纳出一段可运行的规则」,后者问「拿到这段规则之后,能不能在真正行动前试算后果,再选一条到达目标的路线」。

比如,代理可以记录「刚才向右推,箱子移动了一格」,也可以写出一条带条件的可执行规则「箱子右侧为空时,向右推会让它移动一格」。第二种记法允许代理在新的位置试算结果。碰到反例时,还可以检查是空位的定义有误、箱子有不同类型,还是当前画面漏掉了相关状态。规则预测、目标识别和行动选择可以分别检查。

我用了两个层次的环境。

  • XLand-MiniGrid 是一个可生成不同任务和规则的格子环境,适合固定采样预算、隔离测试轨迹,观察程序到底学到了哪些转移。我的一组实验使用自己配置的受控规则,另一组从官方 small-1m 中抽取八个任务。两组都让学习器看到完整物理状态,主要评估动态预测。XLand-MiniGrid 论文

  • ARC-AGI-3 是一个交互式推理基准。代理进入没有规则说明的游戏,要从画面和动作反馈里推断机制、发现目标,并尽量少走弯路。我的深入实验集中在公开游戏 FT09、LS20 和 SC25。这里除了预测,还要看代理是否真的过关、为探索花了多少步,以及付出了多少计算成本。ARC Prize 官方说明 · 技术论文

二、相关研究:可执行世界模型能否真正改善决策?

WorldCoder 展示了一条基本路线。代理通过与环境交互写出 Python 世界模型,再用模型解释观察、寻找可能拿到奖励的行动,并尝试通过修改程序迁移到新环境。它把规则学习和行动规划放在同一个循环里。WorldCoder 论文

到了 ARC-AGI-3,研究开始细分哪些环节真的能改善行动。Tycho 让代理判断何时建模、验证、修复、使用或绕过模型。它的实验中,更积极的自动修复提高了转移复现的准确率,行动表现却低于让代理按需委托建模的方案。

Schema 则把可执行规则保存在持久工作区里,提供历史检查、规划和逐步执行接口,并在 ARC-AGI-3 和其他未知环境基准上测试这套设计。

另一项消融研究把文本记录、可执行模型、简化和精确回放拆开比较,发现收益随基础模型和推理配置变化,完整验证也增加了资源消耗。

Tycho 论文 · Schema 论文 · 可执行模型、简化与验证的消融研究

三、研究起点:复现 TWIN 的世界模型学习框架

TWIN 的做法是让编码代理在游戏进行时写一个 Python「数字孪生」。其中,step 根据画面和动作预测下一画面,goal_reached 判断局面是否满足目标。

实际动作前,运行框架要求模型通过已观察转移的回放检查。遇到预测不一致,真实结果成为修订模型的反例。代理可以在模型里搜索路线,再把动作提交到真实游戏。

论文在自己的模型和评测设置下报告了 93.3 分、23/25 个游戏通关、179/183 关完成。

我固定了作者的公开代码版本,从空模型开始做单游戏复现和扩展。下面的结果使用各次实验自己的模型、预算和环境版本,均按单游戏或单组样本报告。

TWIN 论文 · 固定版本的上游代码

四、实验过程:从规则学习到目标驱动探索

4.1 XLand:学习游戏规则,并尝试压缩为更短的程序

我先做了一个不调用语言模型的符号实验。用真实 XLand 引擎提供观测,只给学习器九项状态与动作特征,比较查表记忆、决策树、等价子树共享和最小描述长度剪枝。

我设置了统一规则和带颜色例外两种配置,在五个种子、五档查询预算下比较主动采样与随机采样。模型除了要学常见规律,还要保住少见的例外。

由于共享结构本身也要编码,我让 Occam 方案比较原树与合并图的实际编码长度,再选择较短的一种。

在带例外的配置里,主动采样 512 次后,Occam 方案的全状态平均准确率为 99.49% ,真正发生状态变化的子集为 98.79% ,平均描述长度约 7,162 bits。

原决策树在同一条件下准确率相同、长度约 7,164 bits。

这轮的合并收益很小,也给了我一个约束:压缩必须与原树放在同一批数据上测,合并本身也有开销。

随后我把规则生成交给 DeepSeek。从官方任务中抽取八个规则集,每个任务用两个种子、两种采样策略,沿真实 reset 和 step 收集 24,576 条训练转移。

每轮用新转移修订程序,在有界解释器里执行候选。压缩候选必须保住现有程序已解释正确的观测,再在独立的冻结测试轨迹上评分。原始候选和压缩候选来自同一次模型调用,因此比较的是候选选择。

XLand Flash 方案 同一测试集上的正确预测 生成程序总字节
原样返回状态的基线 964 / 11,428 1,344
未压缩程序 11,294 / 11,428(98.83%) 36,793
Occam 程序 11,308 / 11,428(98.95%) 32,763

压缩方案少了 11.0% 的字节,在同一测试集上多命中 14 条。

我还用 Pro 做了一轮后续修订,复用训练轨迹,把失败案例与相似的正确案例配对送给模型,最终汇总正确数与 Flash 对应方案相同。由于模型和证据筛选同时改变,这轮属于探索性实验。

整体正确率也包含许多常规动作,所以我把真实状态改变、规则造成的可见额外效果和多步预测单独记录。

4.2 TWIN:验证程序压缩能否保留原有预测能力

我先复现了 TWIN 的动作提交、历史检查、模型修订和关卡记录流程。

FT09 的一次限时 DeepSeek 运行在 91 步 时完成 3/6 关。用 GPT-5.6 Sol 从零开的另一次 FT09 实验走 81 步 通关 6/6 。LS20 的 Sol 实验在时限内走了 196 步 ,完成 4/7 关。

这几次运行使用的模型和预算不同,分别记录。

复现时我发现,模型的预测成绩需要按调用时机拆开。

FT09 的限时 DeepSeek 运行里,动作前实际使用的模型有 77/88 次命中完整帧。最终模型恢复调用前缀后,回放旧历史达到 88/88 ,在已到过的局面换成当时没试的动作,完整帧命中 72/100。

FT09 的一部分误差来自底部状态栏,所以我另外统计去掉状态栏的结果。

这样可以看清哪些是后来修好的历史错误,哪些是在未试动作上仍然存在的错误。

接着,我分别冻结 FT09 的 Sol 通关模型和 LS20 的中途模型。压缩后的程序先通过历史回放,锁定版本后才生成未试动作分支。

两版程序使用相同的初始状态和动作,预测结果与真实后继画面逐一比对。表中的描述长度采用固定的语法树编码。

冻结模型 规范化程序描述长度 未试动作的完整画面命中
FT09 537,520 → 506,208 bits(−5.83%) 126 / 200 → 126 / 200
LS20 557,472 → 469,640 bits(−15.76%) 60 / 60 → 60 / 60

这两轮都在受测分支上保住了原预测。FT09 的 74 个未命中也全部保留。

这个实验测到了程序规模和有限行为保持,对更长轨迹和未到达的关卡仍有未知。

4.3 FT09:从压缩代码转向减少冗余决策

我试过在游戏过程中安排独立的合并提案。只有候选通过声明范围内的有限规则检查、历史和动态验证,且表示变短,才允许接回原局继续。

FT09 有一轮采用了三次候选,最后以 141 步完成 6/6。这轮的引擎胜利落盘了,协调器的终局关闭校验失败也单独保留。

在另一条已结束的 64 步轨迹中,四次合并周期用了约 689 秒 ,占总运行时间的 16%。

这些日志能说明合并流程的实际开销,缺少同条件运行来估计它能节省多少动作。

随后我把干预改小。

代理准备加一条规则前,先看已有规则能否解释新观察。有适用范围缺口就补条件,已有实现错误就改原规则。现有知识足以支持一条可执行路线时,就直接执行,遇到有影响的预测错误或路线断点再探索。

这次实验把指引直接放进原决策流程。

FT09 的最终配对共用 DeepSeek-flash、高推理档、同一动作预算和 25 个运行文件。

两组都使用同一个错误反馈桥,让无效动作或模型检查失败返回给代理纠正,同时保留真实动作计数。方法上的区别是实验组额外收到上述决策指引,两边都从空模型开局。

FT09 配对 TWIN 算法+共同运行修复 去冗余决策指引
终局 4/6,用完动作预算 6/6,通关
前四关动作 47 50
全程动作 183 150
求解用时 59 分 57 秒 45 分 33 秒
模型请求 609 507
统一按谷价估算 ¥6.54 ¥4.64

有意思的是,跑完前四关时,对照组还领先三步。真正的差异出现在两条轨迹的后段。

表里的全程时间、动作和成本对应不同终点,直接支持的结果是这一次实验组过了后两关。两边请求均有实际用量记录,费用是同一计价公式下的估算。

4.4 SC25:围绕通关目标探索机制,实现知识跨关复用

我把这条路线推进到更长的 SC25,取消动作次数上限,保留时间预算。

最早的一组并行实验里,两边都到了第五关,分别在 992 步 和 883 步时遇到服务异常。两边的最后局面不同,数字只表示中断前的真实进度。

此后我沿着实际暴露的问题改了几层机制。

4.4.1 问题驱动探索:让每次行动都有假设和证据

我加入问题、假设、试验和观察记录,让代理先说明自己要区分什么,再行动取证。

预测接口允许只表达有把握、对决策有用的状态字段。没有预测的字段记为未知。

一个问题驱动样本从 v7 开始,v8 恢复原局,在第六关中途加入 v9 知识复查,最终 1,403 步通关 6/6。

前五关属于原有流程,v9 只参与了第六关的后段。

通关时问题簿仍标为探索,因此这次也暴露了一个缺口:流程能走到胜利,但没有留下明确的「探索结束、开始执行」切换记录。

4.4.2 跨关知识复用:从游戏规则到操作经验

我把当前关的问题与跨关问题分开,也把知识分成「游戏规则」和「操作方法」。

前者记录某个操作在什么条件下会产生什么效果,后者记录什么时候值得利用这个效果。

知识条目带适用条件和观察依据。遇到新关先复查,旧问题有新反例时可以重开。

为了减少观察遗漏,我也让代理能读取动作返回的中间动画帧。

例如真实日志里,第 110 步返回了 14 帧,包含短暂变化。这证明中间画面被保留,画面里的机制是否被代理理解要另看它的预测和记录。

4.4.3 目标树规划:只探索阻断当前路线的未知机制

我把规划改成一棵目标树,从「到达哪里」往下拆成「什么挡住了这一步」「用哪个操作能解决」「这个操作又缺什么条件」。

只有阻断当前路线的未知才需要开题。

能拼出可执行路线时,就应切换到执行。

长期记忆合并有证据的正向操作效果,没产生效果的尝试保留在原始日志里。

每过一关,再复盘用过哪些操作、为什么过关、有什么性质值得带到下一关。

4.4.4 中断恢复:让续跑过程具备可验证的执行证据

我补了动作回执、源码版本、请求用量、费用和终局清理记录,也做了并行观察页。

对可恢复的同局,先重放已确认动作、逐一核对画面与转移,再接回自己的模型和知识。

以最后一次恢复为例,第 361 步 的恢复点核对了 354 组动作前状态和观察、344 次转移。真实续跑继续产生了新动作。

另一次模拟上游 503 的测试验证了退避后可以继续同一个游戏进程,生产段没有发生同类故障。

旧请求用量未知时单独留账,避免误算成本或把旧请求重复发送。

五、实验结果:更少的探索动作,是否意味着更高的效率?

目标树与逐关复盘的最后一条轨迹是独立新局,经历中断恢复后,在 816 步、完成 4/6 关时由我主动停止。

为了和前面的 SC25 通关样本对照,我截取两条轨迹都达到的同一边界,即刚完成第四关。

完成前四关时 问题驱动的历史通关样本 目标树与逐关复盘样本
第一至第四关各自动作 27 / 5 / 180 / 469 72 / 10 / 27 / 366
累计动作 681 475
累计模型请求 415 882--883
累计运行时间,扣除停跑间隔 约 50 分钟 约 78 分钟
整局结果 6/6,1,403 步 4/6,第 816 步人工停止

动作少了约 30%,主要来自第三、四关。

第四关单关少了 103 步 ,前两关反而多走了 50 步。

跑到第四关结束时,新样本用了约 2.1 倍 的模型请求,运行时间长约 57%。

两条轨迹各只有一个样本,经历了不同的恢复流程,最后一条也没有继续跑到整局终点。

现有记录足以比较这两次到达第四关的成本,无法把差异单独归因于目标树或复盘机制。

六、总结与展望:从可执行世界模型走向目标驱动的自主探索

做完这一轮,我会把三件事分开看。

第一,程序变短是否能够保留预测能力。

这方面有 XLand 和冻结 TWIN 模型的实测支持。

第二,决策指引能否改善通关表现。

FT09 有一组正面配对,SC25 也有一次问题驱动方案的完整通关。

第三,探索设计能否减少总体成本。

这仍然需要同时看动作、请求和时间。

在最新的 SC25 样本里,代理确实少走了路,同时花了更多计算。

这个差异也是我从早期比较规则代码长度,转向记录动作证据、关卡复盘和请求开销的原因。

实验的代码版本、方法说明、冻结预测、关卡检查点、请求计量和终局收据都按来源存档。

FT09 的结论可核对配对终局报告,SC25 的效率数字可核对两份第四关检查点,XLand 的程序规模和准确率可从同一批测试记录重算。

实验归档(私有仓库,需访问权限) · 数据索引 · 方法与复现说明

相关推荐
kaixin_啊啊1 小时前
【零基础学AI】第 27 章课后练习与答案
人工智能
慢慢来不要急1 小时前
Anthropic 自建源码控制,AI Agent 把 Git 跑到了极限 · 11-09
人工智能·开发工具
CyrusYiVPP1 小时前
实测 Ollama 本地部署:我用 Python 搓了个离线问答机器人,Qwen4 27B 一到换个模型名就能用
人工智能·python
美团技术团队1 小时前
美团 LongCat-2.5 开源:从看见,到抵达
人工智能
aifannihao1 小时前
AI 学习第 8 课:1200 列纯噪声 CV 出 0.47,泄漏在筛特征那步
人工智能·机器学习·scikit-learn·学习路线·数据泄漏
老金带你玩AI2 小时前
我宣布!Magpie就是版本答案!
人工智能
Rocky Ding*2 小时前
REPA-E技术深度解析:解冻 VAE 之后,扩散模型为什么需要选择梯度
论文阅读·人工智能·深度学习·机器学习·aigc·ai-native·repa-e
武雄(小星Ai)2 小时前
Ollama报llama-server binary not found排坑实录:服务活着引擎没了
人工智能·windows·大模型·ollama·排坑
bryant_meng2 小时前
【TNT】《Transformer in Transformer》
人工智能·深度学习·transformer·word embedding·tnt·sentence embed