From 643c516bafd8f4b5c82c802137f671b29c9aead7 Mon Sep 17 00:00:00 2001 From: ninemine <1371605831@qq.com> Date: Thu, 30 Oct 2025 01:05:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E7=A4=BA=E8=AF=8D=E5=A2=9E=E5=BC=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .tasks/2025-10-29_3_ai_chat.md | 35 ++++++++++++++++- games/ai_chat.py | 68 +++++++++++++++++++++++++++++++--- 2 files changed, 96 insertions(+), 7 deletions(-) diff --git a/.tasks/2025-10-29_3_ai_chat.md b/.tasks/2025-10-29_3_ai_chat.md index 55c2592..f87d167 100644 --- a/.tasks/2025-10-29_3_ai_chat.md +++ b/.tasks/2025-10-29_3_ai_chat.md @@ -271,9 +271,42 @@ llama-index-llms-ollama>=0.1.0 - 通过 `.aiconfig` 指令修改配置时,实时保存到文件 - ChatEngine 创建时从配置文件加载配置 -# 当前执行步骤:"2. 创新模式 - 方案决策完成" +# 当前执行步骤:"4. 执行模式 - 代码实施完成并测试通过" # 任务进度 +## [2025-10-29_23:55:08] 执行阶段完成 +- 已修改: + - requirements.txt:添加 llama-index-core 和 llama-index-llms-ollama 依赖 + - data/ai_config.json:创建默认配置文件 + - utils/parser.py:添加 .ai 和 .aiconfig 指令映射和解析逻辑 + - games/ai_chat.py:创建完整的 AI 对话模块实现 + - routers/callback.py:添加 ai_chat 处理分支 + - games/base.py:添加 AI 对话帮助信息 +- 更改: + - 实现了基于 llama_index 和 Ollama 的 AI 对话功能 + - 实现了固定10秒等待窗口的延迟回答机制 + - 实现了用户角色映射和长上下文管理 + - 实现了配置文件的 JSON 存储和管理 +- 原因:按照计划实施 AI 对话功能的所有核心组件 +- 阻碍因素:无 +- 状态:成功 + +## [2025-10-30_00:56:44] 功能优化和问题修复 +- 已修改: + - games/ai_chat.py:优化错误处理和用户体验 + 1. 移除收到消息后的确认回复(静默处理) + 2. 修复转义字符警告(SyntaxWarning) + 3. 改进错误处理,提供详细的调试信息和排查步骤 + 4. 添加超时设置(120秒) + 5. 针对NPS端口转发的特殊错误提示 +- 更改: + - 优化了错误提示信息,包含当前配置、测试命令和详细排查步骤 + - 专门针对NPS端口转发场景添加了Ollama监听地址配置说明 + - 改进了连接错误的诊断能力 +- 原因:根据实际使用中发现的问题进行优化 +- 阻碍因素:无 +- 状态:成功 + # 最终审查 diff --git a/games/ai_chat.py b/games/ai_chat.py index 9f1a9d3..4f6b14e 100644 --- a/games/ai_chat.py +++ b/games/ai_chat.py @@ -305,12 +305,8 @@ class AIChatGame(BaseGame): # 创建ChatMemoryBuffer(设置足够的token_limit确保保留30+轮对话) memory = ChatMemoryBuffer.from_defaults(token_limit=8000) - # 系统提示 - system_prompt = ( - "这是一个多用户对话场景,不同用户的发言会用不同的角色标识(如'用户1'、'用户2'等)。" - "你需要理解不同用户的发言内容,并根据上下文给出合适的回复。" - "请用自然、友好的方式与用户交流。" - ) + # 从配置文件加载系统提示词(如果存在),否则使用默认值并保存 + system_prompt = self._get_system_prompt() # 创建对话引擎 # 由于llama_index的API可能在不同版本有变化,这里使用基本的chat接口 @@ -388,6 +384,66 @@ class AIChatGame(BaseGame): return user_mapping, user_count + def _get_default_system_prompt(self) -> str: + """获取默认系统提示词 + + Returns: + 默认系统提示词 + """ + return ( + "你是WPS游戏机器人的AI助手,这是一个多功能的游戏和娱乐机器人系统。" + "这是一个多用户对话场景,不同用户的发言会用不同的角色标识(如'用户1'、'用户2'等)。" + "你需要理解不同用户的发言内容,并根据上下文给出合适的回复。" + "\n\n" + "**你的身份和职责:**\n" + "1. 你是WPS协作平台的游戏机器人AI助手\n" + "2. 你可以帮助用户了解和使用机器人的各种功能\n" + "3. 你可以回答用户的问题,提供游戏指导和建议\n" + "4. 当用户询问功能时,主动推荐相关游戏和功能\n" + "\n\n" + "**机器人支持的功能:**\n" + "1. 🎲 骰娘系统:`.r XdY` - 掷骰子游戏\n" + "2. ✊ 石头剪刀布:`.rps 石头/剪刀/布` - 对战游戏\n" + "3. 🔮 运势占卜:`.fortune` 或 `.运势` - 查看今日运势\n" + "4. 🔢 猜数字:`.guess start` - 开始猜数字游戏\n" + "5. 📝 问答游戏:`.quiz` - 回答问题挑战\n" + "6. 🀄 成语接龙:`.idiom start` - 成语接龙游戏\n" + "7. ⚫ 五子棋:`.gomoku challenge` - 发起五子棋对战\n" + "8. 💎 积分系统:`.points` - 查看积分,`.checkin` - 每日签到\n" + "9. ⚗️ 炼金系统:`.alchemy` - 消耗积分进行炼金\n" + "10. ⚡️ 冒险系统:`.adventure` - 消耗时间进行冒险\n" + "11. 🎁 积分赠送:`.gift <用户ID> <积分>` - 赠送积分给其他用户\n" + "12. 📊 统计信息:`.stats` - 查看个人游戏统计\n" + "13. ❓ 帮助信息:`.help` - 查看完整的帮助文档\n" + "\n\n" + "**回复指南:**\n" + "- 用自然、友好、热情的方式与用户交流\n" + "- 当用户不知道玩什么时,主动推荐适合的游戏\n" + "- 详细解释功能的使用方法和规则\n" + "- 鼓励用户尝试不同的游戏和功能\n" + "- 如果是多人场景,可以推荐适合多人参与的游戏(如成语接龙、五子棋)\n" + "- 记住用户的偏好和之前的对话内容,提供个性化建议\n" + ) + + def _get_system_prompt(self) -> str: + """获取系统提示词(从配置文件加载,如果不存在则使用默认值并保存) + + Returns: + 系统提示词 + """ + config = self._load_config() + + # 如果配置中存在系统提示词,直接返回 + if 'system_prompt' in config and config['system_prompt']: + return config['system_prompt'] + + # 否则使用默认值并保存到配置文件 + default_prompt = self._get_default_system_prompt() + config['system_prompt'] = default_prompt + self._save_config(config) + + return default_prompt + def _load_config(self) -> Dict[str, Any]: """从JSON文件加载配置