发布时间:2026/8/14 12:07:22
Agent-study项目教程(09):AI狼人杀竞技场(AgentScope) 一、理论部分1. 为什么要做“对抗式多智能体仿真”从协作走向博弈在多智能体体系中协作cooperation只是一个侧面另一类更接近真实世界的场景是对抗与博弈competition / game例如角色目标相互冲突狼人阵营 vs 好人阵营信息不对称狼人知道队友平民不知道身份需要在发言、投票、误导与推理之间做策略决策这类场景能够更直接检验 Agent 的能力边界推理一致性、策略性、欺骗与反欺骗、群体交互稳定性等。狼人杀是一种非常典型的“高交互、多轮次、强博弈”的多智能体仿真任务。2. AgentScope 的适配点面向仿真与高交互场景AgentScope阿里开源更偏向“仿真环境”与“多智能体交互”的工程表达适合构建多角色、多轮对话与复杂消息流转公聊/私聊等不同通信模式明确的流程编排黑夜 → 白天 → 投票相比只做“任务流水线”的多 Agent 框架AgentScope 更强调“环境与交互”更适合游戏、仿真与对抗类场景。3. 消息中心MsgHub公聊与私聊的关键机制狼人杀的核心之一是通信机制某些阶段只能私聊例如狼人夜间商量某些阶段是公聊白天发言。本项目使用MsgHub(participants...)创建消息频道只给狼人参与者创建 MsgHub → 私聊通道给全部玩家创建 MsgHub → 公聊通道在工程上MsgHub 解决的是“消息广播范围”问题使多智能体通信可控且可复现。4. 角色建模身份role目标goal驱动策略差异在对抗类游戏中每个 Agent 必须具备明确身份狼人/平民/预言家/女巫明确胜利条件好人要找狼、狼人要伪装并屠边等本项目通过为每个玩家构造不同的 system prompt将“身份与目标”显式写入从而驱动不同的行为倾向例如狼人需要伪装与带节奏神职需要在合适时机释放信息平民需要通过发言与投票推理身份二、实战部分1. 项目目标实现一个 6 人局的 AI 狼人杀竞技场演示版具备角色配置2 狼人、2 平民、1 预言家、1 女巫通信机制狼人夜间私聊 白天全员公聊投票环节每名存活玩家投票放逐一人简单解析投票结果流程编排第一夜私聊→ 第一天公聊→ 投票演示结束说明本项目是“框架能力演示”流程做了简化例如未实现完整夜间技能结算与胜负判定重点在于展示 AgentScope 的消息机制与多角色交互。2. 运行准备请确保本地已安装依赖并配置环境变量不要把真实密钥写进代码或公开仓库依赖安装示例pipinstall-rrequirements.txt若需要单独安装示例pipinstallagentscope环境变量示例DEEPSEEK_API_KEYDEEPSEEK_BASE_URL说明本项目使用OpenAIChatModel连接 DeepSeekOpenAI 兼容接口。运行时会输出玩家入场顺序、各阶段对话与投票结果。3. 项目代码核心实现本项目代码较长本文保留“玩家 Agent 定义、私聊/公聊 MsgHub、投票与结算”的关键实现。完整工程文件可在资料中获取。3.1 配置模型与初始化importosfromdotenvimportload_dotenvimportagentscopefromagentscope.modelimportOpenAIChatModelfromagentscope.formatterimportDeepSeekChatFormatter load_dotenv()modelOpenAIChatModel(model_namedeepseek-chat,api_keyos.getenv(DEEPSEEK_API_KEY),client_kwargs{base_url:https://api.deepseek.com},)formatterDeepSeekChatFormatter()agentscope.init()3.2 定义狼人杀玩家继承 ReActAgent 并注入角色目标importsysfromtypingimportList,Optional,Unionfromagentscope.agentimportReActAgentfromagentscope.messageimportMsgclassWerewolfPlayer(ReActAgent):def__init__(self,name:str,role:str,goal:str):sys_promptf你是一名【{role}】。 你的目标是{goal}当前状态存活。 请根据场上局势进行发言。发言要简短有力不要长篇大论。 如果你是狼人请伪装成好人。 如果你是神职请在合适的时机通过发言透露信息。 super().__init__(namename,sys_promptsys_prompt,modelmodel,formatterformatter)self.rolerole self.is_aliveTrueasyncdefreply(self,msg:Optional[Union[Msg,List[Msg]]]None)-Msg:ifnotself.is_alive:returnMsg(self.name,content已死亡无法发言,roleassistant)returnawaitsuper().reply(msgmsg)3.3 游戏流程私聊狼人→ 公聊全员→ 投票importrandomimportasynciofromagentscope.pipelineimportMsgHubfromagentscope.messageimportMsgasyncdefrun_game():players[]players.append(WerewolfPlayer(狼人A,狼人,杀死所有神职或平民伪装自己。))players.append(WerewolfPlayer(狼人B,狼人,配合队友混淆视听生存下去。))players.append(WerewolfPlayer(平民A,平民,找出狼人投票放逐他们。))players.append(WerewolfPlayer(平民B,平民,分析发言不要被误导。))players.append(WerewolfPlayer(预言家,预言家,每晚查验身份带领好人胜利。))players.append(WerewolfPlayer(女巫,女巫,合理使用药水保护好人。))random.shuffle(players)print(f 玩家入场顺序:{[p.nameforpinplayers]})# Night狼人私聊werewolves[pforpinplayersifp.role狼人]asyncwithMsgHub(participantswerewolves,announcementMsg(上帝,狼人请睁眼请商量今晚的战术。,rolesystem),):forwwinwerewolves:awaitww()# Day全员公聊asyncwithMsgHub(participantsplayers,announcementMsg(上帝,请大家轮流发言寻找狼人。,rolesystem),):forplayerinplayers:awaitplayer()# Voting简单投票与结算votes{}forplayerinplayers:ifplayer.is_alive:vote_promptMsg(上帝,f请投票。你觉得谁是狼人只回答一个名字例如{players[0].name}。,roleuser,)vote_msgawaitplayer(vote_prompt)contentvote_msg.content votedNoneforpinplayers:ifp.nameincontent:votedp.namebreakifvoted:votes[voted]votes.get(voted,0)1print(f{player.name}投给了{voted})else:print(f{player.name}弃票)ifvotes:eliminatedmax(votes,keyvotes.get)print(f\n 玩家 【{eliminated}】 被放逐)else:print(\n☮️ 无人被放逐。)if__name____main__:asyncio.run(run_game())4. 如何运行在项目根目录执行python stage_05_multi_agent/project_09_werewolf_arena/main.py5. 运行结果示例运行后将看到类似如下的日志示例实际发言内容会随模型生成而变化 AI 狼人杀竞技场 (AgentScope) 正在初始化... 玩家入场顺序: [平民B, 狼人A, 女巫, 预言家, 狼人B, 平民A] 天黑请闭眼... (Night Phase) 狼人私聊发言... ✅ 狼人确认战术完毕。 ☀️ 天亮了... (Day Phase) 昨晚是平安夜。现在开始轮流发言。 全员公聊发言... ️ 开始投票... (Voting Phase) 平民B 投给了 狼人A 狼人A 投给了 平民A 女巫 投给了 狼人A 预言家 投给了 狼人A 狼人B 投给了 预言家 平民A 投给了 狼人A 玩家 【狼人A】 被放逐 游戏演示结束 (Game Over Demo)6. 项目总结对抗式多智能体仿真狼人杀能够更直接测试 Agent 的推理一致性、策略性与群体交互稳定性是 Multi-Agent 进阶的重要方向。AgentScope 更偏“仿真与交互”的工程表达通过 MsgHub 可以自然实现私聊/公聊等通信机制并以流程编排组织游戏阶段。通过“身份 目标”的系统提示注入能够显著拉开不同角色的行为差异为后续加入更复杂的技能验人、用药、胜负判定、复盘打下基础。

相关新闻

2026/8/14 12:07:22

深度解读枣庄建设局网站功能与服务 如何通过枣庄建设局网站获取最新工程资讯

在这个数字化浪潮席卷每一个角落的时代,政府服务的透明度、高效性以及便捷性,已经成为衡量一座城市现代化治理能力的重要标尺。对于枣庄市的居民、企业家以及建筑行业的相关从业者来说,获取准确、及时的政策信息和工程动态,不再是需要四处打听、跑断腿的难题,而是指尖轻触…

2026/8/14 12:57:27

联盟链用链成本怎么算?主流计费模式盘点与选型参考

导语 企业上链时最常被问到的三个问题:用链到底要花多少钱?账单会不会随业务量失控?开源免费的链是不是真的省钱?现实中,联盟链的计费模式远没有"免费或按量"这么简单——按量计费、预付费套餐、封顶订阅、开…

2026/8/14 12:57:27

Git详细使用教程:从入门到实战

Git 是目前世界上最流行的分布式版本控制系统。无论是个人开发还是团队协作,掌握 Git 都是程序员的必备技能。本文将从安装配置、基础操作到分支管理与团队协作,系统地讲解 Git 的详细用法。 一、Git 简介与安装 Git 由 Linus Torvalds 于 2005 年创建&a…

2026/8/14 4:27:24

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/14 4:27:24

当 LLM 遇见大文档:主流开源项目如何处理上下文超限

从 Agentic Loop 到 Repo Map,七种策略与六类陷阱引言:128K vs 10MB 的硬冲突 2026 年的 LLM 上下文窗口已达到 128K ~ 1M token(≈ 0.5MB ~ 4MB 文本),但 LLM 想要处理的真实数据规模远远超过这个量级:真实…

2026/8/14 0:00:09

Flutter与OpenHarmony实现剧本杀组队表单开发实战

1. 项目概述在移动应用开发领域,跨平台框架Flutter因其高效的开发体验和出色的性能表现,已经成为众多开发者的首选。而OpenHarmony作为新兴的操作系统平台,其开放性和灵活性为开发者提供了全新的可能性。本文将聚焦于一个实际应用场景——剧本…

2026/8/14 0:00:09

VSCode高效Git管理:从入门到实战技巧

1. 为什么选择VSCode进行Git代码管理作为微软推出的轻量级代码编辑器,Visual Studio Code(简称VSCode)已经成为全球开发者使用率最高的编辑器之一。根据2023年Stack Overflow开发者调查,VSCode的市场占有率高达74.48%。它内置的Gi…

2026/8/14 4:27:24

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/14 4:27:24

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/14 4:27:24

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…