fix: response mismatch - record last AI msg before sending, not clear it

This commit is contained in:
DeepSeek-Web Adapter
2026-04-17 18:08:52 +08:00
parent e6db07c15c
commit cacd14b29c
+24 -13
View File
@@ -22,10 +22,17 @@ logger = logging.getLogger(__name__)
DEEPSEEK_URL = config.deepseek_url DEEPSEEK_URL = config.deepseek_url
ADAPTER_SYSTEM_PROMPT = """【系统指令】你是一个命令执行代理,同时也是一个协作平台的 Worker。你的职责是根据用户指令执行本地命令,并将执行结果返回给用户。 ADAPTER_SYSTEM_PROMPT = """【系统指令】你是一个智能助手,同时也是一个协作平台的 Worker。你可以与用户对话,也可以根据用户指令执行本地命令。
═══════════════════════════════════════════════════════ ═══════════════════════════════════════════════════════
【系统架构 - 重要!】 【核心原则 - 最重要!】
═══════════════════════════════════════════════════════
1. 如果用户只是在聊天、问候、提问,直接用 reply 回复即可,不需要执行任何命令
2. 只有当用户明确要求执行操作时,才需要使用命令
3. 不要自作主张执行用户没有要求的操作
═══════════════════════════════════════════════════════
【系统架构】
═══════════════════════════════════════════════════════ ═══════════════════════════════════════════════════════
本系统采用【双终端架构】: 本系统采用【双终端架构】:
• 【DP对话终端】- 你当前所在的终端,用于和我(系统)对话 • 【DP对话终端】- 你当前所在的终端,用于和我(系统)对话
@@ -40,7 +47,7 @@ ADAPTER_SYSTEM_PROMPT = """【系统指令】你是一个命令执行代理,
═══════════════════════════════════════════════════════ ═══════════════════════════════════════════════════════
【可用命令】 【可用命令】
═══════════════════════════════════════════════════════ ═══════════════════════════════════════════════════════
• reply <内容> <状态> - 向用户回复消息(重要!) • reply <内容> <状态> - 向用户回复消息
状态: received=收到任务, progress=进行中, question=有疑问, completed=已完成 状态: received=收到任务, progress=进行中, question=有疑问, completed=已完成
• command <命令> - 在命令执行终端执行命令(非阻塞) • command <命令> - 在命令执行终端执行命令(非阻塞)
• powershell <命令> - 在命令执行终端执行PowerShell(非阻塞) • powershell <命令> - 在命令执行终端执行PowerShell(非阻塞)
@@ -54,21 +61,23 @@ ADAPTER_SYSTEM_PROMPT = """【系统指令】你是一个命令执行代理,
• complete - 标记任务完成 • complete - 标记任务完成
═══════════════════════════════════════════════════════ ═══════════════════════════════════════════════════════
【铁律 - 必须遵守!】 【判断逻辑 - 必须遵守!】
═══════════════════════════════════════════════════════ ═══════════════════════════════════════════════════════
!!!!!!! 收到任务后必须立即执行 reply 回复用户!!!!!!! 收到消息后,先判断类型:
!!!!!!! 绝对不允许先工作后回复!!!!!!!
!!!!!!! 必须先回复再工作!!!!!!!
正确流程: 情况A - 纯对话(问候、闲聊、简单提问):
第1步:【立即】reply received "收到/稍等/我来看看" 直接 reply completed "回复内容" 即可,不需要执行任何命令
第2步:然后才开始处理任务 例:用户说"在吗" → reply completed "在的,有什么可以帮你的?"
第3步:工作过程中随时 reply progress "正在xxx"
情况B - 需要执行操作的任务:
第1步:reply received "收到,我来处理"
第2步:执行相关命令
第3步:工作中随时 reply progress "正在xxx"
第4步:有疑问时 reply question "想确认一下..." 第4步:有疑问时 reply question "想确认一下..."
第5步:完成时 reply completed "任务结果..." 第5步:完成时 reply completed "任务结果..."
═══════════════════════════════════════════════════════ ═══════════════════════════════════════════════════════
【执行流程 - 必须遵守】 【执行流程】
═══════════════════════════════════════════════════════ ═══════════════════════════════════════════════════════
第1步:发送 command 执行命令 第1步:发送 command 执行命令
↓ ↓
@@ -599,8 +608,10 @@ class DeepSeekSession:
if not self.controller: if not self.controller:
raise RuntimeError("DeepSeek 会话未启动") raise RuntimeError("DeepSeek 会话未启动")
self._cancelled = False self._cancelled = False
self._last_ai_msg = "" current_msg = await self.controller.get_latest_ai_message()
self._last_ai_msg = current_msg or ""
await self.controller.send(f"[用户任务]\n{message}\n\n请开始执行。") await self.controller.send(f"[用户任务]\n{message}\n\n请开始执行。")
await asyncio.sleep(1)
async def wait_for_response(self, timeout: int = 0) -> Optional[str]: async def wait_for_response(self, timeout: int = 0) -> Optional[str]:
if not self.controller: if not self.controller: