想象一下,你打开一个从没玩过的格子游戏。画面上有一扇门、几个物体和一块会变色的地板,游戏没告诉你它们有什么用。你走一步,看到某个物体变了颜色。接下来,你要决定是再试一次确认规律,还是利用这条线索去开门。你甚至还不知道开门是不是这一关的目标。
我做的实验,就是让语言模型自己完成这个过程。它边玩边把猜到的规则写成可以运行的程序,用程序预测动作结果,拿真实反馈修订,再决定怎么走。整个项目从小规模的符号规则学习开始,后来复现了 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 关完成。
我固定了作者的公开代码版本,从空模型开始做单游戏复现和扩展。下面的结果使用各次实验自己的模型、预算和环境版本,均按单游戏或单组样本报告。
四、实验过程:从规则学习到目标驱动探索
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 的程序规模和准确率可从同一批测试记录重算。