From 25a8ea5aa484d3881a2a1085966f2b4d072f5251 Mon Sep 17 00:00:00 2001 From: Roe-xin Date: Thu, 25 Dec 2025 15:13:15 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E8=AE=B0=E5=BD=95=E4=BC=9A=E8=AF=9D?= =?UTF-8?q?=EF=BC=8C=E6=8C=89=E9=A1=BA=E5=BA=8F=E8=AE=B0=E5=BD=95AI?= =?UTF-8?q?=E5=92=8C=E7=94=A8=E6=88=B7=E7=9A=84=E4=BC=9A=E8=AF=9D=20-=20?= =?UTF-8?q?=E5=8C=85=E5=90=AB=E5=B7=A5=E5=85=B7=E8=B0=83=E7=94=A8=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/chatHistoryManager.ts | 18 ++++++++++++++++++ src/utils/messageHandler.ts | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/src/utils/chatHistoryManager.ts b/src/utils/chatHistoryManager.ts index 06f1849..f6ff2d1 100644 --- a/src/utils/chatHistoryManager.ts +++ b/src/utils/chatHistoryManager.ts @@ -333,6 +333,24 @@ export class ChatHistoryManager { await this.saveConversation(messages); } + /** + * 添加工具执行结果消息 + */ + public async addToolExecutionResult(id: string, toolName: string, result: string): Promise { + await this.ensureCurrentTask(); + const messages = await this.loadConversation(); + + const toolResultMessage: ToolExecutionResultMessage = { + type: MessageType.TOOL_EXECUTION_RESULT, + id, + toolName, + text: result + }; + + messages.push(toolResultMessage); + await this.saveConversation(messages); + } + /** * 记录对话轮次元数据 */ diff --git a/src/utils/messageHandler.ts b/src/utils/messageHandler.ts index b6cdb3f..70599cb 100644 --- a/src/utils/messageHandler.ts +++ b/src/utils/messageHandler.ts @@ -170,6 +170,39 @@ async function handleUserMessageWithBackend( }); console.log('[MessageHandler] postMessage 返回值:', result); + // 按照 segments 顺序保存AI响应到历史记录 + try { + // 遍历 segments,按顺序保存每个段落 + for (const segment of segments) { + if (segment.type === 'text' && segment.content) { + // 保存文本消息 + await historyManager.addAiMessage(segment.content); + } else if (segment.type === 'tool') { + // 保存工具调用请求(作为AI消息的一部分) + const toolRequest = { + id: segment.askId || `tool_${Date.now()}`, + name: segment.toolName || '', + arguments: '' + }; + await historyManager.addAiMessage('', [toolRequest]); + + // 如果有工具执行结果,保存工具执行结果 + if (segment.toolResult) { + await historyManager.addToolExecutionResult( + toolRequest.id, + segment.toolName || '', + segment.toolResult + ); + } + } else if (segment.type === 'question') { + // 保存问题(作为AI消息) + await historyManager.addAiMessage(segment.question || ''); + } + } + } catch (error) { + console.warn("保存AI响应历史失败:", error); + } + resolve(); },