一次“把陨石慢一点”的灾难

设想这样的对话。用户先说:“做一个躲避陨石的小游戏。”几秒后得到第一版,玩了三十秒(示意),觉得不错,只是陨石太快。于是说:“把陨石慢一点。”

如果系统把这句话当作一次新的生成请求,结果可能是:陨石确实慢了,但飞船的造型变了,分数规则消失,背景音效也换了。用户想改的是一个参数,得到的却是一个新游戏。

这样的体验会迅速训练出一种行为:用户不敢再提要求。因为每一次修改,都是在碰运气般地重来一次,之前满意的部分随时会丢。第二句话如果失败,第三句话就不会出现。

修改先要判断“改的是哪一层”

自然语言里的一句“再难一点”,可能指向完全不同的地方。

用户的话 指向的层面 应该改动的范围 应该保持不变的
陨石慢一点 数值参数 陨石速度造型、规则、音效
背景换成夜晚 外观素材背景图与配色 玩法、分数、碰撞
飞船多一条命 规则 生命数与失败判定 关卡、外观
加一个道具系统 结构 新增模块与关联规则 已有的所有玩法

第一步是分类:这句话是调数值,换外观,改规则,还是加结构。分类错了,后面全错。例如“再难一点”既可以是加快速度,也可以是增加陨石数量,更可以是取消一条命,系统需要根据当前游戏的规则去选择,必要时还应该直接问用户一句,而不是猜。

局部修改靠“可寻址”的结构

要只改对应部分,游戏本身必须有可以定位的结构。如果整个游戏是一份几百行、变量互相缠绕的代码,一句“慢一点”只能靠模型在大段文本里猜;如果游戏被拆成参数表、素材表、规则表和场景配置,修改指令就可以落在明确的位置上。这与 自然语言转换成规则与可执行逻辑 的思路一脉相承:先有中间表示,才谈得上局部改动。

局部修改还要保持状态。比如玩家已经把飞船调成了蓝色,第二句话改的是陨石数量,飞船就不应该变回默认色。这需要系统清楚地记录:哪些部分是用户明确指定过的,哪些是系统的默认选择,前者优先级更高,不应被无关的修改覆盖。

前后两句话互相打架怎么办

修改还会遇到冲突。用户在第二句说“陨石多一点”,第五句又说“别那么难”,两句话的方向并不一致。系统不能默默选一个,更合适的做法是把当前的取舍说出来:陨石数量已经提高到原来的两倍(示意),现在可以放慢速度来平衡难度,还是希望恢复原来的数量。让用户看得见每一次改动带来了什么,比让模型自作主张更可靠,也让“可撤销”有了具体的落点。

改完以后,游戏还能玩吗

修改带来的最隐蔽风险,是把原本能玩的游戏改坏。把陨石变慢,可能让原本设计的“十秒内必须躲开”的节奏失效;多加一条命,失败判定的触发条件可能没有同步更新,于是游戏永远不会结束。

研究里已经出现了把游戏生成看成“写代码与试玩的对话”的思路:GUI Agent 真正操作浏览器里的游戏,再按游戏内应有行为评分。放到编辑场景,这类智能体正好适合承担回归检查:每次修改之后,重新玩一遍,确认旧的规则依然成立,新的要求也确实生效。

版本是用户敢于尝试的底气

最后是版本。每一次修改都应该是一个可以回退的节点,让用户能够回到“陨石还没变慢”的那一版,也能对比两个版本的差别。有了版本,用户才会大胆尝试“夜晚会不会更好看”,因为最坏的结果只是回退。至于项目层面怎样保存历史,可以参考 项目里的角色、设定和创作历史怎样保存

金沙娱乐AI这样的创作工具,最终被记住的,多半不是第一句话生成得多惊艳,而是用户说到第十句话时,游戏仍然完好,而且仍然是他自己的。