From dc3d6e4b69870ea6be0dcf3b3dcb8f166fc727fd Mon Sep 17 00:00:00 2001 From: thzxx Date: Tue, 21 Apr 2026 11:29:33 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=AC=AC=E4=BA=8C?= =?UTF-8?q?=E6=9D=A1=E6=B6=88=E6=81=AF=E4=B8=8D=E6=98=BE=E7=A4=BA=E5=92=8C?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6AI=E8=AF=BB=E5=8F=96?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug 1: renderMessages() 统计 .message 元素时把 loading placeholder 也计入, 导致第二条用户消息被跳过不渲染。改为 .message:not(.loading) 排除加载占位符。 Bug 2: Agent Loop system prompt 缺少文件内容感知规则,用户上传文件后让AI读取, AI 调用 read_file 去工作空间找文件导致失败。在 TOOL_USAGE_GUIDE 新增规则 16, 明确告知模型上传文件内容已在对话消息中,无需调用 read_file 工具。 --- src/renderer/components/chat-area.ts | 4 ++-- src/renderer/services/agent-engine.ts | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/renderer/components/chat-area.ts b/src/renderer/components/chat-area.ts index 2a5d9bb..222458d 100644 --- a/src/renderer/components/chat-area.ts +++ b/src/renderer/components/chat-area.ts @@ -89,8 +89,8 @@ export function renderMessages(): void { emptyStateEl.style.display = 'none'; messagesContainerEl.style.display = ''; - // 只计算已渲染的 .message 元素(排除 placeholder 和其他非消息元素) - const existingCount = messagesContainerEl.querySelectorAll('.message').length; + // 只计算已渲染的 .message 元素(排除 loading placeholder 和其他非消息元素) + const existingCount = messagesContainerEl.querySelectorAll('.message:not(.loading)').length; const isNewMessage = existingCount > 0 && existingCount < msgs.length; for (let i = existingCount; i < msgs.length; i++) { appendMessageDOM(msgs[i], i); diff --git a/src/renderer/services/agent-engine.ts b/src/renderer/services/agent-engine.ts index a4a9528..8e8f84d 100644 --- a/src/renderer/services/agent-engine.ts +++ b/src/renderer/services/agent-engine.ts @@ -89,7 +89,8 @@ const TOOL_USAGE_GUIDE = `【工具链规则(强制执行)】 12. 查看技能:可以用 skill_list 列出所有可用技能,用 skill_view 查看特定技能的详细工具链。 13. 【严禁猜 URL】绝对不要猜测或编造 URL 路径(如 https://example.com/docs/install)。所有 URL 必须从搜索结果中获取。如果你猜了一个 URL 并得到 404 错误,不要继续猜其他路径,应该回到搜索结果中找正确的链接。 14. 搜索结果来源:搜索结果中每条都带有标题、URL 和摘要。摘要已经包含关键信息,优先从摘要中提取答案。不要忽视来自知乎、CSDN、博客园等中文来源的结果,它们通常包含有效的技术信息。 -15. 【严禁使用知识库日期】你无法确定自己的训练数据截止到哪一天,绝对不要凭记忆推断"今天是X年X月X日"。联网搜索结果的头部会标注真实的当前日期 \`[当前日期: ...]\`,这是你唯一可信赖的日期来源。回答涉及时间、版本、时效性的内容时,必须以该日期为准。如果搜索结果中的日期与你认知不符,以搜索结果为准。`; +15. 【严禁使用知识库日期】你无法确定自己的训练数据截止到哪一天,绝对不要凭记忆推断"今天是X年X月X日"。联网搜索结果的头部会标注真实的当前日期 \`[当前日期: ...]\`,这是你唯一可信赖的日期来源。回答涉及时间、版本、时效性的内容时,必须以该日期为准。如果搜索结果中的日期与你认知不符,以搜索结果为准。 +16. 【上传文件已在对话中】当用户上传文件时,文件的完整内容已经作为代码块包含在用户的消息中。你不需要也不应该调用 read_file 工具去工作空间读取该文件——直接分析消息中已提供的文件内容即可。只有当用户明确要求你从工作空间读取一个新文件时,才使用 read_file 工具。`; /** 工具名白名单:用于文本解析兜底时过滤非法工具名 */ const VALID_TOOL_NAMES = new Set([