fix: 流结束后手动插入RAG来源到DOM,解决历史中不显示的问题

ragSources 在流结束后才添加到消息对象,但 assistant 消息 DOM 已由流式更新创建,
renderMessages 只追加新消息不会重新渲染已有元素。
直接在流结束后将 RAG 来源 HTML 插入到 msg-body 中。
This commit is contained in:
Metona
2026-04-05 00:53:20 +08:00
parent 192e070516
commit 13291fba77
+15
View File
@@ -508,6 +508,21 @@ ${ragContext}
updateLastAssistantMessage(assistantContent, thinkContent || null, finalStats, modelName || null);
}
// 流结束后插入 RAG 来源到现有 DOMrenderMessages 不会重新渲染已有消息)
if (ragSources && ragSources.length > 0) {
const lastAssistant = document.querySelector('#messagesContainer .message.assistant:last-of-type');
if (lastAssistant) {
const sourcesHtml = ragSources.map((s, i) => {
const scorePercent = s.score ? `${(s.score * 100).toFixed(0)}%` : '';
return `<div class="rag-source-item"><span class="rag-source-name">📄 来源 ${i + 1}: ${escapeHtml(s.filename)}</span>${scorePercent ? `<span class="rag-source-score">${scorePercent}</span>` : ''}</div>`;
}).join('');
const ragDiv = document.createElement('div');
ragDiv.className = 'rag-sources';
ragDiv.innerHTML = `<div class="rag-sources-header">🧠 基于知识库回答</div>${sourcesHtml}`;
lastAssistant.querySelector('.msg-body').appendChild(ragDiv);
}
}
await saveCurrentSession();
} catch (err) {