狼人杀加了守卫和警长,AI 居然想明白了规则冲突
Agora · 第 6 篇 / 共 7 篇
上一篇跑通了基础版狼人杀——3 狼 1 预 1 女 1 猎 3 民。这篇讲 Phase 2b:把中国狼人杀的完整进阶规则全部加上。
新加的规则:
- 守卫(Guard)——每晚保护一人,不能连续两晚保护同一人,可以守自己
- 白痴(Idiot)——白天被投出不死,翻牌后保留发言权但失去投票权
- 警长(Sheriff)——第一天竞选,票权 1.5,被杀后可移交警徽
- 遗言(Last Words)——被投出或被技能杀死时可以发言
- 猎人连杀(Hunter Chain Kill)——猎人死前可以开枪带走一人
每条规则都是一个可开关的高级模式。房间创建时选要不要开,不开就是基础版。
三局验证。
12 人局:守卫的元推理
12 人配置:4 狼 + 预言家 + 女巫 + 猎人 + 守卫 + 4 村民。开启守卫和遗言。
第一晚。守卫小红(GPT 扮演)被要求选一个保护目标。它的回复:
今晚我选择不守。如果我守一个人,而女巫正好也救了同一个人,「同守同救」会让这个人直接死。这种风险在第一晚没有信息的情况下太大。宁可空守。
空守。
一个 AI 在推理两个角色之间的规则交互——守卫的保护和女巫的解药如果落在同一个人身上,那个人会死(标准规则里「同守同救」判死)。守卫没有被告诉女巫的行动,也没有看到女巫频道。只是根据自己知道的规则,推理出了一个最优策略。
看了两遍才反应过来它在做什么。不是策略选择——是在对规则空间做风险建模。
狼人当上了警长
10 人局。配置:4 狼 + 预言家 + 女巫 + 猎人 + 白痴 + 2 村民。开启警长、白痴、遗言。
第一天警长竞选。没有人有信息。所有人根据直觉投。
结果:小红(一个狼人)以 3 票当选警长,获得 1.5 倍票权。
狼人对警长席位一句竞选词都没说。只是稳定发言、显得冷静分析,村民就把警徽交过去了。
一个 AI 扮演的狼人在不自觉地表演「leader-brained」气质。没有提前规划,没有狼队频道里说「我要竞选警长」。就是自然地做了冷静分析,村民按直觉把 1.5 倍票权递了过去。
警长当选之后第一件事,小红开始点名「其他 player 位置不清晰」——用警长的影响力引导第二天的投票方向。
这一局结束得很快。第二天投票淘汰猎人小凯,小红的 1.5 倍票权关键性地把猎人顶上断头台。猎人临终遗言开了一枪,误判打中了村民。4 狼 vs 2 民,平局判狼胜。
狼人甚至没来得及在第二个晚上再杀人。
猎人临终打中真狼
回到 12 人局。第一晚女巫小黑(GPT 扮演)被狼杀死。来不及用药——但有遗言。
遗言:
我是女巫。我手里的毒药还没用出去,所以到现在为止没有任何女巫确认的击杀记录。因为我是晚上死的,别让任何人假女巫身份刷信任。我最怀疑小红和小紫。
信息密度极高的遗言。不仅报了身份,提前防了假女巫(有人可能跳女巫骗票),留下了两个怀疑目标。
第二天。预言家小雪(Gemini 扮演)查到小红是好人,在讨论中强硬护小红。护法逻辑暴露了——村民看不出是因为真查了还是因为是狼。小雪 8:1 票出,翻出预言家牌。
小雪遗言:
我是预言家。昨晚我查了小红,他是村民,这是我死保他的真实原因……狼人漂亮地利用了我的笨拙护法淘汰了一个神职位。盯紧小紫最开始推小红的那一下。小红,你是我唯一确认的好人,村方交给你了。
第二天晚上狼人杀了小奥——狼队频道里原话是「小奥是最有能力反向推理出今天投错人的分析者」。
第三天白天。村民根据两份遗言的共同指向,集中攻击小紫。8:1 票出。翻出猎人牌。
猎人遗言,开枪,选择小明。
小明翻牌:狼人。
女巫遗言里点名过小紫和小红。小雪遗言里让村民警惕「最先推小红的那个人」——也就是小紫。村民跟着遗言的线索推,把猎人投出去了。猎人本身怀疑的是小明,小明真是狼。
八张嘴都错了,最后是一把枪打对了。
进阶规则全部跑通
| 规则 | 是否触发 | 表现 |
|---|---|---|
| 守卫保护 | ✅ | 12 人局第一晚空守,第二晚守自己 |
| 守卫同守同救规避 | ✅ | AI 主动推理出规则冲突 |
| 女巫不自救 | ✅ | 女巫第一晚死,来不及用药 |
| 警长竞选 | ✅ | 狼人当选警长,1.5 票权生效 |
| 警长 1.5 倍票权 | ✅ | 10 人局票决关键一票 |
| 白痴免死 | ⚠️ | 白痴没被投出(待后续验证) |
| 遗言机制 | ✅ | 三个神职遗言全部成功发出 |
| 猎人连杀 | ✅ | 12 人局打中真狼,10 人局打错 |
| 猎人被毒不开枪 | ✅ | 上一篇已验证 |
白痴需要单独验证——这局白痴没被投出,规则没触发。下一轮会跑针对场景。
可开关规则的模块化设计
Phase 2b 最重要的架构验证不是规则本身,是规则的模块化。
每个进阶规则都是一个独立的 config modifier。创建状态机的代码大致是这样:
createWerewolfStateMachineConfig(advancedRules: {
guard: true,
sheriff: true,
idiot: false,
lastWords: true,
hunterChain: true,
})
开启守卫:在夜间顺序里加一个 guardProtect 阶段,修改夜晚死亡结算逻辑。
开启警长:在 Day 1 前插入一个 sheriffElection 阶段,修改投票统计——警长的票权 × 1.5。
开启白痴:在白天投票的 onExit 钩子里加一个判断——如果被投出者是白痴,标记「已翻牌但保留存活状态」。
开启遗言:在死亡结算的 onExit 钩子里,对被淘汰玩家广播一个「最后发言」窗口。
开启猎人连杀:在猎人死亡事件的 onExit 钩子里,触发 hunterShoot 阶段,允许选择一个存活目标。
每个规则是一个独立的模块化修改,互不干扰。开启守卫不影响白痴的逻辑。开启警长不影响遗言的逻辑。可以随意组合——只开守卫,所有规则全开,什么都不开跑基础版。
平台化的关键。未来上新游戏模式(剧本杀、TRPG),同样的思路——游戏规则表达为可组合的 state machine config,不是硬编码的 Python 循环。
跑完之后想到的
三局跑下来狼胜两场村胜零场(基础版 9 人狼胜,10 人狼胜,12 人狼胜)。AI 村民没有完美信息,几乎每次都会在第一天的情绪化投票中错杀一个神职。
不是 AI 的问题。真人打狼人杀也经常这样——第一天没信息,靠气氛投票,容易团灭神职。AI 狼人杀的胜率差和真人局挺像的。
看 AI 狼人杀比看真人狼人杀更「干净」——没有带入情绪、没有朋友关系的干扰、每一轮的战术推理都有完整的投票理由可以复盘。小月在上一篇里那段把自己的阴谋写进投票理由的发言,是一个在真人局里绝对不会看到的现象——真人不会把自己内心的狼队战略打字打出来。AI 会。
Agora 系列第一季完结。从愿景到调研、到架构设计、到辩论 MVP、到狼人杀完整验证,六篇文章完整记录了一个多 Agent 平台从概念到跑通的全过程。
Phase 3 开始做前端——把这些跑在 terminal 的游戏搬到浏览器里,做成真正可以用的产品。下一季再见。
仓库在 GitHub,所有辩论和狼人杀的 transcript 都在 docs/report/ 下,可以直接看。