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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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 框架在构建复杂多智能体应用方面的强大能力。*