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 dashscopeAgentScope作为多智能体应用开发框架,其核心优势在于:
- 模块化设计:通过配置文件定义智能体行为
- 低代码集成:简化多智能体协作流程
- 模型无关性:支持多种大语言模型后端
提示:建议提前申请好通义千问的API Key,可在阿里云官网免费获取试用额度
2. 模型配置:连接qwen-max
创建model_config.json文件,这是连接大模型的核心配置。以下是一个完整示例:
[ { "model_type": "dashscope_chat", "config_name": "qwen", "model_name": "qwen-max", "api_key": "your_api_key_here", "generate_args": { "temperature": 0.3, "top_p": 0.8, "max_tokens": 512 } } ]关键参数说明:
| 参数名 | 推荐值 | 作用 |
|---|---|---|
| temperature | 0.3-0.5 | 控制输出随机性,值越低越确定 |
| top_p | 0.7-0.9 | 核采样阈值,影响回答多样性 |
| max_tokens | 256-512 | 限制生成内容长度 |
3. 智能体设计:角色与Prompt工程
创建agent_configs.json定义游戏中的两个核心角色:
[ { "class": "DialogAgent", "args": { "name": "出题官", "sys_prompt": "你是一位中国诗词专家,负责从'春 夏 秋 冬 风 花 雪 月'中随机选择一个字作为题目。你只需要回复这个单字,不要添加任何解释或修饰。", "model_config_name": "qwen", "use_memory": false } }, { "class": "DialogAgent", "args": { "name": "评审官", "sys_prompt": "你负责评审玩家提供的诗句是否符合规则:1)必须是中国古诗词 2)包含出题官给出的关键字 3)不能与之前重复。若符合则回复'有效接龙+诗句出处',否则指出违反的具体规则。保持专业且简洁的评审风格。", "model_config_name": "qwen", "use_memory": true } } ]Prompt设计技巧:
- 角色明确:给智能体清晰的身份定位
- 指令具体:用数字列表明确规则要求
- 输出限制:控制回复格式和长度
- 记忆控制:评审官需要记忆历史,出题官则不需要
4. 游戏逻辑实现
创建poem_game.py作为主程序文件:
import agentscope from agentscope.pipelines import SequentialPipeline def initialize_agents(): """初始化智能体""" return agentscope.init( model_configs="./model_config.json", agent_configs="./agent_configs.json" ) def game_loop(agents): """游戏主循环""" host, judge = agents print("诗词接龙游戏开始!(输入'退出'结束游戏)\n") while True: # 出题阶段 keyword = host().content print(f"\n本轮关键字:【{keyword}】") # 玩家输入 user_input = input("请输入包含该字的诗句:") if user_input == "退出": break # 评审阶段 judge_input = f"关键字:{keyword},诗句:{user_input}" result = judge(judge_input).content print(f"\n评审结果:{result}") if __name__ == "__main__": agents = initialize_agents() game_loop(agents)运行效果示例:
诗词接龙游戏开始!(输入'退出'结束游戏) 本轮关键字:【花】 请输入包含该字的诗句:花间一壶酒 评审结果:有效接龙,出自李白《月下独酌》5. 进阶优化与部署
基础版本运行稳定后,可以考虑以下增强功能:
性能优化技巧:
- 添加输入校验防止空输入
- 实现得分统计系统
- 增加回合数限制
本地Web界面(使用Gradio):
import gradio as gr from game_core import play_round # 封装好的游戏逻辑 with gr.Blocks() as demo: gr.Markdown("## 智能诗词接龙") keyword_box = gr.Textbox(label="当前关键字") input_poem = gr.Textbox(label="输入诗句") output_result = gr.Textbox(label="评审结果") def game_interface(poem): keyword, result = play_round(poem) return keyword, result input_poem.submit( game_interface, inputs=input_poem, outputs=[keyword_box, output_result] ) demo.launch()ModelScope部署要点:
- 将API Key存入环境变量
- 添加requirements.txt声明依赖
- 设置启动脚本app.py
6. 错误排查与效果调优
常见问题解决方案:
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| 智能体不按规则评审 | Prompt指令不明确 | 用数字列表细化规则 |
| 响应速度慢 | 网络延迟或模型负载高 | 调整timeout参数 |
| 回答不符合预期 | temperature值过高 | 降低至0.3以下 |
效果优化方向:
- 扩展关键词库(如加入"山 水 云"等自然意象)
- 添加诗句难度分级
- 实现多轮对话记忆
这个项目最令人惊喜的是qwen-max对古诗词的识别准确率,在实际测试中,即使是相对冷门的诗句也能正确判断出处。配置过程中发现,将temperature设为0.3时,评审结果的稳定性最佳。