30分钟实战:基于AgentScope与通义千问构建多智能体诗词游戏
诗词游戏一直是中华文化中的瑰宝,而飞花令作为经典玩法,考验着参与者的文学素养与反应速度。如今,借助大语言模型与多智能体框架,开发者可以快速搭建一个能与AI对弈的诗词游戏平台。本文将手把手带你用AgentScope框架和通义千问(qwen-max)模型,在半小时内完成一个可运行的多智能体飞花令系统。
1. 环境准备与基础配置
在开始前,我们需要准备好开发环境。推荐使用Python 3.8或以上版本,并创建一个干净的虚拟环境:
python -m venv poetry-env source poetry-env/bin/activate # Linux/Mac # poetry-env\Scripts\activate # Windows安装AgentScope框架及其依赖:
pip install agentscope dashscope注意:如果遇到依赖冲突问题,可以尝试先卸载已有版本再重新安装,或者使用源码安装方式。
接下来需要获取阿里云DashScope的API Key:
- 登录阿里云官网并进入DashScope控制台
- 创建API Key并妥善保存
- 将API Key设置为环境变量或在代码中配置
2. 模型与智能体配置详解
AgentScope的核心是通过配置文件定义模型和智能体行为。我们创建两个关键配置文件:
model_config.json- 定义底层大模型配置:
[ { "model_type": "dashscope_chat", "config_name": "qwen", "model_name": "qwen-max", "api_key": "your_api_key_here", "generate_args": { "temperature": 0.5, "top_p": 0.8 } } ]agent_configs.json- 定义三个游戏角色:
[ { "class": "DialogAgent", "args": { "name": "主持人", "sys_prompt": "你是一位飞花令游戏主持人,每次从'风花雪月'中随机选一个字作为题目。只需说出这个字,不要说其他内容。", "model_config_name": "qwen", "use_memory": true } }, { "class": "DialogAgent", "args": { "name": "裁判", "sys_prompt": "你是飞花令裁判,根据以下规则判断玩家回答:1)必须是古诗词 2)包含关键字 3)不与之前重复。初始分5分,正确+1分,错误-1分。10分获胜,0分失败。每次给出具体判断依据。", "model_config_name": "qwen", "use_memory": true } }, { "class": "DialogAgent", "args": { "name": "对手", "sys_prompt": "你是飞花令AI对手,根据主持人给出的关键字,说出一句包含该字的古诗词,且不与之前重复。只需说出诗句。", "model_config_name": "qwen", "use_memory": true } } ]3. 核心游戏逻辑实现
创建game_logic.py实现多智能体协作:
import agentscope from agentscope.message import Msg def initialize_agents(): """初始化所有智能体""" return agentscope.init( model_configs="./model_config.json", agent_configs="./agent_configs.json" ) def play_game(): """运行飞花令游戏主循环""" agents = initialize_agents() host, judge, opponent = agents # 游戏开始 keyword = host(Msg("system", "开始游戏")).content print(f"【主持人】本轮关键字:{keyword}") score = 5 used_poems = [] while 0 < score < 10: # 玩家输入 player_poem = input("你的诗句:") # 裁判判断 judge_msg = f"关键字:{keyword},诗句:{player_poem}" result = judge(Msg("player", judge_msg)).content print(f"【裁判】{result}") # 更新分数和记录 if "正确" in result: score += 1 used_poems.append(player_poem) else: score -= 1 # AI对手回合 if 0 < score < 10: ai_poem = opponent(Msg("host", keyword)).content print(f"【对手】{ai_poem}") used_poems.append(ai_poem) print(f"游戏结束!最终得分:{score}") if __name__ == "__main__": play_game()4. 进阶优化与错误处理
在实际运行中,可能会遇到一些常见问题:
问题1:API调用限制
- 解决方案:添加请求间隔和重试机制
import time from tenacity import retry, stop_after_attempt, wait_fixed @retry(stop=stop_after_attempt(3), wait=wait_fixed(1)) def safe_agent_call(agent, message): return agent(message)问题2:诗句重复检测不准确
- 优化方案:在裁判Agent的sys_prompt中添加更严格的检测指令:
你需要特别注意诗句是否与以下记录重复:[{used_poems}]。 即使字面不完全相同,但表达意思高度相似的也应视为重复。问题3:响应速度慢
- 优化配置:调整模型参数提升响应速度
{ "generate_args": { "temperature": 0.5, "max_tokens": 50, "enable_search": false } }可以进一步扩展游戏功能:
- 添加更多关键字类别
- 实现难度分级系统
- 加入语音交互功能
- 增加可视化游戏界面
5. 部署与分享
完成开发后,你可以通过以下方式分享你的作品:
本地分享:
python -m http.server 8000ModelScope部署:
- 准备requirements.txt文件
- 创建app.py入口文件
- 上传到ModelScope创空间
对于更正式的部署,可以考虑:
- 使用Docker容器化应用
- 配置Nginx反向代理
- 设置API调用监控
这个项目展示了如何利用现代AI技术复活传统文化游戏。通过AgentScope的多智能体协作能力,我们构建了一个完整的游戏生态,每个角色各司其职又相互配合。这种模式可以扩展到其他需要多角色协作的应用场景,如教育辅导、客服系统、游戏NPC互动等。