diff --git a/scripts/llm.js b/scripts/llm.js index a4cc9d0..bb2e33b 100644 --- a/scripts/llm.js +++ b/scripts/llm.js @@ -60,21 +60,25 @@ async function renderSources(sourceList, sources, jumpMap) { ul.style.listStyle = "disc"; ul.style.fontSize = "14px"; + // ====== 新增去重处理 ====== + const seen = new Set(); for (const src of sources) { const url = jumpMap[src.title]; + const title = src.title || "未命名文档"; + const scoreText = (typeof src.score === "number") ? `(相似度:${(src.score * 100).toFixed(2)}%)` : ""; + + const key = title + "|" + (url || ""); + if (seen.has(key)) continue; // 跳过重复 + seen.add(key); + const li = document.createElement("li"); li.style.marginBottom = "3px"; li.style.lineHeight = "1.7"; - let scoreText = ""; - if (typeof src.score === "number") { - scoreText = `(相似度:${(src.score * 100).toFixed(2)}%)`; - } - if (url) { const link = document.createElement("a"); link.href = url; - link.textContent = src.title || "未命名文档"; + link.textContent = title; link.target = "_blank"; link.style.color = "#2560de"; link.style.textDecoration = "none"; @@ -91,15 +95,18 @@ async function renderSources(sourceList, sources, jumpMap) { li.appendChild(scoreSpan); } } else { - li.textContent = (src.title || "未命名文档") + (scoreText ? " " + scoreText : ""); + li.textContent = title + (scoreText ? " " + scoreText : ""); li.style.color = "#666"; } ul.appendChild(li); } + // ====== 去重处理结束 ====== + sourceList.appendChild(ul); } + // === 复制代码块功能 === function wrapHtmlWithCopyBtn(html) { const wrapper = document.createElement('div'); @@ -184,6 +191,7 @@ function insertCopyFullAnswerBtn(msgBox, answerStr) { let refArr = []; const ul = msgBox.querySelector('.llm-sources ul'); if (ul) { + const seen = new Set(); ul.querySelectorAll('li').forEach(li => { let link = li.querySelector('a'); let title = link ? link.textContent : li.textContent; @@ -191,7 +199,12 @@ function insertCopyFullAnswerBtn(msgBox, answerStr) { // 分值(span) let scoreSpan = li.querySelector('span'); let scoreText = scoreSpan ? scoreSpan.textContent : ""; - refArr.push(`- [${title}](${url})${scoreText}`); + // 标识唯一性用 title+url + let key = title + '|' + url; + if (!seen.has(key)) { + refArr.push(`- [${title}](${url})${scoreText}`); + seen.add(key); + } }); } let refText = "";