Code World Models for General Game Playing¶
会议: ICLR 2026
OpenReview: https://openreview.net/forum?id=1UoB7IWiku
代码: 无(实验基于 OpenSpiel)
领域: 代码智能 / Agent / LLM 推理
关键词: 代码世界模型, 通用博弈, MCTS, 不完美信息博弈, 程序合成
一句话总结¶
不再把 LLM 当成直接出招的"棋手",而是让它把游戏规则和少量对局轨迹翻译成一份可执行的 Python 世界模型代码(含状态转移、合法动作、终局判定,外加价值函数与隐状态推理函数),再把这份代码交给 MCTS / ISMCTS 这类经典规划器去深搜;在 10 个游戏(含 4 个自造的全新游戏)上,9 个游戏打平或战胜 Gemini 2.5 Pro。
研究背景与动机¶
领域现状:用 LLM 玩国际象棋、围棋、扑克、桥牌这类经典博弈,主流做法是"LLM 即策略"——把到目前为止的观测/动作轨迹塞进 prompt,让模型每一步直接吐出一个走子。它本质上是在用模型的模式匹配能力当"直觉型棋手"。
现有痛点:这种做法有三个硬伤。一是频繁走非法手——模型靠脆弱的隐式模式匹配理解规则,经常给出不合法的动作甚至直接超时弃权;二是策略浅薄——强博弈需要多步前瞻(System 2 式的深思),而通才 LLM 即便开了"thinking"也缺乏深层战术远见;三是泛化差——一旦遇到不在训练集里的全新游戏(OOD),直接当策略用几乎玩不动。
核心矛盾:把"理解规则"和"深度搜索"两件事都压在 LLM 一次前向里,两边都做不好。LLM 擅长语义理解但不擅长精确的多步推演;经典规划器(MCTS)擅长把算力转成棋力,但需要一个可执行、可验证的环境模型才能跑——而这个模型恰恰是新游戏里缺失的。
本文目标:让 LLM 只干它最擅长的"数据→代码翻译"元任务,把深搜交给成熟规划器,从而同时拿到可验证性、策略深度和泛化性;并且要覆盖此前 CWM 工作普遍回避的部分可观测 + 随机博弈(如扑克)。
切入角度:作者观察到,游戏规则本身就是一份可被代码精确刻画的"世界模型"。与其让 LLM 反复在每一步做脆弱的策略决策,不如让它一次性把规则+轨迹归纳成一份程序——程序可以被单元测试验证、可以被规划器无限次调用,从而把"产生好策略"的负担转移成"产生好模型"的负担。
核心 idea:用 LLM 把"自然语言规则 + 随机对局轨迹"归纳合成为一份可执行的 Code World Model(CWM),再用 (IS)MCTS 在这份代码上做深度规划——把算力而非模式匹配变成棋力。
方法详解¶
整体框架¶
面对一个新游戏,agent 的流程是:先用随机策略自我对弈几局,收集包含观测、奖励、合法动作、(开局设定下的)隐状态的轨迹;然后把游戏规则文本 + 这些轨迹喂给 LLM,要求它按 OpenSpiel API 格式合成一份 CWM,并用从轨迹自动生成的单元测试迭代精化直到转移准确率达到 1.0 或预算耗尽;对于不完美信息博弈(IIG),额外合成隐状态推理函数让 ISMCTS 能采样信念状态,并可选地合成价值函数给叶节点估值提速;最后在竞技场里用基于这份合成代码的 (IS)MCTS 策略与对手对弈。关键转变是:LLM 只负责离线产出模型,对弈时由规划器把搜索算力转成棋力,因此算力越多越接近最优。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
A["随机自我对弈<br/>收集离线轨迹 + 规则文本"] --> B["CWM 合成<br/>单元测试驱动迭代精化"]
B -->|不完美信息博弈| C["推理函数合成<br/>LLM 当正则化自编码器"]
B --> D["价值函数合成<br/>锦标赛择优"]
C --> D
D --> E["(IS)MCTS 规划对弈<br/>算力换棋力"]
关键设计¶
1. CWM 合成与单元测试驱动的迭代精化:把规则归纳成可验证的可执行程序
直接让 LLM 当策略的根本毛病是输出不可验证、易出非法手。本文把这件事换成"合成一份近似目标游戏的可执行副本":CWM 是一组确定性函数——状态转移(含终局判定)、给定状态的合法动作、给定状态的观测(IIG 下观测与状态不同)、chance 节点的概率分布、奖励函数;随机性只通过 chance 玩家进入游戏。单次生成往往不对,于是引入迭代精化:从每条离线轨迹的每个转移自动生成单元测试,逐项核对 CWM 预测的状态/观测/奖励/动作合法性是否与原轨迹一致、有无执行报错;单元测试是二值的,因此通过率就是转移准确率(transition accuracy),精化到 1.0 或预算耗尽为止,失败测试的 stack trace 会回喂给 LLM 帮助修代码。精化有两种:Conversation(串行 chat 模式)把新失败测试追加进对话历史让 LLM 改;Tree search(树搜索)沿用 REx 思路维护一棵 CWM 精化树,用 Thompson 采样挑选下一个要改的 CWM(偏好高准确率或被改次数少的),每次调用是带着选中 CWM + 精化指令 + 一条失败测试 stack trace 的全新 prompt。因为树搜索能回溯、在难局里更稳健,全文后续都用它。这样做的好处是规划器可以算法化地枚举合法动作,从根上避免非法手——前提是合成模型正确。
2. IIG 推理函数:把 LLM 当成一个被规则正则化的自编码器
不完美信息博弈里 ISMCTS 需要在每一步估计隐状态 \(s_t\),即从信念状态 \(p_M(s_t \mid o^i_{1:t}, a^i_{1:t})\) 采样,但精确推理最坏情况指数代价。本文让 LLM 再合成一段近似采样后验的代码,并主推hidden history inference(隐历史推理):由于 CWM 全是确定性函数,隐状态后验可由动作历史后验得到——LLM 合成一个函数采样 \(\tilde h_t \sim p_M(h_t \mid o^i_{1:t}, a^i_{1:t})\)(含 chance 玩家动作),再用 CWM 执行 \(\tilde h_t\) 重建隐状态序列与观测;每个时刻给玩家 \(i\) 行动处生成单元测试,核对采样出的观测/动作是否匹配真实证据(\(\tilde o^i_t = o^i_t\)、\(\tilde a^i_t = a^i_t\)),从而能对推理函数也做精化。一旦通过全部测试(推理准确率 1.0),采出的 \(\tilde h_t\) 落在后验支撑集内、\(\tilde s_t\) 必然是 CWM 的合法隐状态——这在游戏中后验支撑极稀疏时已非常有信息量。还有一个更直接但更弱的 hidden state inference 变体(直接采 \(\tilde s_t\),只验 \(\tilde o_t = o_t\)),它更简单但无法保证落在后验支撑或构成合法 CWM 状态,因为忽略了相邻状态间的依赖。
这套机制的精彩之处在 closed deck(闭牌) 场景:当 agent 只能看到自己的观测、连事后都拿不到隐状态时(如线上玩全新游戏),本文丢掉所有需要隐信息才能验证的单元测试(相邻隐状态间的转移),只保留"观测→隐状态→还原回观测"可验证的测试,再加几局随机对弈确保无执行错。这恰好构成一个自编码器:推理函数是编码器(\(o^i_{1:t}, a^i_{1:t} \to \tilde h_t\)),CWM 是解码器(\(\tilde h_t \to\) 观测);不靠瓶颈或正则项,而是游戏规则 + OpenSpiel API(写进 prompt 上下文与单元测试里)充当正则化器,防止学到平凡的隐空间。通过全部测试的有效后验历史还能给出 CWM 似然的下界 \(p_M(o^i_{1:t}) \le p_M(\tilde h_t)\)(因为测试全过时 \(p_M(o^i_{1:T} \mid \tilde h_t) = 1\))。这是此前 CWM 工作(普遍假设全可观或事后可观)没碰过的设定。
3. 价值函数合成:用锦标赛择优的启发式估值替代随机 rollout
MCTS/ISMCTS 给新叶节点估值时通常靠随机 rollout,慢且噪声大。本文让 LLM 像合成 CWM 一样合成一个确定性价值函数 \(V(s)\) 来估隐状态叶节点的价值,往往更快也可能更准。但与 CWM/推理函数不同,价值函数没有 ground truth 可比对,因此不做单元测试精化;改为一次生成多个候选函数,通过锦标赛(tournament)对弈选出最好的那个。实验里它在 Gen. tic-tac-toe 和 Bargaining(player 1)上带来明显增益,其余游戏则无明显改变——说明它是按需提速的可选增强,而非必需件。
损失函数 / 训练策略¶
本文不训练神经网络,"训练"指的是 LLM(Gemini 2.5 Pro)的代码合成 + 精化循环。优化信号来自离线轨迹自动生成的单元测试通过率:CWM/推理函数精化到准确率 1.0 或 LLM 调用预算耗尽;价值函数用锦标赛选择。对弈时 (IS)MCTS 固定跑 1,000 次模拟,叶节点用价值函数或 10 次随机 rollout 估值。作者也试过对(部分可观的)CWM 用 PPO 学策略(附录 E)。
实验关键数据¶
主实验¶
评测 10 个游戏(5 完美信息 + 5 不完美信息,各含 2 个自造 OOD 游戏),对手有 Random、用真值代码规划的 GT-(IS)MCTS(性能上界)、以及"LLM 即策略"的 Gemini 2.5 Pro。每个匹配 100 局取平均,CWM 合成重复 5 次并自动拒绝坏样本。
| 设定 | 结论 | 对比 Gemini 2.5 Pro |
|---|---|---|
| 完美信息博弈 | CWM-MCTS 与 GT-MCTS 旗鼓相当(说明合成代码质量高) | 全部 5 个游戏均胜 |
| 不完美信息·开牌 | 除 Hand of war 外均打平或胜 | 9/10 游戏整体打平或胜 |
| 不完美信息·闭牌 | 合成质量下降,但对弈性能未显著退化,仍打平或胜 Gemini | 持续打平或胜 |
消融 / 合成准确率¶
| 游戏 (开牌, 树搜索, 隐历史推理) | 转移准确率(test) | 推理准确率(test) | LLM 调用数 |
|---|---|---|---|
| Bargaining | 0.983 | 1.000 | 23.0 |
| Leduc poker | 0.998 | 1.000 | 4.4 |
| Gin rummy | 0.746 | 0.538 | 500.0 |
| Quadranto (OOD) | 1.000 | 0.986 | 6.0 |
| Hand of war (OOD) | 0.981 | 0.936 | 144.0 |
| 配置 | 关键发现 | 说明 |
|---|---|---|
| 隐历史 vs 隐状态推理 | 隐历史略优且保证合法 CWM 状态 | 选为 CWM-ISMCTS 默认 |
| 闭牌 Gin rummy 推理准确率 | train 仅 0.055、test 0.095 | 多阶段计分逻辑极难合成 |
| 价值函数消融 | Gen. tic-tac-toe / Bargaining(P1) 明显增益 | 其余游戏无明显变化 |
关键发现¶
- 代码合成质量是天花板:CWM-MCTS 能与用真值代码的 GT-MCTS 打平,说明 LLM 合成的世界模型几乎与真实规则等价,瓶颈不在规划而在合成正确性。
- Gin rummy 是最难骨头:它有敲牌、组牌、算 deadwood、判 undercut 等多阶段计分子程序,LLM 从少量轨迹很难一次性写对(开牌推理准确率仅 ~52%,闭牌训练准确率塌到 ~5.5%),点出 CWM 合成在"复杂多步过程化子程序"上的前沿难点。
- 闭牌反而偶尔更好:Hand of war 闭牌性能略优于开牌,作者推测是闭牌下 LLM 有自由合成更简单状态空间的余地。
- 算力换棋力:(IS)MCTS 固定 1,000 次模拟,只要合成件正确,加搜索就稳定逼近最优——这是"LLM 即策略"路线给不了的。
亮点与洞察¶
- 职责重新分工:把"理解规则"交给 LLM 代码合成、"深度搜索"交给经典规划器,各取所长,避免让一次前向同时扛两件难事——这是整篇最值得迁移的设计哲学。
- 单元测试当编译器反馈:从轨迹自动生成二值单元测试,让代码合成有了客观、可迭代的优化信号,stack trace 回喂精化,把"对不对"变成可度量的 transition accuracy。
- 正则化自编码器视角处理闭牌:在拿不到隐状态时,用"规则 + API"而非瓶颈/正则项当正则化器,把 CWM+推理函数组成一个自编码器,是个很漂亮的形式化——它把无监督隐状态学习问题转成了"通过可验证单元测试"的代码问题。
- 泛化靠元任务:让 LLM 聚焦"数据→代码"翻译这个元任务,使其在自造的 OOD 新游戏上仍能工作,绕开了训练集污染问题。
局限与展望¶
- 受限于合成正确性:所有可验证性优势都"contingent on the correctness of the synthesized model",一旦 CWM 合成错(如 Gin rummy),整条链路就崩,规划器在错误世界里深搜反而误导。
- 复杂过程化游戏是硬伤:多阶段计分/复杂子程序类游戏,LLM 难从少量轨迹写对代码,需要更大调用预算(Gin rummy 用满 500 次仍不行)。
- 开牌假设的现实性:开牌设定需要离线轨迹里有事后隐状态,虽有合作训练/游戏设计期等合理场景,但并不总成立;闭牌虽被解决但合成质量明显下降。
- 模型上线即冻结:本文为效率只在开局前一次性学好 CWM,未做对弈中随新数据在线更新模型,复杂游戏里可能错失修正机会。
相关工作与启发¶
- vs WorldCoder (Tang et al. 2024a): 都用 LLM 从轨迹合成 CWM 并存进树、用 Thompson 采样挑选精化对象,但 WorldCoder 用 ReAct 决策;本文换成 (IS)MCTS 深搜,并扩展到多智能体、合成价值函数与推理函数。
- vs GIF-MCTS (Dainese et al. 2024): 同样把合成的 CWM 接 MCTS,本文额外处理部分可观测+随机博弈,并加入隐历史推理与闭牌自编码器范式。
- vs POMDP Coder (Curtis et al. 2025): 都学部分可观 CWM,但 Curtis 假设隐状态事后可观、用确定化信念空间规划;本文进一步攻克"隐状态永不可见"的闭牌场景,并用 ISMCTS/PPO。
- vs LLM 即策略 (如 Gemini 2.5 Pro): 对方每步直接出招,易出非法手、策略浅、OOD 差;本文把 LLM 降级为离线模型生成器,让规划器把算力转成棋力。
评分¶
- 新颖性: ⭐⭐⭐⭐⭐ 首个系统处理部分可观+随机博弈的 CWM 框架,闭牌自编码器范式与推理/价值函数合成都是新东西。
- 实验充分度: ⭐⭐⭐⭐ 10 个游戏含 4 个自造 OOD、开/闭牌全覆盖,并与 GT 上界和强 LLM 对比,唯硬游戏(Gin rummy)暴露明显短板。
- 写作质量: ⭐⭐⭐⭐ 动机清晰、形式化扎实,自编码器与下界推导讲得透。
- 价值: ⭐⭐⭐⭐⭐ 把"LLM 理解 + 经典规划深搜"解耦的范式对通用博弈与更广的代码世界模型方向都有启发。