基于大语言模型的AI狼人杀游戏:双层角色扮演与模型竞技场设计
1. 项目概述当狼人杀遇上AI一场全新的推理盛宴毕业之后想凑齐8到12个人在周末的晚上围坐一圈点上外卖来一场酣畅淋漓的狼人杀几乎成了一种奢望。这个游戏的精髓在于社交但剥开这层外壳其内核——逻辑推理、语言博弈、察言观色——本身就充满了魅力。有没有一种可能让我们随时随地一个人也能体验到这种烧脑的乐趣这正是Wolfcha诞生的初衷。Wolfcha这个名字巧妙地融合了“狼人”Werewolf和中文文学形象“猹”既是对项目诞生于“Watcha ModelScope全球黑客松”的致敬也精准地捕捉了其核心玩法观看AI角色们上演一出好戏。在这个游戏里除了你之外的所有玩家——预言家、女巫、猎人、守卫、狼人——全部由人工智能驱动。你不再是唯一的玩家而是这场AI大乱斗的导演和首席观众。2. 核心设计思路双层AI角色扮演与模型竞技场2.1 双层AI角色扮演系统从“人设”到“角色扮演”传统的AI游戏角色往往只是根据游戏规则做出反应缺乏“人”的质感。Wolfcha的核心创新在于其双层AI角色扮演系统这得益于当前大语言模型LLM日益增长的上下文窗口和强大的指令遵循能力。第一层虚拟玩家的人格塑造在游戏开始前系统会为每个AI玩家生成一个独特的“虚拟人格”。这不仅仅是一个名字而是一个包含背景故事、性格特质如“多疑”、“冲动”、“冷静”、说话风格甚至口头禅的完整人设。例如一个AI玩家可能被设定为“一位喜欢引用莎士比亚的退休历史教授”而另一个则是“一位说话直来直去的程序员”。注意人设的生成质量直接影响到后续的游戏体验。过于平淡的人设会导致AI发言同质化而过于极端的人设如“完全沉默寡言”则可能破坏游戏平衡。在实际开发中我们通过预设一批经过精心调校的人格模板并结合随机要素来生成确保多样性与可玩性。第二层游戏内的角色扮演当游戏开始这位拥有独立人格的“虚拟玩家”会拿到一个狼人杀角色比如狼人。此时AI需要完成一次复杂的“嵌套扮演”它要以自己虚拟人格的思维方式去扮演游戏中的狼人角色并根据实时变化的游戏局势如夜间信息、白天发言、投票情况进行发言、推理、撒谎或归票。这个过程是实时生成的充满了不可预测性。那个“退休历史教授”扮演的狼人可能会在辩解时引经据典而“程序员”扮演的预言家发言可能格外逻辑严谨但缺乏感染力。这种深度角色扮演让每一局游戏都像是一部由AI即兴创作的微型戏剧。2.2 AI模型竞技场一场隐藏的“图灵测试”Wolfcha的另一个精妙之处在于它不仅仅是一个游戏更是一个AI模型的竞技场。我们接入了多个顶尖的大语言模型来驱动这些AI玩家。游戏结束后你可以清晰地看到每个角色背后是哪个模型在“操盘”。这相当于设置了一场持续的、多模型的“图灵测试”。你可以观察哪个模型逻辑最缜密能否从复杂的发言中找出狼人的逻辑漏洞哪个模型最会“装傻充愣”作为狼人时能否完美地隐藏自己发出像好人一样的言论哪个模型最具“人味”它的发言是否自然是否有情感波动是否会出现符合其人格但不符合绝对理性的有趣失误目前项目集成的模型包括DeepSeek V3.2、Qwen3-235B-A22B、Moonshot AI的Kimi K2、Google的Gemini 3 Flash以及字节跳动的Seed 1.8。让这些不同“血统”的AI同台竞技本身就是一件极具观赏性和研究价值的事情。3. 技术架构与核心实现解析3.1 现代化全栈技术选型Wolfcha采用了一套非常现代且高效的技术栈确保了开发的流畅性与最终产品的优秀体验前端框架Next.js 15 (App Router)。选择Next.js而非纯React主要看中其服务端渲染SSR和流式渲染能力。这对于需要快速加载、且内容动态的AI游戏页面至关重要。App Router的模式也让基于角色的路由管理如/game/[id]/day/game/[id]/night变得异常清晰。语言TypeScript。在涉及复杂游戏状态如玩家列表、角色技能、发言记录和AI API调用时TypeScript的强类型系统是避免低级错误、提升开发效率的生命线。样式Tailwind CSS 4。其效用优先Utility-First的理念非常适合快速构建定制化UI并且能轻松实现项目追求的复古视觉风格。通过精心挑选的复古色板如暗色调背景搭配柔和的琥珀色、墨绿色高亮营造出独特的沉浸感。状态管理Jotai。相比于Redux的繁重Jotai的原子化状态管理概念与React思维模式更契合。游戏中的状态如gamePhase游戏阶段、players玩家列表、currentSpeaker当前发言者都很适合用独立的atom来管理更新高效且精准。AI集成层ZenMux。这是项目的关键枢纽。直接对接多个LLM厂商的API非常繁琐而ZenMux提供了一个统一的接口。我们只需向ZenMux发送标准化的请求包含角色人设、游戏历史、当前回合指令它就能帮我们路由到配置好的不同模型如DeepSeek或Qwen并返回格式化的响应极大降低了集成复杂度。3.2 游戏状态机的设计与实现狼人杀是一个典型的状态机State Machine。Wolfcha的核心逻辑就是维护并驱动这个状态机。状态定义示例type GamePhase LOBBY | NIGHT_WEREWOLF | NIGHT_SEER | NIGHT_WITCH | ... | DAY_DISCUSSION | DAY_VOTING | GAME_END; type Player { id: string; name: string; avatar: string; // 使用DiceBear生成 role: WerewolfRole; aiModel: string; // 如 deepseek-v3.2 personality: PersonalityProfile; // 第一层人设 isAlive: boolean; // ... 其他状态 };状态流转控制游戏引擎一个Node.js后端服务或Next.js API Route负责按顺序推进状态。例如从NIGHT_WEREWOLF切换到NIGHT_SEER时引擎会检查狼人AI是否已完成行动通过调用ZenMux API获得选择目标。存储行动结果。广播状态更新给所有前端客户端使用WebSocket或Server-Sent Events实现实时性。向前端发送指令触发相应的视觉过渡动画如眨眼效果切换昼夜。3.3 AI交互与提示词工程这是项目的灵魂所在。如何让AI理解复杂的游戏规则并做出合理行为关键在于精心设计的系统提示词System Prompt。以狼人夜间行动提示词为例你正在玩一场狼人杀游戏。以下是你的身份和当前游戏状态 【你的身份】 - 你是狼人 - 你的人设[此处插入第一层人格如“你是一个谨慎的图书管理员习惯在发言前深思熟虑”] - 你的队友是[玩家X, 玩家Y]仅你知道 【游戏规则摘要】 - 每晚你们狼人可以共同商议并杀死一名玩家。 - 目标是消灭所有神职或所有平民。 【当前局势】 - 当前存活玩家[列表] - 昨天的发言摘要[摘要] - 昨天的投票结果[结果] - 目前场上的风向[分析] 【你的任务】 请以你的人设和狼人身份进行思考从存活玩家中选择一名最可能是神职或对狼人阵营威胁最大的玩家作为今晚的击杀目标。请只用JSON格式回复{action: kill, targetPlayerId: player_id, reasoning: 你的思考过程体现你的人设}。这个提示词结构清晰包含了身份、人设、规则、局势和明确的输出格式要求。输出格式锁定为JSON是至关重要的工程实践这保证了后端代码能稳定地解析AI的响应而不会因为AI的“自由发挥”导致程序出错。实操心得温度Temperature参数的微调。对于需要稳定执行行动的环节如夜间杀人我们会将温度参数调低如0.2让AI输出更确定、更符合规则。而对于白天发言环节温度可以适当调高如0.7-0.9以激发AI更多的创造性和符合人设的“表演”增加趣味性。4. 前端交互与沉浸式体验打造4.1 动态视觉反馈系统为了让AI的“表演”更生动我们在前端下了不少功夫口型同步动画当AI生成的文本被转为语音或模拟语音播放时我们根据语音的时间戳和文本音节动态控制角色头像的嘴部SVG路径产生简单的“说话”动画。这虽然不如真正的口型识别精确但极大地增强了角色的生动感。专属角色特效在夜间行动阶段当预言家查验身份或女巫使用毒药时对应的角色头像会触发独特的微光、涟漪等SVG动画强化技能施放的仪式感。昼夜切换的“眨眼”效果使用Framer Motion实现了一个全屏的渐变遮罩动画。从白天切换到黑夜时屏幕上下边缘像眼帘一样合拢再睁开时已是夜景模式过渡非常自然。4.2 实时聊天与历史记录游戏内的发言系统基于Tiptap编辑器构建这允许我们未来可以轻松地为其添加更丰富的文本格式如强调某句话、插入表情。所有AI和玩家的发言都以消息流的形式呈现并附上时间戳和说话者头像。关键实现点为了模拟真实桌游的发言顺序我们设计了一个“发言计时器”。当进入白天讨论环节系统会按照座位顺序或随机顺序自动激活当前发言者的麦克风图标并开始倒计时。在这段时间内驱动该玩家的AI模型需要生成发言内容并“说出”。这个过程是异步的前端会显示“正在思考...”的加载状态给玩家一种AI正在认真组织语言的真实感。5. 部署、配置与常见问题排查5.1 本地开发环境搭建详解如果你想在本地运行或贡献代码请遵循以下步骤获取代码与安装依赖git clone https://github.com/oil-oil/wolfcha.git cd wolfcha pnpm install # 强烈推荐使用pnpm依赖安装速度和磁盘空间占用优势明显环境变量配置 复制.env.example文件为.env.local。你需要申请以下关键服务的API密钥ZENMUX_API_KEY: 这是核心。前往ZenMux官网注册并获取密钥它将是调用所有AI模型的桥梁。DASHSCOPE_API_KEY(可选): 如果你希望单独使用阿里云的通义千问模型。 将密钥填入.env.local文件。务必确保该文件已被加入.gitignore切勿提交密钥启动开发服务器pnpm dev访问http://localhost:3000。首次加载时由于需要初始化AI模型连接可能会稍有延迟。5.2 核心配置项解析在项目配置中有几个文件至关重要src/lib/game-config.ts: 这里定义了游戏规则常量如角色数量配置 ({ werewolves: 2, seer: 1, witch: 1, ... })、每轮发言时长、技能冷却规则等。修改这里可以快速创建“快速局”或“标准局”。src/lib/ai-models.ts: 这里管理着可用的AI模型列表及其对应参数。你可以在这里添加新的模型供应商或调整现有模型的参数如maxTokens,temperature。export const availableModels [ { id: deepseek-v3.2, name: DeepSeek V3.2, provider: zenmux, config: { temperature: 0.7 } }, { id: qwen-max, name: Qwen3 Max, provider: dashscope, config: { temperature: 0.8 } }, // ... 添加新模型 ];src/data/personalities.ts: 这里是虚拟人格库。你可以在这里预定义大量有趣的人格模板游戏开始时AI会随机分配一个。5.3 常见问题与排查实录在开发和运行过程中你可能会遇到以下问题问题现象可能原因排查与解决思路游戏卡在“AI思考中...”1. AI API调用超时或失败。2. 网络连接问题。3. API密钥无效或额度用尽。1. 打开浏览器开发者工具F12的“网络Network”标签查看对/api/ai/action或类似端点的请求是否返回错误如429、500。2. 检查ZenMux控制台确认API密钥有效且有余量。3. 临时在配置中切换到一个更稳定或免费的模型如Qwen的某些免费额度型号进行测试。AI行为不符合预期或胡言乱语1. 系统提示词Prompt设计有歧义。2. 温度Temperature参数过高。3. 上下文历史过长导致模型混乱。1.核心检查点仔细审查发送给AI的完整Prompt确保角色、规则、任务指令清晰无矛盾。可以在后端日志中打印出完整的请求Payload进行调试。2. 对于关键行动如杀人、救人将temperature降至0.1-0.3。3. 实现“上下文窗口管理”只保留最近N轮的关键信息如投票结果、死亡情况在历史中过长的聊天记录可以总结摘要后再喂给AI。前端动画卡顿或不同步1. 大量状态更新导致React重复渲染。2. Framer Motion动画与AI响应线程冲突。1. 使用Jotai的select或React的useMemo、React.memo来优化组件避免不必要的渲染。2. 将AI响应处理与动画触发逻辑用setTimeout或requestAnimationFrame适当解耦确保主线程流畅。多人模式下状态不同步WebSocket连接断开或消息丢失。1. 实现健壮的重连机制和心跳检测。2. 在每次关键状态变更后广播全量的游戏状态快照给所有客户端客户端以服务端状态为“唯一真相源”避免状态分歧。踩坑记录API成本控制。让多个AI模型持续对话Token消耗非常快。我们采取了以下策略优化1) 对AI的发言长度做限制maxTokens2) 在非必要环节如等待玩家操作时暂停AI轮询3) 考虑使用更小、更经济的模型来处理一些简单的状态判断。务必在开发初期就设置好预算警报。6. 未来展望与扩展思路Wolfcha已经搭建了一个极具潜力的框架未来的扩展方向非常有趣自定义模型竞技允许玩家在创建房间时像选英雄一样为每个席位选择不同的AI模型例如“1号位用DeepSeek2号位用Kimi”进行真正的“模型对决”。赛后复盘与AI聊天游戏结束后不仅可以回看录像还可以“采访”任意一位AI玩家“你当时为什么投了A玩家”、“你作为狼人觉得哪一步最惊险”。这能产生大量有趣的、基于本局游戏内容的衍生对话。特殊技能与模组引入更多身份和技能如“丘比特”、“盗贼”等。甚至可以设计“时间回溯”技能让玩家有机会重演上一轮的发言观察AI的不同选择。人格市场与评级社区可以创作并分享高质量的“虚拟人格”配置文件。玩家可以为游戏中表现出色的AI人格点赞形成一个“最强狼人AI”排行榜。这个项目的魅力在于它既是一个好玩的游戏也是一个观察和研究AI行为的绝佳窗口。看着不同“性格”、不同“大脑”的AI在同一个规则下博弈、欺骗、合作其过程本身就充满了意想不到的乐趣和启发。它让我们以一种全新的方式重温了狼人杀这个经典游戏的核心魅力。