news 2026/9/3 13:39:14

让 9 个 AI 自打一局狼人杀:AgentScope 多智能体协作案例实操

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
让 9 个 AI 自打一局狼人杀:AgentScope 多智能体协作案例实操

让 9 个 AI 自打一局狼人杀:AgentScope 多智能体协作案例实操

【免费下载链接】agentscopeBuild and run agents you can see, understand and trust.项目地址: https://gitcode.com/GitHub_Trending/ag/agentscope

如果让 9 个 AI 自己打一局狼人杀,会发生什么?没有人工裁判,也没有规则脚本硬控——每个玩家都是一个 ReActAgent,由 AgentScope 的多智能体协作机制接管夜间行动与白天辩论。这篇文章从一条启动命令讲起,拆到底层三块积木,看看一个 AI 狼人杀博弈是怎么落地的。

🎮 一条命令跑起 9 人狼人杀

先跑起来。设置好 DashScope 的 API 密钥后,只执行这一条:

python examples/game/werewolves/main.py

9 名 AI 玩家直接上桌:3 狼人、3 村民,外加预言家、女巫、猎人。整局游戏全靠自然语言推进——狼人在夜里密谋,村民在天亮后站队投票,你不需要手写任何一条规则分支。

改 main.py 里的model_name,就能在 Qwen、GPT 等主流大模型之间切换;中英文提示词和游戏存档也一并内置。下图是 AgentScope 多智能体控制台的协作现场,AI 智能体在同一会话里轮流发言、决策、行动:

角色分工:9 个 AI 玩家各自在做什么

狼人杀难在信息不对称,这个例子把 9 个角色拆成三条行动线:

  • 狼队(3 狼人):夜里在私密通道里轮流发言、投票,谈拢了就锁定击杀目标。
  • 神职(预言家、女巫、猎人):各自有技能触发条件——查验身份、救人或毒杀、阵亡反噬,用不用、用在谁身上,全由模型自己权衡。
  • 村民(3 人):没有技能,只有推理。白天发言和投票环节,他们得从别人的话里找出破绽。

这个设计的妙处在于:规则代码里没有一行if 是狼人 then …。每个角色的行为,是模型推理加系统提示词涌现出来的。

🧱 三块底层积木:多智能体协作机制藏在哪

ReActAgent:每个角色的决策大脑

它解决的坑:怎么让模型输出"结构化决策",而不是一通自由发挥。

每个角色就是一个 ReActAgent:思考、发言、释放技能。技能释放靠结构化输出约束——比如"今晚狼队刀谁",必须以可被代码直接读取的字段返回,而不是埋在一段话里。狼队的深夜密谋就是一个轮询循环:

async with MsgHub(players.werewolves, enable_auto_broadcast=True) as werewolves_hub: for _ in range(MAX_DISCUSSION_ROUND * n_werewolves + 1): res = await players.werewolves[i % n_werewolves] if res.metadata.get("reach_agreement"): break

每轮狼王发一次言,一旦reach_agreement为真就散会定刀。实现可以看 ReActAgent 源码。

MsgHub:带密道的群聊广播站

它解决的坑:怎么让"一部分人听见,另一部分人听不见"。

MsgHub 用发布-订阅模式做多智能体通信:把几个智能体丢进同一个 hub,消息就只在圈内流转。狼队讨论用 3 人密道;天亮了,再把所有存活玩家拉进公共频道广播:

async with MsgHub(players.current_alive, name="alive_players") as hub: await hub.broadcast(await moderator(Prompts.to_all_night))

一行上下文,权限就划清了。下图是 AgentScope 控制台里智能体执行动作的演示,多智能体通信机制驱动的就是这类连续行动:

JSONSession:一键存档与读档

它解决的坑:一局打到一半崩了,或者你想明天接着玩。

9 人局动辄几十轮对话,JSONSession 把全体玩家的状态序列化到本地,下次启动从存档续上:

session = JSONSession(save_dir="./checkpoints") await session.load_session_state(session_id="players_checkpoint", **{p.name: p for p in players})

实现见 JSONSession 源码。整局的夜晚/白天回合机,都写在 狼人杀主逻辑 里。

🎯 三个可玩性改造:每次只改一行

1. 把 AI 玩家换成真人。在 main.py 里把某个 ReActAgent 换成 UserAgent,就变成人机混战:

from agentscope.agent import UserAgent players[0] = UserAgent(name="HumanPlayer")

2. 切换游戏语言。在 game.py 改一行 import,整局台词从中文切到英文:from prompt import ChinesePrompts as PromptsEnglishPrompts二选一。

3. 调整角色策略。main.py 第 40–69 行的系统提示词定义了每个角色的发言风格和决策倾向。把狼人写得更激进、村民写得更保守,对局气质立刻不同。所有角色提示词集中在 prompt.py。

延伸阅读:只留两个入口

  • examples/game/werewolves/game.py:读一遍夜晚/白天回合机,整个 AgentScope 多智能体案例就通了。
  • src/agentscope/agent/:从智能体基类到结构化输出,三块积木对应的 ReActAgent 实战源码。

"智能体 + 通信中枢 + 存档会话"这套组合拳,拿去改提示词就能搬进拍卖、辩论或项目模拟。想动手的话,下一步就一条命令:

git clone https://gitcode.com/GitHub_Trending/ag/agentscope

【免费下载链接】agentscopeBuild and run agents you can see, understand and trust.项目地址: https://gitcode.com/GitHub_Trending/ag/agentscope

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 13:35:00

3步把ESP32变成AI语音助手:xiaozhi-esp32上手指南

3步把ESP32变成AI语音助手:xiaozhi-esp32上手指南 【免费下载链接】xiaozhi-esp32 An MCP-based chatbot | 一个基于MCP的聊天机器人 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaozhi-esp32 面包板通电,对着麦克风喊一声"你好小…

作者头像 李华
网站建设 2026/9/3 13:33:00

混凝土骨料粒度图像识别:面向国标级配的工业细粒度分类数据集

简介:本资源是面向计算机视觉初学者与工程实践者的混凝土骨料粒度图像分类专用数据集,适用于图像分类模型训练(如YOLOv5分类模式)、算法验证及教学演示等场景。数据集严格划分为train(600张)与val&#xff…

作者头像 李华
网站建设 2026/9/3 13:32:11

基于SSM框架的自习室座位管理系统设计与实现详解

简介:本资源是一套完整的基于SSM框架的自习室座位管理系统毕业设计项目,面向计算机专业本科生、Java Web初学者及课程设计/期末大作业实践者,旨在解决高校自习室座位预约混乱、资源分配不均、使用状态不透明等实际管理痛点。压缩包共400个文件…

作者头像 李华
网站建设 2026/9/3 13:31:41

C# OpenCvSharp实现可解释素描生成:从像素到结构线稿

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/3 13:30:58

DeepSeek API涨价应对指南:从成本优化到本地部署的完整方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/3 13:30:11

学生智能手表选购指南:从核心功能到实测避坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华