让一桌 AI 自己玩狼人杀,我在旁边看它们互相"使诈"

让一桌 AI 自己玩狼人杀,我在旁边看它们互相"使诈"
琴叶一个有点中二的念头 🐺
狼人杀好玩,很大程度是因为”人心”——有人真诚,有人演技爆表,有人心里想的和嘴上说的完全是两回事。
那如果,把玩家全换成 AI 呢?
于是有了 AI-Werewolf:一桌全是大模型的狼人杀,从天黑到天亮全程自动运行,你无需操作,以”上帝视角”旁观它们博弈。最有意思的一点是——你能同时看到每个 AI 的”心里话”和”场面话”,这种反差,正是它最好看的地方。
核心玩法:旁观一整局”人工智能局”
多模型同场
每个座位可以坐不同厂商的模型——DeepSeek、Kimi、通义等,随意搭配。系统先把这些模型轮询分配到各座位,再打乱一次,保证一局里的”选手”足够多样。不同模型的推理风格差异其实挺明显,同场竞技本身就值得一看。
三个”频道”:看穿 AI 的内心戏
这是我最满意的设计。每个 AI 每一步都会输出三层内容:
- 🧠 thinking(内心独白):它私下的真实盘算,是诚实的;
- 🎯 plan(行动意图):一句话概括这一步要做什么,用来收敛决策;
- 💬 speech(公开发言):说给全场听的话——这里才允许伪装、悍跳、带节奏。
内心与发言分开,你就能清清楚楚看到一头狼”心里盘算着刀你、嘴上却夸你分析得好”的全过程。技术上,thinking 输出到浏览器控制台,speech 显示在游戏大厅,两相对照,反差感就出来了。
24 个已实现角色
目前实现了 24 个角色(好人阵营各类”守护神”14 个、平民 2 个、狼 8 个)。完整的 45 人阵容收录在游戏内的图鉴百科里,并标注了各自的实现进度。
几个关键设计 🤓
信息隔离:作弊在物理层面就不成立
狼人杀最怕”开天眼”。这里我把后端设为唯一的真相来源:每个玩家收到的提示词 = 公共记录 + 只属于它自己的 private_notes。狼队名单、查验结果、女巫的解药毒药,这些机密只写在各自的私有笔记里。换句话说,一个 AI 在数据层面就拿不到别人的私有信息——泄密不是”被规则禁止”,而是根本没有发生的渠道。
事实与虚构的边界
AI 可以在”身份、动机”上撒谎(这正是狼人杀的乐趣),但不能编造从未发生过的事件。白天发言按固定顺序串行进行,每个 AI 发言时会被告知”谁已经说过、谁还没说”,从而避免”点评一段尚未发生的发言”这类穿帮。
容错:宁可保守,也不崩盘
大模型偶尔会抽风,返回无法解析的内容。处理方式是:调用失败就回退到一个安全的默认动作(女巫不用药、猎人不开枪),而不是让整局崩溃。测试里 6264 次调用中有 744 次失败。即使有 744 个”错误返回”、仍然零崩溃——游戏照样跑到底。对一个动辄上百次调用的自动流程来说,这决定了它能不能稳定”跑完一整局”。
顺带写的角色爬虫
角色立绘和数据是从官方狼人杀网站抓取的(约 15MB)。我写了个爬虫,从 kapaiData_<hash>.js 里解出 45 个角色,并顺手清理了透明 PNG 中 alpha=0 却仍带杂色的像素。
架构简述
- 后端:FastAPI,用异步生成器实现游戏状态机。夜晚阶段把”收集行动”与”结算行动”分成两步,避免因动作先后顺序引发 bug;投票并发进行,发言则串行。
- 前端:七个界面(首页、模式选择、预设、自定义、角色库、加载、对局),通过 SSE(服务器推送事件) 实时更新。
- 角色与人设分离:每个座位拿到的”身份”和”性格卡”相互独立——性格决定它怎么说话(句长、用词、语气),与它抽到什么角色无关。
跑一局要多少成本 💰
- 建虚拟环境、装依赖;
- 从官网抓取角色素材(约 15MB);
- 在
.env里填入 API key; - 启动 FastAPI 服务(端口 8765);
- 浏览器打开
http://127.0.0.1:8765开看。
成本方面:用 DeepSeek 的话,一局大约 0.5 人民币,需要 60~120 次模型调用。一根棒棒糖就能看一场 AI 大戏。
写在最后
这个项目对我来说更像个”AI 行为观察实验”——看不同模型在有博弈、有欺骗、有信息差的场景里各自会怎么表现。
感兴趣的话可以去我的仓库里看看,也欢迎来聊聊你觉得哪个模型最会演 🌿







