凌晨一点多,顺着一个游戏开发者的转推点出去,落在 kylekukshtel.com 上。标题四个词,《Your Game Is A Harness》。
来历先交代一句。9 月 12 号卡尔加里 Indie Rodeo 上的一场 45 分钟演讲,10 月 10 号作者自己整理成文字发出来,开头特意声明全文人工写的,只拿幻灯片当参考,不是演讲速记。这个声明我先记一笔——现在肯写这句的人不多了。
一句话说清楚:教你把游戏本身改造成 agent 能自己跑、自己测、自己改的框架。这期的选手不是仓库,是一篇文章,我破了个例。
我为什么点进去?因为我试过让 agent 写玩法逻辑,能跑,一动就散。
作者的判断很干脆:不是模型不行,是模型看不见。公开可用的游戏源码比 Web 项目少几个数量级;更要命的是游戏里一大半东西压根不是代码——手感、节奏、动画窗口、数值曲线。模型只能看到写出来的那部分,玩法一旦依赖对看不见那部分的操控,它就废。
他自己起点也不高。一个叫 mood.site 的心情板网站,两三个星期的晚上,拢共二十来小时,靠往 ChatGPT 网页里反复贴代码。所以这话不是一个没摸过 LLM 的人说的。他在 Web 栈上几乎没吃过亏,到游戏这边才撞墙。
有几个让我坐直了的点,散着说。
“能复现”这件事。他主张项目一开始就建一个唯一带种子的随机源,所有非确定性调用都走它。听起来像废话,你去翻自己的项目看看,随机源八成散在四五个地方,还有几个藏在第三方库里。
存档读档同理。别留到末期当功能补,要当基础设施早期铺。这条我认得很——存档本质是“状态能被完整说清楚”,说不清楚的状态,人和 agent 都改不动。等到后期才想加,代价是重写核心结构。
数据结构那段。他拿一个他叫 Thing 的胖结构体替掉整套继承层级:攻击力、移速、存活标志、类型枚举全塞一个类型里。好处很实在,序列化只有一条路径,AI 改的时候没有歧义。这写法丑,我也不喜欢,但丑得有道理。
命令模式是同一套逻辑的延伸。状态变更记成可序列化的命令对象,交给处理类执行。回放命令就能精确复现玩家操作和 bug。更狠的一点是命令可以由 AI 或者你在文本编辑器里写好,直接丢进正在运行的游戏里执行——不用编译。
外部数据那节最像实战。静态数值搬出代码,Cantata 项目里七个非程序成员拿自研的 Depot 直接调数据,配合游戏构建包,不用重新出包。他后来把 Depot 从内部工具做成了正式产品;别的团队用 Google Sheets 或者自研工具干同样的事。这个我信,见过太多项目的数值表最后活在表格里。
黑盒那块他讲得比较省:模拟逻辑做成独立于引擎的 DLL,引擎发命令,吃返回的状态或状态差分。顺带把网络和纯 C# 单测都简化了。他举了《Monster Train》和《Solium Infernum》两个团队讲过类似结构,不是他自己拍脑袋。
评估这一段,是全文最不像“经验谈”的地方。
odiff,免费的命令行截图差分工具,输出差分图加一个“85% 相似”这种数。他的用法是别把原始截图直接喂给多模态模型——那是在往上下文里倒噪声。引擎得自带截图能力,UI 层和玩法层要能单独关,把干扰判断的视觉噪声压掉。性能这边用 samply,能把采样结果以文本形式打到控制台,agent 自己读得懂。流程是:设定确定性输入、结构化地改状态、隔离环境里验证、再用差分和剖析评估影响。理想情况下一次迭代几秒跑完。
上下文那块顺带说一句。他把一次调用拆成系统、助手、用户三段,指出用户提示承载了几乎全部实际输入,而每次发新消息,之前所有消息都要重发。早期一段坏内容会一直留在里面污染下去——“上下文工程”这词就是这么起来的。所以上面那套东西的意义不只是让 agent 看见,更是让每一轮喂进去的东西短、结构化、可验证。
现在说我的偏心话。
这套东西里真正新的部分,可能只有“给 agent 读”这个用途。剩下八成全是我入行就该会、但一直懒得做的工程卫生。确定性随机、存读档前置、数据和逻辑分离、状态变更走命令——哪一条跟 AI 有关系?没有。AI 做的事是把欠这些债的利息调高了。以前你糊弄过去,只是自己 debug 慢一点;现在你糊弄过去,agent 每轮都撞在同一堵墙上,而你还看不出它为什么撞。
作者自己也说,这些建议对普通游戏开发同样有益,AI 只是放大了收益。我觉得他说得太客气了。更准确的说法是,AI 把这些做法的收益放大到“不做就没法用”的程度。
文章末尾有个附记。他说他正在交付的一个小项目,文中技巧一条都没用;这套方法更适合规模较大的项目。
我一开始觉得这是拆自己台,后来觉得这才是整篇最可信的地方。一个写方法论的人肯告诉你“我这周没这么干”,比任何数字都值钱。他另外也明说了,十五年游戏程序员的经验加日常用 Claude Code 这类工具,是经验总结,不是受控实验——这句摆在那里,读者自己掂量。
我承认我没法像平时那样把它拉下来跑一遍,它是一篇文,不是一个仓库。这篇我就读到这儿,摸到这儿。
适合上手:项目已经大到“改一个数值要重新出包”的,或者你已经开始让 agent 碰玩法代码的——先挑随机源和存档这两件,收益最快。也别全上,jam 项目、两周要上线的东西、还在纠结用哪个引擎的,那套黑盒架构和 Depot 级别的数据管线对三个人小项目来说就是给自己加活。先把随机源收成一个,别的以后再说。
候选池里还蹲着一个把游戏状态序列化成纯文本、专供 agent 读的小库,我还没摸明白它的边界,下次讲。这篇原文你自己去翻,比我转述强——能不能用,取决于你项目现在欠了多少债。
