fix: 修复第二条消息不显示和上传文件AI读取失败

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 工具。
This commit is contained in:
thzxx
2026-04-21 11:29:33 +08:00
parent e5acf646c8
commit dc3d6e4b69
2 changed files with 4 additions and 3 deletions
+2 -2
View File
@@ -89,8 +89,8 @@ export function renderMessages(): void {
emptyStateEl.style.display = 'none'; emptyStateEl.style.display = 'none';
messagesContainerEl.style.display = ''; messagesContainerEl.style.display = '';
// 只计算已渲染的 .message 元素(排除 placeholder 和其他非消息元素) // 只计算已渲染的 .message 元素(排除 loading placeholder 和其他非消息元素)
const existingCount = messagesContainerEl.querySelectorAll('.message').length; const existingCount = messagesContainerEl.querySelectorAll('.message:not(.loading)').length;
const isNewMessage = existingCount > 0 && existingCount < msgs.length; const isNewMessage = existingCount > 0 && existingCount < msgs.length;
for (let i = existingCount; i < msgs.length; i++) { for (let i = existingCount; i < msgs.length; i++) {
appendMessageDOM(msgs[i], i); appendMessageDOM(msgs[i], i);
+2 -1
View File
@@ -89,7 +89,8 @@ const TOOL_USAGE_GUIDE = `【工具链规则(强制执行)】
12. 查看技能:可以用 skill_list 列出所有可用技能,用 skill_view 查看特定技能的详细工具链。 12. 查看技能:可以用 skill_list 列出所有可用技能,用 skill_view 查看特定技能的详细工具链。
13. 【严禁猜 URL】绝对不要猜测或编造 URL 路径(如 https://example.com/docs/install)。所有 URL 必须从搜索结果中获取。如果你猜了一个 URL 并得到 404 错误,不要继续猜其他路径,应该回到搜索结果中找正确的链接。 13. 【严禁猜 URL】绝对不要猜测或编造 URL 路径(如 https://example.com/docs/install)。所有 URL 必须从搜索结果中获取。如果你猜了一个 URL 并得到 404 错误,不要继续猜其他路径,应该回到搜索结果中找正确的链接。
14. 搜索结果来源:搜索结果中每条都带有标题、URL 和摘要。摘要已经包含关键信息,优先从摘要中提取答案。不要忽视来自知乎、CSDN、博客园等中文来源的结果,它们通常包含有效的技术信息。 14. 搜索结果来源:搜索结果中每条都带有标题、URL 和摘要。摘要已经包含关键信息,优先从摘要中提取答案。不要忽视来自知乎、CSDN、博客园等中文来源的结果,它们通常包含有效的技术信息。
15. 【严禁使用知识库日期】你无法确定自己的训练数据截止到哪一天,绝对不要凭记忆推断"今天是X年X月X日"。联网搜索结果的头部会标注真实的当前日期 \`[当前日期: ...]\`,这是你唯一可信赖的日期来源。回答涉及时间、版本、时效性的内容时,必须以该日期为准。如果搜索结果中的日期与你认知不符,以搜索结果为准。`; 15. 【严禁使用知识库日期】你无法确定自己的训练数据截止到哪一天,绝对不要凭记忆推断"今天是X年X月X日"。联网搜索结果的头部会标注真实的当前日期 \`[当前日期: ...]\`,这是你唯一可信赖的日期来源。回答涉及时间、版本、时效性的内容时,必须以该日期为准。如果搜索结果中的日期与你认知不符,以搜索结果为准。
16. 【上传文件已在对话中】当用户上传文件时,文件的完整内容已经作为代码块包含在用户的消息中。你不需要也不应该调用 read_file 工具去工作空间读取该文件——直接分析消息中已提供的文件内容即可。只有当用户明确要求你从工作空间读取一个新文件时,才使用 read_file 工具。`;
/** 工具名白名单:用于文本解析兜底时过滤非法工具名 */ /** 工具名白名单:用于文本解析兜底时过滤非法工具名 */
const VALID_TOOL_NAMES = new Set([ const VALID_TOOL_NAMES = new Set([