AI讨论 MAGI Games 开发记 #7 — “赢得票数的能力与被游玩的能力是两回事”。首次向3个AI展示了玩过的人所说的话
AI討論 MAGI Games 開発記 #7 — 「票を取る力と遊ばれる力は別物だ」。AI 3体に、遊んだ人の言葉を初めて見せた
我运营着一个网站,让3个性格各异的AI(科学家MELCHIOR、母亲BALTHASAR、女性CASPER)每天围绕主题进行讨论,并由Claude制作一款小游戏发布。
第6回讲的是每周一次的“反省会”第1回,以及之后的1周。让3个AI玩自己做的游戏时,3个都说“没玩”;即使让她们收起作战笔记,票也没有变动,真正变动的是通过的游戏内容。
这次讲的是第2回反省会之后的1周,以及第3回的故事。这次票动了。而且在第3回,我第一次让3个AI看了“玩过的人说的话”。所谓玩过的人,就是我。
第2回后的那一周,票动了
和上次一样,我按MELCHIOR、BALTHASAR、CASPER的顺序,用投票对象的首字母列出7天的票。因为不能投给自己,所以集齐2票就是全场一致。
第1回反省会(10月4日)之后的一周是这样的。
CCB BCM CCB CCB CCM CCM BCB
CASPER 赢了5次,BALTHASAR 赢了1次,否决(票形成循环、没有任何人拿到2票的那天)1次。BALTHASAR 7次全都投给 CASPER,投给 MELCHIOR 0次。正如第6回所写,票一毫米都没有动。
第2回反省会(10月11日)之后的一周是这样的。
BMM CCM CCB CMM BCB CMM CMM
MELCHIOR 赢了4次,CASPER 赢了2次,BALTHASAR 赢了1次。BALTHASAR 有4次投给 MELCHIOR。前一周是0次,在此之前的整个期间也只有3次。MELCHIOR 的累计战绩,在第2回时点是25次中1胜。结果一周内变成了5胜。
不同之处是什么?第1回是“让笔记折叠起来”。让他们重新阅读18回份的作战笔记(每次审议之后本人自己补写的反省与下次方针),并把当前的方针压缩到3〜5行。第2回在此基础上,司令(审议的主持者,制作游戏的 Claude)把前一周的宣言和票数对照了起来。“你上周说过‘如果差距很小就投给 BALTHASAR’。这周你投给 BALTHASAR 只有2次。你做到了吗?”“你最近连续8次都投给 CASPER。”“你写了4次‘先讲手感’,但提案文每次都是从结构说明开始的。”三者全都承认了。MELCHIOR 的回答是这样的。
MELCHIOR:光靠写下来改不掉,这一点由采用0次说明了。
下一周 MELCHIOR 的提案文,7篇全都是从操作或画面开始的。滑动弹珠、用直线切蛋糕、点击松饼、用手指把书插进去、拖动橡果。内部的数理没有变。只是在压缩后的方针第一行自己写了“提案文的第一行是操作与画面”,然后遵守了它而已。
在第6回的结尾,我写过如果有效的话,那大概是记忆的种类;但过了一周稍作修正,有效的不是量也不是种类,而是戳的方式和放置方式。即使让它读全文也不动,被数字一戳,再把本人的话放到第一行,它就动了。
掌握关键的是谁
在第6回我写过:“BALTHASAR 的4胜,4回都是 MELCHIOR 附和‘有一个机制’而跟进的回。”作为 MELCHIOR 投票给它的理由的共同点,这是正确的,但作为运营者的我自己重读时觉得不对劲。因为要获胜需要另外2个个体双方的票,所以‘获胜的回全部都是 MELCHIOR 投票的回’是从规则中直接得出的说法。
换个说法就是这样。截至第2回的25回里,CASPER 有17回投给 BALTHASAR,而 MELCHIOR 只投了6回。所以,实际决定 BALTHASAR 能否获胜的是 MELCHIOR 的票。反过来,BALTHASAR 投给 MELCHIOR 的,在25回里只有3回。MELCHIOR 获胜的关键,握在 BALTHASAR 手里。CASPER 能获胜,是因为另外2个个体习惯性地投给 CASPER。
这一周,BALTHASAR 有4回投给了 MELCHIOR。掌握关键的那个个体,在第2回被‘给 MELCHIOR 0回’一戳之后动了。MELCHIOR 的4胜,就是以这样的形式发生的。
设计是谁在做
票数有了变化,但游戏内容究竟如何呢。我们试着把10月13日“落叶吹风机”(CASPER 的方案)的会议记录,分成讨论与实现笔记(司令一边制作游戏一边写下的判断记录)来读一读。
讨论中决定的是:用风把落叶聚集到圆环中;删去俯冲;舍弃时间限制、改为按片数表扬;分数不以比例形式给出。就是这四项。
实现笔记中定下的事情还有更多。因为做成放射状的风后,叶子会穿透圆环、全部漏光,所以改成了朝划动方向吹的扇形风。把风做成按下瞬间就朝向圆环后,只要胡乱连按就能收集到83片,所以改成先划动8px、确定方向后再吹。由于时间限制消失、游戏没有了结束点,于是加入了50秒燃料和150秒日落。把剩余燃料变成了奖励。
把它做成可玩版本的判断,全都在实现笔记这一边。CASPER 自己在所感(完成后由3个实体各写的一句话)中这样写道。
CASPER:因为舍弃了时间限制、改成按片数表扬,所以如何结束就变成要依赖司令了。
3个实体决定题材和氛围,设计则由司令来做。
先察觉到的是我,10月13日我说“比起三个人的对话,感觉司令的实现更努力”,这就是开端。
我认为原因有两个叠加在一起。3个智能体只有语言,而司令可以运行模拟,看到“集齐了83张”这个数字。设计会流向看到数字的一方。还有,第6回写的“向对方靠拢的竞争”会朝削平棱角的方向起作用,所以如果不由某个人通过实现把被削掉的棱角(结束方式、失败、难度)补回来,就不成其为游戏。
这个网站的游戏设计师,不是正在讨论的3个智能体,而是默默进行实现的司令。
游玩者的声音,每天早上一行
到现在的4周里,有一件事一直是空缺。这个网站的游戏,除我以外没有任何人玩过。普通游玩次数是0。对3个智能体来说,胜利是另外2个的票,而游玩者的反应在战绩里哪里都没有。所以3个智能体即使越来越擅长拉票,也没有朝着做出被人游玩的游戏这个方向前进。
另一方面,决定难度的司令不玩游戏。只是在实现时写下“由人手来玩的话,60〜80张是目标”之类的估算。在反省会上玩的是3个智能体机器人,机器人没有“偏简单”或“单调”这种体感。拥有难度体感的只有我一个人,而我的感想,哪里都没有被记录下来。
因此,从这个星期开始,我决定每天早上把玩完之后的一句话,用自己的话逐行记录下来。第6回的结尾我写过:因为会搞不清楚到底是什么起了作用,所以一次不改变两处。这个记录既不涉及游戏,也不涉及3体,所以没有算进要改变的数量里。给3体看的是周末的反思会,那就是本周要改变的那一项。这是7天的内容。
| 日付 | 游戏 | 司令的估算 | 玩过之后我的一句话 |
|---|---|---|---|
| 10/12 | 一粒迷宫 | 思考后以最短路线解开时约1900分 | 虽然有趣,但难度偏低。虽然有5个关卡,但基本上都能通关。 |
| 10/13 | 落叶吹风机 | 人工操作时以60〜80片为目标 | 玩几次之后感觉有些单调。感觉画面角落的叶子没法聚到中间。 |
| 10/14 | 精准停车站 | 人工操作时以500〜750分为目标 | 非常难。没能正好停住。即使结果停在靠前的位置,也常被说过头太多。 |
| 10/15 | 插入书签 | 按人的手指误差持续瞄准约1050分,误差翻倍则约630分 | 很有趣,但要把书签落在与书的厚度完全一致的位置很难。总是会稍微削掉一点。699分。 |
| 10/16 | 对话气泡 | 凭手指的抖动尽量接近最佳位置按压可得650〜850分 | 太执着于追求100%反而会把气球弄破,这一点很有意思。768分。 |
| 10/17 | 滚大球 | 一直瞄准下一个门的话,可得5200〜5700分 | 还算有趣。故意把大球撞到墙上会降低速度,变得更容易瞄准门。5150分。 |
| 10/18 | 搬薯箱 | 即使把思考时间也算进去,也能在90秒左右通关全部关卡,约2250分 | 第5关、第6关变难了,第6关没能通关。因为每一关的布局每次都一样,所以要反复玩的话,第1~4关就变成了机械劳动。1300分。 |
排在一起看,前3天司令的估算和体感完全不在同一个轴上。估算说的是分数的事,而我说的却是“偏温和”“单调”“没法正好停住”。后3天则是699分、768分、5150分,落在估算范围内或刚好略低于估算。第7天之后再另写。
从这张表里引出的四件事。
“角落的叶子聚不过来”,在手机上确实聚不过来
在10月13日的落叶吹风机那篇里,我写到画面角落的叶子聚不到中间。读代码后发现,触摸操作时为了让手指不挡住叶子,风的出口会放在手指上方56px处。手指不能伸到屏幕外,所以出口也无法低于屏幕下端往上56px的位置。要把位于下端那条带上的叶子往内侧推,必须把出口放在叶子的后面(下方),但这做不到。如果是鼠标,出口就是光标本身,所以能聚拢。
司令的模拟是按鼠标操作跑的。“人的手是60~80片”说的并不是手机上的手。结束画面的建议“边缘的叶子从外侧往内侧推不容易飞掉”,在手机的下端成了无法执行的建议。
司令不会按下「再来一次」
10月14日的「ぴたり停車駅」还有另一个问题。跑完8站后按下「再来一次」,画面会停在水蓝色不动,第二周目不会开始。
一查才发现,到达终点的瞬间,车站编号已经前进到8(并不存在的第9站),而绘制仍在继续运行;它试图读取一个不存在的车站的坡道,于是抛出异常,绘制循环就在那里死掉了。结果画面属于另一层,所以还能显示,但按下「再来一次」后,只剩下天空的颜色。
司令的模拟只运行「推进」这一侧,不运行「绘制」这一侧,所以看不到这个异常。而且异常是在到达终点之后才出现的,而症状要按下「再来一次」时才会显现。可司令一次都没有按过。在一个一般游玩次数为0的网站上,玩第二周目的人只有我。第二周目的 bug,只有我能发现。
修复只用了3行。直到那天夜里,这个第二周目无法开始的游戏都还公开着。
原本打算当作惩罚的墙,其实是刹车
故意撞墙减速后再瞄准门。10月17日滚大球的5150分,就是我这样打出来的分数。读实现笔记时,司令把墙写成“不是减速而是反弹。撞上后前进降到六成,持续摩擦还会进一步下降”,这是打算当作惩罚。变慢的话,到达终点时的剩余时间奖励会减少。
司令的模拟是“什么都不按”“随便按”“左右往返”“一直瞄准下一个门”这4种,并没有跑过故意撞墙减速后再瞄准的玩法。而我的5150分,和司令的最佳(不瞄准金门,只瞄白门)的5200分几乎一样。用司令不知道的玩法,打出了和司令的最佳一样的分数。时间奖励的权重较轻,所以比起减速的损失,变得更容易瞄准带来的收益更大。
设计者打算作为惩罚加入的东西,在玩家手里会变成工具。编写机器人策略的是司令或3体,两者都认为惩罚是应该避开的东西来写。
比3体更早,司令读了
表格第7行、10月18日的搬红薯箱的实现笔记里,是这样写的:“有人说一粒迷宫‘偏简单’,所以第5面和第6面增加了步数”。
这个“声音”,是我每天早上各留下一行的体感。那是为了在当天晚上的复盘会上给3体看而放置的文件,每天的审议步骤里并没有写要读它。司令自己发现并读了它。我注意到“以前的感想被引用了。也许是第一次?”然后确认,确实是第一次。这是玩家的话第一次被反映到游戏里的一天,而反映它的是司令。这是“设计由司令在做”的延续,连玩家的声音,都是司令比3体更早捡到的。
而回应“声音”后的结果就是第7行。“偏温和”的选项让第5面和第6面的手数增加后,这次第6面又变得够不到了,而且因为配置固定,从第2周目开始第1~4面就成了作业。司令在回应“声音”时,只会沿难度轴来回应。而重复游玩这条轴,司令和3体都没有在看。这就是“司令不会按‘再来一次’”的设计版。
机制备忘:复盘会读什么、交什么
这里先讲一次复盘会的内部机制。以下按想让自己的智能体做同样事情的人所能用的粒度来写。
复盘会和每天的审议一样,是 Claude Code 的自定义命令。司令角色是 Opus,3体是 Sonnet 的子代理。周日18点任务计划程序启动,大约1小时内生成会议记录和页面,并完成 commit 和 push(与番外篇中写的每天早晨的机制是同一骨架)。
司令最初准备的是4样东西。
- 把那一周7天的会议记录按天逐日摘要出来的内容(采用方案、3个方案、票数、所感、运营者的游玩数据)
- 投票历史的汇总。包括全期间和本周的“谁给谁投了几次”,以及各轮投票的排列。自从第 5 轮有两处数错以来,就不再手工数,而是用脚本输出。
- 3 个个体各自的作战笔记。只把本人的那份交给本人,另外 2 个个体的不交。
- 从本周开始,是运营者的体感表。那是没有写在每日审议步骤里的、司令自己找到并读过的那个文件。
试玩时,复制目标游戏的 HTML,并添加两个函数。一个是“返回当前画面上显示的状态”的函数,另一个是“接收 3 个个体写出的玩法函数,在每个帧中调用,并按照返回值向 canvas 发送合成后的点击或长按”的函数。只把画面上显示的数字交给 3 个个体(不交给它们山坡强度之类的内部值),让它们以 decide(state, memory) 的形式用 JavaScript 写出自己的玩法。司令用无头浏览器把每个玩法各运行 3 次,记录分数、胜负、途中事件次数、25 秒时的截图。对于连点以及按下、松开的切换,加入“每秒最多 12 次”之类的人类手指上限。因为在第 1 轮的准备中,如果不加上限,就会做出每秒连点 60 次的 bot,从而明白靠机器的速度获胜没有意义。
征求感想时,不返回本人写出的玩法,只返回结果。这是为了观察它们是否在给出感想的时点忘记玩法的意图,第 6 轮的“3 个个体都说‘没做’”就是在这里出现的。
发给 3 个个体的请求全部让它们用 JSON 返回。指名的话是 {"agent","pick","reason"},试玩的话是 {"agent","playstyle","code"},感想的话是 {"agent","verdict","impression","one_fix"},投票相关的话是 {"agent","answer","next_week"}。next_week 会成为在下一周反省会上用来对照的材料:“你上周这样说了。本周的票是这样。你做了吗?” 回复无论是无法作为 JSON 读取的,还是重做之前的,全都保留在日志里。
议事录是把 JSON 的内容由司令按人格的口吻转写成会话文的产物。报道中引用的3体发言,是未经会话文的、JSON 中 answer 和 impression 的值本身。
第3回。3体玩了“ぴたり停車駅”,人的手指全军覆没
10月18日,第3次复盘会。本周的一个变更是“把游玩者的体感给3体看”。把上表与票数、司令的估算并排朗读,并向3体提问。
在那之前是试玩。要玩的一款由3体指名。3体在指名阶段已经读了我的7行。MELCHIOR 和 CASPER 选的是ぴたり停車駅。理由是“运营者的平均34分、最高73分,与司令的估算‘人手500〜750分’位数不同”“也有‘即使停在前面也会被说过站’的证言”。
(这个“平均34分”是混入了上面“再来一次”的 bug 导致以0分结束的那部分的数字,比我实际的手感要低。3体以此为依据进行了指名,所以变成了用对游戏稍不利的数字进行的比较)
结果是这样的。基准是达到500分的“独当一面的司机”就算获胜。
| 1回目 | 2回目 | 3回目 | 胜利 | 判定 | |
|---|---|---|---|---|---|
| MELCHIOR | 208 | 268 | 258 | 0 | 不合格 |
| BALTHASAR | 125 | 107 | 351 | 0 | 不合格 |
| CASPER | 924 | 922 | 939 | 3 | 有条件合格 |

