07 — 单页应用 / MAFIA
AI 狼人杀 Mafia
Vue 3 · LLM · 9 人局 · 房间系统
9 个席位,1 个主持人,LLM 驱动的 AI 对手。能复盘你发言逻辑的那种。
01 — WHY
为什么做
市面上 9 人局的狼人杀工具大多是"主持人 + 玩家发言"两层,AI 通常只是"投个票"或"瞎聊"。想做一个能复盘发言逻辑、能持续扮演角色的对手,LLM 是唯一可行路径。
狼人杀的魅力在于信息博弈:每个人手里都有不对称信息,靠发言和投票做推理。我自己打了一年多,深知一个"会思考的 AI"和"会说话的 AI"在体验上差多远。
目标:让 AI 不仅能说话,还能基于自己"已知信息"做推理、被说服、撒谎、调整策略。
02 — WHAT
做了什么
9 人房间系统
创建房间、邀请码加入、主持人生成、角色分配,全部前端完成。
LLM 驱动的 AI 对手
每位 AI 玩家都独立调 LLM,输入当前发言历史 + 自己的角色信息,输出思考 + 投票。
角色扮演稳定性
通过 prompt + 上下文约束,让 AI 不会"串号"或"破角色"。
投票 / 发言节奏
白天讨论 + 投票 + 夜晚技能,按标准 9 人局规则跑完整流程。
复盘系统
每局结束展示所有玩家的发言 + 投票,标出可疑逻辑。
角色配置
标准 9 人局(狼人×3 / 预言家 / 女巫 / 猎人 / 守卫 / 村民×2),可扩展。
03 — HOW
技术上怎么做
| 模块 | 技术 | 作用 |
|---|---|---|
| 前端 | Vue 3 + Vite | 房间 UI、发言气泡、投票面板 |
| 状态管理 | Pinia | 房间状态、玩家列表、游戏阶段 |
| AI | MiniMax M3 + Prompt 模板 | 每位 AI 玩家独立推理 |
| 角色扮演 | System prompt + few-shot | 约束 AI 不串号、保持角色 |
| 投票逻辑 | 规则引擎 | 白天投票、夜晚技能结算 |
| 复盘 | 事件流 + 时间线 | 每局结束展示完整过程 |
04 — DIFFICULT
踩过的坑
- AI 串号:AI 玩家 A 知道的信息出现在 B 的发言里。最早是 prompt 没隔离角色,后来给每位 AI 单独构造上下文 + system prompt 锁死角色身份才解决。
- AI 太"诚实":狼人 AI 总是暴露队友,因为 prompt 没说"你是狼人阵营,目标是赢"。改成在 system prompt 里写明阵营 + 目标 + 可见信息边界。
- 投票逻辑和发言割裂:AI 发言和投票不一致(说 A 可疑但投 B)。改为同一轮 LLM 调用同时返回"思考 + 发言 + 投票",强制三段对齐。
- 9 人局长上下文:到第 5 轮发言历史就 4k+ token,模型开始遗忘早期信息。压缩策略:保留每轮"投票 + 关键发言 + 死亡信息",丢弃聊天细节。
05 — NEXT
后续方向
- 更长的局:从 9 人扩到 12 人局,验证 prompt 在更大角色池下是否稳定。
- AI 记忆:让 AI 玩家在跨局时记住"这个玩家上局总是先投谁",慢慢形成"对手画像"。
- 语音版:接入 TTS,让发言是真实的语音而不是文字气泡。
- 多人联机:现在是单机对战(玩家 1 vs AI×8),下一步想加 4 人 + 5 AI 的真人对战模式。