From 90f7572d775dbf965eede4c2ec9988326ea926cc Mon Sep 17 00:00:00 2001 From: thzxx Date: Wed, 24 Jun 2026 22:16:53 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20memory=E5=B7=A5=E5=85=B7=E7=BB=93?= =?UTF-8?q?=E6=9E=9C=E4=B8=A2=E5=A4=B1=20=E2=80=94=20formatToolResultForMo?= =?UTF-8?q?del=E4=B8=A2=E5=BC=83read=5Fall=E7=9A=84entries;=20=E5=8E=86?= =?UTF-8?q?=E5=8F=B2=E6=B6=88=E6=81=AF=E5=89=94=E9=99=A4=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/renderer/components/input-area.ts | 17 +++-------------- src/renderer/services/agent-engine.ts | 4 +++- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/src/renderer/components/input-area.ts b/src/renderer/components/input-area.ts index f67d20e..632a3d9 100644 --- a/src/renderer/components/input-area.ts +++ b/src/renderer/components/input-area.ts @@ -988,7 +988,8 @@ function buildHistoryMessages(msgs: ChatMessage[], maxCount = 20): OllamaMessage const result: OllamaMessage[] = []; for (const msg of msgs) { - if (msg.role !== 'user' && msg.role !== 'assistant' && msg.role !== 'system') continue; + // 只注入 assistant 和 system 消息(用户消息仅当前发送的一条,由 runAgentLoop userContent 单独传入) + if (msg.role !== 'assistant' && msg.role !== 'system') continue; if (result.length >= maxCount) break; let content = msg.content || ''; @@ -999,19 +1000,7 @@ function buildHistoryMessages(msgs: ChatMessage[], maxCount = 20): OllamaMessage continue; } - if (msg.role === 'user') { - // 用户消息:注入文件内容 - if (msg._fileContents?.length) { - const fileParts = buildFileContentParts(msg._fileContents); - content = content ? content + '\n\n---\n' + fileParts.join('\n\n---\n') : fileParts.join('\n\n---\n'); - } - result.push({ - role: 'user', - content, - ...(msg.images?.length && { images: msg.images }), - ...((msg as any)._videoFrames?.length && { images: [...(msg.images || []), ...(msg as any)._videoFrames.map((f: any) => f.base64)] }), - }); - } else if (msg.role === 'assistant') { + if (msg.role === 'assistant') { // 构建 assistant 消息 const assistantMsg: OllamaMessage = { role: 'assistant', diff --git a/src/renderer/services/agent-engine.ts b/src/renderer/services/agent-engine.ts index a86f896..3609b04 100644 --- a/src/renderer/services/agent-engine.ts +++ b/src/renderer/services/agent-engine.ts @@ -332,10 +332,12 @@ function formatToolResultForModel(toolName: string, result: ToolResult): string } case 'memory': { + // 仅处理去重文字信号(触发 handleObserving 的⛔终止), + // 正常结果交给 default 分支保留全部字段(entries/total/results等) if ((result as any).duplicate) { return `⚠️ 重复添加: ${(result as any).message || '相同内容已存在'}\n✅ 记忆操作已全部完成,不要再调用 memory 工具,直接输出最终回答。`; } - return JSON.stringify({ success: true, action: result.action, type: (result as any).type, content: (result as any).content }); + // fall through to default } default: {