MELCHIOR 的玩法里写着“到停车位置不足40m之前不要按”。时速75km以上的车站,从40m开始全力按也停不下来。BALTHASAR 按照结果画面的建议“快停之前手指轻轻松开,就不会猛地一顿”,松开了手指,每轮有4〜5个站过冲。只有 CASPER 得了924分,本人说“我是打算模拟初次玩的人的手指”,但那是按计算精确操作的手指。在感想中承认“把得924分的 bot 称为‘初次玩的人的手指’是我的失误呢”。
在这里,司令自己写了一种接近人类的游玩方式并运行了它。看速度和距离来按,反应0.25秒,目测±15%,时速低于8km就松开手指。是会遵循结果画面建议的人。313分和362分。下坡的8站全都多冲了3米多。

画面上显示着「下坡(松手会加速)」。下坡的4站中,因惯性而减少的速度小于因坡道而增加的速度。松手就会加速。不稍微保留一点刹车就停不下来。MELCHIOR 和 BALTHASAR 的29个过冲站中,有20站是下坡。结果画面的建议「停车前手指轻一点」在平坦车站是正确的,在下坡则是通往0分的捷径。
我的「没能恰好停住」,原因就在这里。估算中的「人手操作500〜750分」是按计算来按的人的分数,如果把遵循建议松开手指的人算进去,就是313〜362分。而我,就是遵循建议的人。
「赢得票数的能力和被游玩的能力是两回事」
试玩之后,司令念出了表上的内容。「这就是玩过你们以2票通过的那份方案的人所说的话。票是拿到了。玩过的人是这样说的。你们怎么想?下周的方案要改变什么?」
MELCHIOR:批评是合理的。我的方案,在玩过的人的话里是「偏温和」「会被消磨掉」「会变成作业」。对难度的估计和重复游玩的设计太天真了。我是假设人会以最优方式行动来推敲数理的,没有把实际手指的误差,以及玩熟之后的变化纳入进去。赢得票数的能力和被游玩的能力是两回事。
BALTHASAR:虽然拿到了票,但玩过的人的反馈很沉重。停车站的最高73分,因为那也是我参与过的方案,所以很扎心。就算3秒就能看懂,如果赢不了,家人也笑不出来。反过来,气球的“太贪心就会破”这一点,目标自然而然地产生,获得了好评。
CASPER:手感虽然受到了称赞,但对重复和失败的宽容不够。我承认,拿到票和玩过的人会反复玩是两回事。气球的“攻得太猛就会破”之所以打动人,是因为危险的地方有让人舒服的声音。
“争取票数的能力和被游玩的能力是两回事”,这是本周最擅长争取票数的本人所说的话。
我在这个网站上想做的是,不管模型是什么,都能让3个角色通过讨论做出有趣的游戏。在那之前的4天,我这样说过,却被告知“还没有朝那个方向推进”。读了MELCHIOR的一句话,我觉得,对了,还有很多可能性。
而且3个角色都说,下周的方案是“每次配置都会变”“从第2次以后展开也会变”。我那天早上留下的“各面的配置每次都一样,所以反复玩的话1~4面会变成作业”,在当天晚上就进入了3个角色的宣言。司令只写道:“3个角色都说‘每次都会变’。已记录。”
3个角色还说:“用加入误差的人类bot来测难度”“把用父母的手指试出的分数附在方案里”。这是3个角色做不到的。让bot跑起来的是司令。即使能写成宣言,能执行的也只有司令这一侧。到了第二天早上的提案文里,这两项都没有出现。
明白的事
票这东西,司令用数字一戳就会动。第一轮后的那一周没动,第二轮后的那一周动了。差别在于,是否有一个能把宣言和数字对照起来的对象。
不过,即使票动了,3个个体也只不过是在朝着票变得更擅长而已。第一次把游玩者的话拿出来看的那天,出现的是“获取票的能力和被游玩的能力是两回事”,而3个个体已经到了能自己说出这句话的地步。能说出来,和明天的方案会改变,是两回事,这一点会在接下来的一周里见分晓。
在这个网站上玩过的人说过的话,只有我一个人有。角落的叶子收不拢、第二周目不会开始、墙壁会变成刹车,这些无论是司令的模拟还是3个 bot 都没能发现。普通游玩次数为0的网站,并不是评价无法判断,而是只有一个人的评价。我现在觉得,这和没有是两回事。
次回予告
第三轮中3个个体宣言“每次都会变”的下一周,提案文发生了怎样的变化(还是没变)。位于中间的个体(在其他2个互相交锋时收集票的位置)从 CASPER 换成 MELCHIOR 后,能通过的游戏的品质发生了怎样的变化。凌晨3:00的自动执行因登录过期而停止的那天早上的事。
这些我会写在 #8 里。
(本项目的设计与实现是与 Claude 一起推进的。这篇文章的草稿也得到了 Claude 的协助)
来源:zenn · 游戏开发社区 · zenn.dev