You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

217 lines
5.4 KiB
Markdown

6 months ago
# AgentScope 三国狼人杀案例
本目录包含第六章 AgentScope 框架的完整实战案例,展示了如何使用 AgentScope 构建一个融合中国古典文化元素的多智能体在线游戏。
## 📁 文件说明
- `main_cn.py` - 主要游戏逻辑和控制器
- `prompt_cn.py` - 中文提示词管理
- `game_roles.py` - 游戏角色定义和配置
- `structured_output_cn.py` - 结构化输出模型定义
- `utils_cn.py` - 游戏工具函数和辅助方法
- `README.md` - 本说明文档
## 🎮 案例特点
- **消息驱动架构**:展示 AgentScope 的核心消息传递机制
- **并发协作**:演示多智能体同时在线的实时交互
- **角色扮演**:每个智能体具备双重身份(游戏角色+三国人物)
- **结构化输出**:通过 Pydantic 模型约束智能体行为
- **容错机制**:单个智能体异常不影响整体游戏流程
## 🛠️ 环境准备
### 1. 安装依赖
```bash
pip install agentscope
pip install dashscope
pip install pydantic
```
### 2. 配置环境变量
设置阿里云 DashScope API Key
```bash
# Linux/Mac
export DASHSCOPE_API_KEY="your-api-key-here"
# Windows PowerShell
$env:DASHSCOPE_API_KEY="your-api-key-here"
# Windows CMD
set DASHSCOPE_API_KEY=your-api-key-here
```
获取 API Keyhttps://dashscope.console.aliyun.com/apiKey
### 3. 运行游戏
```bash
python main_cn.py
```
## 🎭 游戏角色说明
### 游戏角色
- **狼人**:夜晚击杀好人,白天隐藏身份
- **预言家**:每晚查验一名玩家身份
- **女巫**:拥有解药和毒药各一瓶
- **猎人**:被投票出局时可开枪带走一名玩家
- **村民**:通过推理和投票找出狼人
### 三国人物
- **刘备**:仁德宽厚,善于团结众人
- **关羽**:忠义刚烈,言辞直接
- **张飞**:性格豪爽,容易冲动
- **诸葛亮**:智慧超群,分析透彻
- **曹操**:雄才大略,善于权谋
- **司马懿**:深谋远虑,城府极深
## 🏗️ 架构设计
### 分层架构
```
游戏控制层 (ThreeKingdomsWerewolfGame)
├── 游戏状态管理
├── 流程控制
└── 胜负判定
智能体交互层 (MsgHub)
├── 消息路由
├── 并发处理
└── 状态同步
角色建模层 (DialogAgent)
├── 角色提示词
├── 结构化输出
└── 行为约束
```
### 核心组件
**1. 消息中心 (MsgHub)**
```python
async with MsgHub(
participants=self.werewolves,
enable_auto_broadcast=True
) as hub:
# 狼人夜晚讨论
for wolf in self.werewolves:
await wolf(structured_model=DiscussionModelCN)
```
**2. 结构化输出**
```python
class VoteModelCN(BaseModel):
vote: str = Field(description="投票目标玩家姓名")
reason: str = Field(description="投票理由")
confidence: int = Field(ge=1, le=10, description="信心程度")
```
**3. 并发管道**
```python
vote_msgs = await fanout_pipeline(
self.alive_players,
msg=vote_announcement,
structured_model=get_vote_model_cn(self.alive_players),
enable_gather=False,
)
```
## 🎯 游戏流程
### 夜晚阶段
1. **狼人讨论**:狼人通过 MsgHub 协商击杀目标
2. **预言家查验**:预言家选择查验对象
3. **女巫行动**:女巫决定是否使用解药/毒药
### 白天阶段
1. **死亡公布**:公布夜晚死亡玩家
2. **自由讨论**:所有存活玩家参与讨论
3. **投票淘汰**:投票选择淘汰对象
4. **猎人技能**:被淘汰的猎人可开枪
## 🔧 自定义配置
### 修改游戏人数
```python
# 在 main_cn.py 中修改
await game.setup_game(player_count=8) # 支持 6-12 人
```
### 添加新角色
```python
# 在 game_roles.py 中添加
ROLES["守护者"] = {
"description": "守护者",
"ability": "每晚可以守护一名玩家",
"team": "好人阵营"
}
```
### 自定义提示词
```python
# 在 prompt_cn.py 中修改
def get_role_prompt(role: str, character: str) -> str:
# 自定义角色提示词逻辑
pass
```
## 🐛 常见问题
### Q: 游戏无法启动?
A: 检查以下几点:
- 确认 DASHSCOPE_API_KEY 环境变量已设置
- 验证 API Key 是否有效
- 检查网络连接是否正常
### Q: 智能体输出格式错误?
A: 可能原因:
- 模型理解能力限制
- 提示词设计不够清晰
- 结构化输出约束过于复杂
### Q: 游戏流程卡住?
A: 建议:
- 检查 MsgHub 的消息传递
- 验证并发管道的执行状态
- 查看控制台错误日志
## 📚 技术亮点
### 1. 消息驱动架构
- 智能体间完全通过消息交互
- 支持异步并发处理
- 天然的分布式能力
### 2. 结构化输出约束
- 游戏规则转化为代码约束
- 提升系统稳定性和可预测性
- 便于调试和监控
### 3. 双重角色建模
- 游戏角色 + 三国人物的创新设计
- 展现不同人格的策略差异
- 增强游戏的趣味性和真实感
## 🚀 扩展方向
- **增加游戏模式**:支持更多狼人杀变体
- **优化 AI 策略**:提升智能体的游戏水平
- **可视化界面**:开发 Web 或桌面客户端
- **实时观战**:支持人类玩家观战和互动
- **数据分析**:统计游戏数据和智能体表现
## 🤝 贡献指南
欢迎提交 Issue 和 Pull Request
- 报告游戏 Bug 或异常
- 提出新功能建议
- 优化代码实现
- 完善文档说明
---
*本案例是 Hello-Agents 教程第六章的核心实战项目,展示了 AgentScope 框架在构建复杂多智能体应用方面的强大能力。*