PAPER DEEP DIVE
Recursive Game Creator:面向玩家体验的递归游戏开发框架
Recursive Game Creator 把「游戏能跑」与「游戏好玩」拆成两个必须分别验证的命题,用 Designer、Builder、Player、Reviewer 四个角色组成递归闭环。Player 不靠 GUI 逐帧点击,而是编写可复用的代码策略批量收集 gameplay 轨迹,动作循环内一次模型都不调;Reviewer 把轨迹、截图与用户偏好合成共享信号(成功率、游玩时长)与游戏专属 rubric,并以匿名双顺序 A/B 判定决定哪一版被保留。模型参数全程固定,被优化的是游戏工件本身。同一底座下 GameCraft-Bench 总分三轮从 72.70 升到 77.89,比同模型 baseline 的 71.26 高 6.63 分;GameASG-Bench 严格任务成功率从 9/47 提升到 25/47(+34.1 个百分点),L2 均值 93.4% 与扩展特性 P2 的 93.9% 为全场最高。专家评分中操作 2 到 8、可玩性 1 到 7,平均游玩时长 1.50 到 12.41 分钟。代码已以 MIT 协议开源。
论文:Recursive Game Creator: An Agentic Product-Level Experience-Oriented Game Harness(arXiv:2610.08621,arxiv.org/abs/2610.08621,v1 于 2026-10-06 提交,主分类 cs.AI)
作者:Jiajun Chen、Haoyu Wu、Mingda Jia、Xihui Liu(HKU MMLab、香港大学、深圳环湾研究院;前三位为等贡献,Xihui Liu 为通讯作者)
代码状态:论文正文写的是 “Code is coming soon”,但仓库实际上已经公开:IMBALDY/RecursiveGameCreator(MIT,main 分支最近提交 2026-10-08 “Remove internal experiment artifacts and generalize benchmark task selection”),项目页在 imbaldy.github.io/recursive-game-creator。仓库是一个可跑的 harness:src/game_agent_lite/ 下 24 个模块,配套 docs/architecture.md、docs/player-policy.md、Docker 运行时(软件渲染,不需要宿主 GPU)、HTML 与 Godot 两条后端、以及 GameCraft 基准的导出与打分脚本。下文的「方法 ↔ 源码」对照基于对该仓库 main 分支的实读,行号以克隆当天为准。
图 1:论文图 1。三行分别是 MOBA《Twilight Front》、赛车《KAZE》与视觉小说《See You Tomorrow》,每行给出成对视图,版本标签 V1 → V2/V3 表示同一款游戏在递归精炼中的早晚期状态。这一张图承担的论证是:多轮迭代改的不只是「能不能跑」,还包括英雄池与战争迷雾、天气与生涯车库、对话分支与场景菜单这些内容与界面层的东西。
一句话总结
Recursive Game Creator(下称 RGC)把「游戏能跑」和「游戏好玩」拆成两个必须分别验证的命题,用 Designer、Builder、Player、Reviewer 四个角色组成一个递归闭环:Player 不再靠 GUI 一帧一帧点,而是写可复用的代码策略去批量跑轨迹,动作循环里一次模型都不调;Reviewer 拿轨迹、截图与用户偏好做匿名双顺序 A/B 判定,决定哪一版被保留、下一轮改什么。全程模型参数固定,改的是游戏工件本身。同一个底座模型下,GameCraft-Bench 总分从 71.26 抬到 77.89,GameASG-Bench 的严格任务成功率从 9/47 变成 25/47。
研究背景与动机
论文的出发点是一句很硬的话:coding agent 已经能快速造出可运行的游戏,但成功执行并不建立「玩起来的质量」。作者把玩家体验拆成四个可分别失败的维度——机制是否有吸引力、难度是否合适、呈现是否连贯、反馈是否及时——然后指出现有的 agentic 工作流虽然支持迭代式游戏开发(Harness-of-Harness、VibeGame 等),但「把 gameplay 翻译成面向体验的修订」这一步仍然是空的。要走到产品级游戏,缺的不是更强的代码生成,而是一个把开发与反复试玩连起来、并让游戏去适应目标玩家的 harness。
为什么之前的做法不够?论文把矛头指向 GUI 测试,给了三条具体理由,而不是笼统说「慢」。第一,截图驱动会漏掉程序接口里本来就暴露着的结构化状态、合法动作集合、事件与进度信号——用视觉去重建这些量,是在给自己增加一道有损压缩。第二,每个动作都要一次视觉解释加一次模型决策,延迟直接压住了 rollouts 的频率与粒度,于是「多试几次」变成奢侈品。第三,coding agent 的优化目标是代码生成与推理,不是细粒度的视觉游戏状态解释,让它在动作循环里当眼睛和手,是用错了工具。
RGC 的回答是把三件事解耦:快速的游戏控制、策略的构造、以及 Reviewer 的视觉评估。控制交给写好的可执行策略,构造与修复才调模型,视觉判断集中在评审阶段做。作者给这条路线列了四个好处:高频控制、高效的轨迹收集、多样的能力模拟、以及结果可复现。这四个词不是修辞——「可复现」在这里有实际含义:策略代码和观测设置会随轨迹一起存档,跨版本比较时才有可比性。
Reviewer 一侧的动机同样具体。作者反复强调不同类型的游戏在意的东西不同:赛车要转向响应清晰、赛道引导明确、碰撞反馈可见;视觉小说要对话连贯、选项的后果可辨。所以评审标准必须是 game-specific 的,而且由 Reviewer 自己从共享维度实例化出来,而不是一张通用打分表套所有游戏。更关键的一条纪律是区分三种输入的性质:观测到的行为、从行为推断出的偏好、以及用户明确说出来的偏好。三者混在一起,「玩家喜欢探索」这种结论就会从一次偶然的走位里被过度解读出来。
把这些接起来就是论文标题里的 recursive:策略执行产出轨迹,轨迹与视觉分析产出体验与偏好反馈,Designer 把反馈翻译成计划,Builder 实现新的候选,再送去试玩。作者特别说明,这个闭环有两条不同的增益来源——agentic player 主导的精炼提升游戏质量,人类参与的精炼提升体验与偏好对齐程度。用户研究(4.4 节)考的是后者。
预备知识:harness、两个基准与 @k 的含义
先厘清 harness 这个词。RGC 不训练模型、不做 RLHF、不做 DPO,底座模型的参数全程固定。它优化的对象是游戏工件与开发流程本身。论文在相关工作里把这条线跟偏好对齐做了明确切割:RLHF 与 DPO 对齐的是语言模型的输出分布,RGC 用结构化偏好反馈去修订游戏这个 artifact。这个区别决定了它的能力边界——换掉底座模型,学到的东西不会跟着走;但反过来,它对底座模型没有任何训练侧要求,任何能写代码的 agent 都能塞进来。
两个基准考的是不同的东西。GameCraft-Bench 评估完整的 Godot 游戏,方式是回放式 gameplay 加 game-specific rubric,覆盖机制、内容深度、功能性视觉与美术四个面,分数 0–100;本文在 Yan et al. (2026) 选出的 45 个任务上跑三轮精炼,按 Action / Timing / Strategy / Simulation / Adventure 五个类别报告。GameASG-Bench 评估浏览器游戏是否满足源码与行为要求,分两层:L1 查源码,L2 真在浏览器里跑;L2 又按优先级分成 P0(启动与测试界面)、P1(必需玩法)、P2(扩展特性)。它的 task success 是一个合取指标——有效交付、完成评测、通过每一项 L1 检查、通过每一项适用的 L2 P0/P1 检查,全过才算过。理解这一点很重要:合取指标对「最后几项没做完」极其敏感,所以它的跳变幅度会远大于单项通过率。
表格里的 @k 表示第 k 轮精炼。轮与轮之间被保留的是「当前最佳版本」,而不是上一轮的候选——这个细节在源码里是有护栏的,后面方法部分会讲到。
方法详解
图 2:论文图 2,多轮精炼工作流。Designer 规划修订、Builder 实现代码与资产、coding-native Player 收集 gameplay 轨迹、Reviewer 把行为证据与视觉证据结合共享标准与游戏专属标准产出带偏好信息的修订反馈。中央的环形箭头表示可配置轮数的重复精炼。图里还给了一段策略代码样例(policy_observe / policy_step)与轨迹行(hp=92、dist=145、move_right),这两个细节正是「策略是代码、轨迹是结构化记录」的直观体现。
整个闭环可以画成下面这张图。注意两条容易被忽略的边:Reviewer 到「保留版本」是一条判定边(三态:偏好候选 / 平局 / 不可判定),Reviewer 到 Designer 是一条反馈边(结构化偏好记录 + 修订目标 + 后续检查)。这两条边分开,是因为「这一版要不要留」和「下一版改什么」在论文里是两个不同的输出。
flowchart TD U[用户 brief U 与显式文本偏好] --> D[Designer 产出计划 P_t 含假设 h_t 改动 Delta_t 验收目标 A_t 资产请求 X_t] G[当前最佳版本 G_t] --> D H[最近反馈 H_t-1 结构化偏好记录] --> D D --> B1[Builder Draft 得到草稿 Z_t 核心循环与占位资产] B1 --> B2[框架执行资产请求 Generate 得到 X_t_star] B2 --> B3[Builder Integrate 得到候选 C_t 检查资产与碰撞 动画 交互区的配合] B3 --> P1[Player 读 state schema 可用动作与测试目标 编写或继承策略 pi_t_k] P1 --> P2[Rollout 经程序接口或 CLI 执行 动作循环内不调用模型] P2 --> E[证据集 E_t 由 K 条轨迹与视觉记录组成 含状态 动作 事件 进度 用时 终止结果] E --> R1[Reviewer 共享信号 成功率 游玩时长 卡点位置] E --> R2[Reviewer 游戏专属 rubric 由共享维度实例化到具体类型] E --> R3[Reviewer 视觉证据 采样截图与录像 看不到源码与版本顺序] R1 --> J[匿名 A B 双顺序比较 候选对现任] R2 --> J R3 --> J J -->|两个顺序都偏好候选| K1[保留候选 成为下一轮的 G_t] J -->|平局 证据不可用 或偏好现任| K2[保留现任 候选被拒] K1 --> H K2 --> H H --> D
3.1 Designer 与 Builder:把体验目标编译成可测目标
Designer 的职责是把用户 brief 展开成核心玩法循环、机制、进度与难度、视觉方向、生产优先级。它的输入是用户 brief、当前游戏与最近反馈,输出是一个四元组计划:
$$P_{t}=\operatorname{Design}(U,G_{t},\mathcal{H}_{t-1})=(h_{t},\ \Delta_{t},\ A_{t},\ X_{t})$$
四个分量各有各的用途,论文对它们的定义值得逐个抄下来:假设 $h_{t}$ 陈述「本轮打算带来什么体验上的改善,依据是什么」;改动 $\Delta_{t}$ 既要写清具体改什么,也要写清哪些已有的优点必须保留;验收目标 $A_{t}$ 用场景、玩家输入与可观测结果来表述;资产请求 $X_{t}$ 列出需要生成的素材。这个表示的价值在于它把「体验目标」强制翻译成了「实现决策 + 可测目标」——$A_{t}$ 是可以在试玩里被证伪的,而「让游戏更有趣」不能。
Builder 接手计划,按机制、交互需求、视觉方向与资产需求选择实现工具,然后走三段式:
$$Z_{t}=\operatorname{Draft}(G_{t},\Delta_{t}),\qquad X_{t}^{*}=\operatorname{Generate}(X_{t};Z_{t}),\qquad C_{t}=\operatorname{Integrate}(Z_{t},X_{t}^{*})$$
草稿阶段实现核心循环与计划改动,需要时用占位素材;框架负责执行资产请求并把生成的文件交给集成阶段;集成之后 Builder 还要检查这些资产在游戏场景里的呈现,以及它们与碰撞、动画、交互区的配合。论文在这里写了一句很有分量的话:单独生成一个资产并不构成对玩法的改进。Builder 的定向自检与配置好的工程检查,是对 Player 那份更广的试玩证据的补充,不是替代。
方法 ↔ 源码:这条「Builder 的自述不是独立证据」的纪律在仓库里是被写死的。src/game_agent_lite/loop.py 组装历史反馈时,给每一轮的 builder 摘要挂了一行固定说明:"Implementation claims and open issues, not independent play evidence."(loop.py:187);finish_builder() 会读 {phase}-builder.json 回执,校验它确实指向本阶段的项目(Builder receipt does not identify this stage's project),再用 validate(receipt["builder"], ROLE_SCHEMAS["builder"]) 过 JSON Schema。交接文件里对「可复用检查结果」的措辞同样克制:"Builder-reported checks; hashes identify the final files, not proof of execution. ... host checks and Player still run."——哈希只证明文件是那份文件,不证明检查真的跑过,所以宿主检查与 Player 照样要跑。
3.2 Coding-Native Player:策略是代码,轨迹是数据
Player 构造可执行的 gameplay 策略,把「策略生成」与「重复交互」分开。每个策略用游戏暴露出来的状态去选择合法动作并收集一条轨迹,因此可以做基于状态的控制,而不需要每个动作都要一次语言模型回复或一次视觉解释。对第 $t$ 轮的候选版本 $C_{t}$,策略 $\pi_{t,k}$ 产出轨迹 $\tau_{t,k}$:
$$\tau_{t,k}=\operatorname{Rollout}(C_{t},\pi_{t,k}),\qquad \mathcal{E}_{t}=\{(\tau_{t,k},V_{t,k})\}_{k=1}^{K}$$
其中 $V_{t,k}$ 是可用时的视觉记录,证据集 $\mathcal{E}_{t}$ 由 $K$ 次 rollout 的记录组成。仓库的默认配置里 player.trajectories_per_version = 3,也就是 $K=3$;docs/player-policy.md 写明默认三条轨迹的目的分别是核心流程回归、本轮设计重点、以及替代策略与边界恢复。
策略构造与执行的过程论文写得很实:Player 先读 state schema、可用动作与测试目标,然后写一个「观察状态 → 选择动作 → 重复直到任务结束或 rollout 预算耗尽」的策略;策略通过游戏的程序接口或命令行接口运行;rollout 请求被派发成执行 job,因此可以重复试验、可以开独立的游戏实例。Player 会检查结果与执行失败,必要时修改策略代码。最后一条是硬约束:它不允许用一次对话回复来代替真正执行 rollout。这句话针对的正是 agent 常见的偷懒模式——「我推测这样玩会成功」。
方法 ↔ 源码:src/game_agent_lite/policy.py 的模块 docstring 就是这条约束的声明:"Source-assisted Player: author once, execute episodes, then inspect evidence. No model runs in the action loop. The host owns all game inputs and evidence."(策略辅助的 Player:写一次,执行若干 episode,然后检查证据;动作循环里没有模型运行;宿主拥有全部游戏输入与证据。)执行侧是一个 PolicyWorker——注释写着 “Small JSON-lines RPC. Docker exposes only policy and worker files.”,即容器里只暴露策略文件与 worker 文件,游戏输入由宿主掌握。src/game_agent_lite/game.py 的第一行更进一步:"Engine I/O and host-owned gameplay evidence; the Player never supplies proof files."(Player 永远不提供证据文件)。证据由宿主录制,Player 无法自己交作业,这条设计堵死了「自证通关」。
策略的继承规则同样在 docs/player-policy.md 里写得明确:新候选优先从当前最佳版本继承 policy.gd(Godot)或 policy.py(HTML)、profile 计划与简短的执行反馈,被拒的候选不会自动成为基础;Player 在新任务副本里沿用或局部修改策略,历史策略与历史游戏保持不变。当游戏版本、执行设置、设计与实现上下文完全相同时可以跳过策略编写,但新版本仍会调一次 policy_author 来检查适配。正式试玩之前还有一道不调模型、不占 episode 预算的预检:在独立副本里用正式配置的运行器执行 start → reset → observe,落盘 preflight/result.json、initial.png 与引擎日志;预检失败就保存错误并在写策略之前停下,修复后必须新建 Player 任务,不覆盖失败记录。
多样策略是这套设计能成立的前提。论文要求策略在 strategy、skill、exploration、risk tolerance 上有差异,比如一个偏好快速推进、另一个专门探索可选内容。轨迹记录暴露的状态、动作、事件、进度、耗时与终止结果;并行或重复执行提供多次尝试与失败案例,且都带着已知的策略设置。策略与观测设置随每条轨迹一起记录,这样跨游戏版本的比较才有意义。视觉捕获与呈现评估不属于这一阶段,属于评审阶段。
关于成本,作者没有回避:轨迹能支持对完成度、难度、已探索内容、失败点或停滞点的估计,直接访问状态与事件避免了从每一帧重建这些变量,轻量执行与并行采样让重复试验变得可行。但总测试成本包含四部分——策略生成、策略修复、执行、评审。作者自己写下了一句限定:代理策略提供了多样的测试行为,但不能确立它们代表了完整的人类玩家群体。
3.3 面向体验的 Reviewer:三态判定与匿名双顺序
Reviewer 把行为轨迹、视觉观测与用户输入合成一份体验评估和可执行的修订反馈。它的每条输入都关联到被评估的游戏版本与策略或玩家会话,评估过程中始终保持「观测到的行为 / 推断出的偏好 / 用户明确要求的」三者的区分。
共享信号是成功率与游玩时长。这里有一个容易被读反的立场:Reviewer 用多策略的轨迹估计成功率、检查玩法在哪里结束或卡住,但目标不是把成功率推到最高——太容易的成功没有挑战,反复失败会造成挫败,目标是「对目标玩家而言合适的难度」。跨策略比较结果用来判断进度是否可达、更强的玩法是否被奖励。时长也不能单看:Reviewer 把运行时间与进度、已探索内容、停止原因放在一起,才能区分「活动多样的长局」与「卡在同一点上的长局」。作者再次限定:这两个量都仍然只是被测策略的量,代理游玩时长本身不能说明人类的兴趣或愉悦。
游戏专属 rubric 从共享维度出发——控制响应、内容丰富度、叙事或进度节奏、视觉一致性、对探索与重玩的支持——再实例化成适合该类型与目标体验的具体标准。Reviewer 还要检查规则、视觉线索与实际玩法三者是否一致,并解释优点、缺点与取舍,而不是把不相关的标准求个平均。
视觉证据的使用方式很讲究:Reviewer 拿到的是渲染画面里的采样截图与可用录像,和试玩报告放在一起看,看不到源码,也看不到版本顺序。轨迹说明策略在哪里成功、失败或停止推进,渲染画面说明玩家在那一刻能看到什么,两者合起来评估文本可读性、视觉风格与动作反馈。视觉评审与快速控制循环是分开的,所以收集一条轨迹不需要每一步都解释一张图。作者也承认边界:短暂特效或缺失的反馈可能需要录像,几帧不够。
归因纪律是这一节最实用的部分。每条观测都绑定到它的游戏版本、策略与回放;Reviewer 要区分「发生了什么」与「为什么可能发生」——一次失败的转弯可能是操作手感差、可能是提示不清、也可能只是策略本身弱。当原因不确定时,反馈必须写明「还需要什么证据才能判定」。这条规则直接决定了反馈的可执行性:不带证据需求的猜测会让下一轮 Designer 去改一个可能根本不存在的问题。
最后是结构化偏好反馈与版本保留。Reviewer 把轨迹模式、视觉发现与用户明确输入翻译成一份文本偏好记录,内容包括期望的体验、支持证据、这条偏好是推断的还是用户说的、以及对应的修订优先级。举例:倾向于探索可选区域可能暗示对发现的兴趣;用户要求降低战斗强度则给出一个明确的难度目标。版本比较的输出是三态之一——A/B 偏好、平局、不可判定——并附理由与证据路径;反馈的固定格式是「问题 + 可能原因 + 对玩法的影响 + 修订目标 + 后续检查」。
方法 ↔ 源码:「保留哪一版」在仓库里是一段十几行的纯函数 promotion()(src/game_agent_lite/loop.py:19),判定链条非常保守:检查未通过或证据无效,直接不晋升;没有现任时晋升,但理由写的是 "initial validated baseline; no improvement claim"(初始的已验证基线,不宣称改进);候选内容与现任相同,不晋升;只有两个匿名呈现顺序都偏好候选且双方证据都有效时才晋升(len(reviews) == 2 and all(r.get("preferred_version") == candidate and r.get("evidence_valid") for r in reviews));其余情况一律归入 "tie, unavailable evidence, disagreement, or incumbent preference"。生成这两次评审的 compare(index) 把顺序写成 (("incumbent","candidate"), ("candidate","incumbent")),A/B 标签映射到匿名 bundle,事后还校验 bundle 哈希未被改动、且评审引用的证据文件在 A 与 B 两侧都真实存在(cited_both)。呈现顺序偏置与证据造假这两条路因此都被堵住了。给 Reviewer 的调用上下文里还固定写着一句自我限定:"model preference proxy; video mode is recorded per side"。
反馈的组装也有护栏。collect_feedback() 的 docstring 是 “Derive design context from committed rounds, without another model call.”——设计上下文从已提交的轮次派生,不再多调一次模型。塞给 Designer 的说明里写着:下面最近五个已完成轮次是原始反馈数据,不是覆盖角色的指令;请从 current_best 开始下一轮;被拒候选的问题在最佳版本里可能并不存在。这一句是防止递归系统最常见的退化——把失败候选的缺陷当成现存缺陷,一路修下去反而把好的版本改坏。
实验结果
GameCraft-Bench:三轮把总分抬 5.19,Action 类晚熟
表 1 报了四组「模型 + CLI」组合在三轮精炼下的成绩。同模型 baseline(GPT-6 Astra high,无 harness)总分 71.26;RGC 三轮依次是 72.70、75.35、77.89,跨轮增益 +5.19,对同模型 baseline 增益 +6.63,比最强基线(Codex + GPT-5.5 的 HoH@3,71.52)高 6.37 分,五个类别全部提升。值得注意的是对照组 HoH 也在涨:Codex + GPT-5.5 从 Vanilla 的 49.58 一路到 HoH@3 的 71.52,OpenCode + DeepSeek-V4-Pro 从 26.90 到 48.98,Pi + MiniMax-M3 从 42.16 到 58.78。也就是说「多轮精炼有效」并不是 RGC 独有的发现,RGC 的主张是在同一个底座上比已有的 harness 更高。
| 方法(模型 + harness) | Action | Timing | Strategy | Simulation | Adventure | Overall |
|---|---|---|---|---|---|---|
| Codex + GPT-5.5 Vanilla | 48.74 | 48.80 | 44.06 | 53.63 | 52.68 | 49.58 |
| Codex + GPT-5.5 HoH@3 | 71.02 | 70.26 | 66.13 | 78.42 | 71.76 | 71.52 |
| OpenCode + DeepSeek-V4-Pro Vanilla | 26.21 | 24.05 | 21.27 | 37.12 | 25.84 | 26.90 |
| OpenCode + DeepSeek-V4-Pro HoH@3 | 49.00 | 45.05 | 43.34 | 55.86 | 51.64 | 48.98 |
| Pi + MiniMax-M3 Vanilla | 45.64 | 38.20 | 34.53 | 48.19 | 44.26 | 42.16 |
| Pi + MiniMax-M3 HoH@3 | 58.24 | 62.10 | 44.86 | 64.25 | 64.44 | 58.78 |
| GPT-6 Astra (high) Baseline | 73.33 | 64.26 | 71.44 | 74.78 | 72.49 | 71.26 |
| GPT-6 Astra + RGC@1 | 67.96 | 68.76 | 72.10 | 77.72 | 76.95 | 72.70 |
| GPT-6 Astra + RGC@2 | 70.33 | 73.19 | 72.96 | 80.57 | 79.69 | 75.35 |
| GPT-6 Astra + RGC@3 | 77.62 | 74.41 | 74.46 | 82.94 | 80.00 | 77.89 |
表 1:GameCraft-Bench 结果(0–100,越高越好),@k 表示第 k 轮精炼。数据取自论文表 1,HoH 行只保留 Vanilla 与 @3 两端以便对照,中间轮次见原文。
Action 类是最有意思的一条曲线:67.96 → 70.33 → 77.62,涨了 9.66 分,但前两轮都低于同模型 baseline 的 73.33。也就是说第一轮精炼在动作游戏上是负收益的,收益全部发生在第三轮。作者给的可能解释是:动作游戏的质量依赖控制、碰撞处理、战斗反馈与进度系统的协同改动,它们之间的相互作用可能需要好几个「试玩 + 修订」周期才能理顺;较大的后期增益与这个解释一致。但作者紧接着自己加了限定——仅凭类别分数无法确定其成因。这是一处值得记住的诚实:他们没有把一个相关性讲成机制。
GameASG-Bench:用更弱的模型档位打到第二,L2 与 P2 最高
表 2 的读法要先看清模型档位。任务成功率第一是 GPT-6-Astra ultra + Codex CLI 的 26/47(55.3%);RGC 用的是 GPT-6-Astra high,拿到 25/47(53.2%)。同模型同 CLI 的 baseline 只有 9/47(19.1%),所以 harness 带来的增益是 34.1 个百分点。RGC 的 L2 均值 93.4% 与扩展特性 P2 的 93.9% 是全部配置里最高的,L1 98.3%、P0 99.0%、P1 92.2%。
| 模型 / harness | Task success | L1 | L2 Mean | L2 P0 | L2 P1 | L2 P2 |
|---|---|---|---|---|---|---|
| GPT-6-Astra ultra + Codex CLI | 26/47 (55.3%) | 98.0 | 93.2 | 99.0 | 92.7 | 92.4 |
| Claude-Opus-5 + Claude Code | 24/47 (51.1%) | 99.6 | 90.4 | 91.2 | 89.9 | 91.1 |
| GPT-5.6-Sol + Codex CLI | 21/47 (44.7%) | 98.9 | 91.3 | 100.0 | 89.7 | 91.9 |
| DeepSeek-V4-Flash + Claude Code | 18/47 (38.3%) | 99.4 | 89.3 | 98.0 | 86.7 | 90.2 |
| Kimi-K3 + Claude Code | 15/47 (31.9%) | 97.7 | 88.5 | 98.0 | 86.3 | 89.7 |
| GLM-5.2 + Claude Code | 11/47 (23.4%) | 98.8 | 84.6 | 91.2 | 83.3 | 83.0 |
| MiniMax-M3 + Claude Code | 7/47 (14.9%) | 98.3 | 70.6 | 91.2 | 64.5 | 75.4 |
| GPT-6-Astra high + Codex CLI(同模型 baseline) | 9/47 (19.1%) | 95.6 | 86.6 | 97.1 | 84.1 | 88.6 |
| GPT-6-Astra high + RGC | 25/47 (53.2%) (+34.1) | 98.3 (+2.7) | 93.4 (+6.8) | 99.0 (+1.9) | 92.2 (+8.1) | 93.9 (+5.3) |
表 2:GameASG-Bench 结果(百分比;task success 同时给计数)。基线取自 Zhang et al. (2026c) 表 3;括号内是相对「GPT-6-Astra high + Codex CLI」的百分点增益。为便于对照,表中省略了 Hunyuan-3 与 DeepSeek-V4-Pro 两行,完整数据见原文。
怎么解读这 34.1 个百分点?回到 task success 是合取指标这一点:它要求全部 L1 与全部适用的 L2 P0/P1 都通过,所以「差一项」和「差十项」同样记 0。baseline 的 L1 只有 95.6%、P1 只有 84.1%,说明失败主要来自必需玩法与源码要求上的零散缺口;RGC 把 P1 抬到 92.2%、L1 抬到 98.3%,合取之后成功率就翻了近三倍。而 P2(扩展特性)拿到全场最高的 93.9%,指向的是另一件事:多轮精炼不只补齐必需项,还会把需求里写了但没强制检查的部分做进去。这跟 GameCraft-Bench 上「内容深度与美术也在涨」是同一个信号。
定性演化、探索覆盖与用户研究
图 3:论文图 3(a),动作游戏的 V1 → V3。比较的是角色美术、技能特效、遭遇战、Boss 机制、界面元素与升级反馈。论文点出的重点是:遭遇战头像与升级反馈伴随着更丰富的战斗特效出现,说明精炼延伸到了「玩法循环的可读性与呈现」,而不只是执行正确性与 bug 修复。
图 4:论文图 3(b),视觉小说的 V1 → V3。演化维度是对话、选项、场景细节、插画战斗、情绪调度与阅读辅助。游戏从大段散文式交流走向分开的发言轮次、插画事件、以及扎根于当前场景的选项——这些改动影响的是读者如何跟随叙事、如何理解自己有哪些决定可选。
图 5:论文图 3(c),Meme Arena 的 V1 → V3。三个角色的阵容始终不变,变的是竞技场细节、技能专属特效、召唤攻击、终结技的强调、选择界面与移动指引。论文用同一款游戏的脚本化捕获视图,把「特性级」的变化摊开给读者看。
图 1 的三款游戏说明了 harness 支持的内容与界面范围:《Twilight Front》加了战争迷雾显示并扩充英雄池,《KAZE》加入变化的比赛条件、生涯车库与车身涂装,《See You Tomorrow》把角色对话、玩家选项、事件插画与教室菜单组合在一起。图 3 的三个 panel 则回答「多轮 RSI 到底改了什么」——共同点是修订目标都很具体:把游戏状态讲清楚、把内容呈现出来、把可用动作说明白。
图 6:论文图 4,FPS 测试场景里的空间探索。左侧是同一出生点出发的三条示意性 GUI 路线,右侧是 48 次已录制的 coding-native 策略 rollout 的访问密度(颜色为归一化访问密度)。源数据报告 97.1% 的网格覆盖率,其中包含 11 个室内空间。⚠️ 作者明确标注:GUI 路线是示意性的,这张图展示的是覆盖度而不是实测加速。
探索分析这一节最容易被误读成「coding-native 比 GUI 快多少倍」,论文自己先把这条路堵了:一个可复用策略在不调用模型的情况下收集了这些证据,但 GUI 路线是 illustrative 的,所以图展示的是 coverage 而非 measured speedup;要做受控比较,必须匹配预算与观测权限,并把策略构造、修复、执行与评审的成本都算进去。
用户研究考的是「递归修订有没有把游戏推向目标玩家体验」,输入是用户明确说出的偏好或 Reviewer 从玩法里推断出的偏好。表 3 的四项评分都是 1–10,外加平均游玩时长。
| 轮次 | Controls 操作 | Playability 可玩性 | Depth 深度 | Art 美术 | 平均游玩时长(分钟) |
|---|---|---|---|---|---|
| Round 1 | 2 | 1 | 3 | 2 | 1.50 |
| Round 2 | 5 | 4 | 4 | 6 | 4.87 |
| Round 3 | 8 | 7 | 6 | 8 | 12.41 |
表 3:论文表 3,专家评分与跨轮平均游玩时长。注意原文 caption 用的是 “Expert scores”——这是专家评估,论文未报告评分者人数与置信区间。第一轮可玩性只有 1 分,说明起点确实是一个粗糙原型,这正好对应论文标题里 “from rough game prototypes into entertaining games” 的说法。
操作 2 → 8、可玩性 1 → 7、深度 3 → 6、美术 2 → 8,平均游玩时长 1.50 → 12.41 分钟。四项加时长同时上升,跨越了交互、内容与呈现三个层面,与 harness 的体验导向修订目标一致。时长是这里最直观的指标:一个玩家愿意在一个自动生成的游戏上停留 12 分钟,跟停留 1.5 分钟,是两种完全不同的产品状态。
局限性
1. 代理玩家不等于人类玩家(作者自述)。论文两处主动写明:代理策略提供了多样的测试行为,但不能确立它们代表完整的人类玩家群体;代理游玩时长本身并不能显示人类的兴趣或愉悦。人类轨迹与显式反馈只能提供关于个体偏好的额外证据。这意味着 GameCraft-Bench 上的 77.89 与表 3 里的 12.41 分钟,衡量的是两套不同的东西,前者是策略代理下的质量评分,后者是专家判断,两者之间没有一座被验证过的桥。
2. 探索覆盖图不构成加速证据(作者自述)。图 4 的 GUI 路线是示意性的,图展示的是覆盖度而非实测加速;受控比较必须匹配预算与观测权限,并计入策略构造、修复、执行与评审的成本。换句话说,「coding-native 比 GUI 更高效」这个直觉上最吸引人的主张,论文没有给量化证据。
3. Action 类的晚熟无法归因(作者自述)。作者给出的是一个「可能的解释」,并明确写道仅凭类别分数无法识别其成因。前两轮低于 baseline 这件事也没有被解释——如果精炼在早期是负收益的,那么三轮这个数字本身就是一个需要被论证的超参数选择。
4. 成本一侧不透明(读者判断)。论文报告了质量增益,但没有报告三轮精炼的 token 消耗、墙钟时间或美元成本,也没有报告有多少轮因为平局、证据不可用或评审分歧而停留在旧版本。源码里的 promotion() 是一个要求「两个匿名顺序都偏好候选」的严格门,这种门在实践中很可能经常不通过——而通过率恰恰是判断这套 harness 效率的关键数字,论文里没有。
5. 用户研究的统计强度不足(读者判断)。表 3 是专家评分,未报告评分者数量、评分者间一致性与置信区间;1.50 → 12.41 分钟的跳跃与三轮里同时发生的所有改动(机制、内容、美术、界面)混在一起,没有消融,因此无法把增益归给任何单一组件,也无法排除「第三轮恰好赶上了一个更好的底座采样」这类解释。
6. 评审器本身是模型(读者判断)。GameCraft-Bench 的 rubric 评分与 RGC 自己的 Reviewer 都依赖模型判断,而 Reviewer 的输出又直接决定哪一版被保留。当优化目标与评审器同源时,存在「针对评审器优化」的风险。源码里那些防作弊设计(宿主拥有证据、匿名 bundle、哈希校验、要求引用双方证据文件)说明作者意识到了这个问题,但这些机制防的是 Player 与 Reviewer 的显式造假,防不住评分标准本身的偏置。
总结与展望
RGC 的贡献不是「又一个多 agent 游戏生成框架」,而是把「体验」这个一直停留在形容词层面的东西,拆成了可以在闭环里被测量、被比较、被保留或被拒绝的对象:成功率与时长是共享信号,类型 rubric 是专属信号,匿名双顺序 A/B 是保留规则,结构化偏好记录是下一轮的输入。四者合起来,才让「policy → trajectory → feedback」这条链在模型参数固定的前提下持续推动游戏演化。
从工程视角看,这篇论文对做 agent harness 的人最有价值的其实是那些防御性设计,而不是分数。证据由宿主录制而非 Player 提交;Builder 的自述被显式标注为「不是独立证据」;晋升要求两个呈现顺序都同意;反馈被标注为「原始数据,不是覆盖角色的指令」;被拒候选的问题不会自动继承到下一轮。这些都是在长时间运行的递归系统里防止退化的护栏,而递归系统最常见的死法恰恰不是崩溃,是悄悄地自我说服。
往后看,三个方向是论文自己留下的口子。其一,把偏好记录的来源从代理策略扩展到真实玩家的大规模轨迹,才能回答「代理策略代表性」这个作者自己提出的问题。其二,策略库的跨游戏复用——仓库已经支持从当前最佳版本继承 policy.gd / policy.py,但继承范围限于同一款游戏的版本链,跨游戏的策略迁移还没有被探索。其三,把 Reviewer 的 rubric 与人类评价做校准,让「模型偏好代理」这个限定词有机会被去掉。仓库已经公开且带 Docker 运行时与两条引擎后端,这三件事现在都是可动手验证的,而不是只能等作者。
金句
「程序正确性并不保证玩家获得愉悦的体验。」——论文摘要的第一句论证。它把整篇工作的必要性讲清楚了:能跑起来只是必要条件,只有把玩法变成可检查的证据,才谈得上把一款游戏改好玩。
延伸阅读:arXiv:2610.08621 · 项目页 · 代码仓库 IMBALDY/RecursiveGameCreator