diff --git a/manifest.json b/manifest.json
index 5e481b8..4448bd3 100644
--- a/manifest.json
+++ b/manifest.json
@@ -1,7 +1,7 @@
{
"manifest_version": 3,
"name": "渠道应用开发部知识库",
- "version": "2.0.10",
+ "version": "2.0.11",
"description": "通过关键词快速搜索内部文档",
"permissions": ["storage"],
"host_permissions": [
diff --git a/readme.md b/readme.md
index 9f8d49a..559f51d 100644
--- a/readme.md
+++ b/readme.md
@@ -14,4 +14,5 @@
| 2025.06.19 | V2.0.8 | Luke.Ye | 对象存储上传优化,适配后端新接口 |
| 2025.06.20 | V2.0.9 | Luke.Ye | 上传记录页面支持删除历史记录(会同时清空对象存储和ES) |
| 2025.06.22 | V2.0.10 | Luke.Ye | 搜索结果页分页展示优化 |
+| 2025.06.23 | V2.0.11 | Luke.Ye | 准备做llm接口迁移 |
diff --git a/scripts/llm.js b/scripts/llm.js
index 889c9dd..8eebfc1 100644
--- a/scripts/llm.js
+++ b/scripts/llm.js
@@ -367,10 +367,9 @@ async function fetchLLMAnswer(question, container, contentDiv) {
if (!question || !question.trim()) return;
const config = await loadMergedConfig();
- const llmChatCfg = config.apiConfig.llmChat;
const llmToken = await getLLMToken();
- const workspaceSlug = await getLLMWorkspaceSlug(llmToken);
- const url = llmChatCfg.url.replace("${workId}", workspaceSlug);
+ const userToken = await loadToken();
+ const url = "http://app-test.wisdompulse.cn/api/v1/llm/ask";
const userItem = document.createElement("div");
userItem.className = "llm-msg-item llm-user";
@@ -386,14 +385,16 @@ async function fetchLLMAnswer(question, container, contentDiv) {
let collectedSources = [];
let jumpMap = {};
try {
- const body = {};
- body[llmChatCfg.requestParams[0].field] = question;
- body[llmChatCfg.requestParams[1].field] = [];
+ const body = {
+ llmToken,
+ question
+ // 可选扩展参数可追加到 body 中,如 slug/wsName/attachments
+ };
const res = await fetch(url, {
method: "POST",
headers: {
- "Authorization": `Bearer ${llmToken}`,
+ "Authorization": `${userToken}`,
"Content-Type": "application/json"
},
body: JSON.stringify(body)
@@ -415,10 +416,22 @@ async function fetchLLMAnswer(question, container, contentDiv) {
if (value) {
buffer += decoder.decode(value, { stream: true });
const lines = buffer.split("\n");
- buffer = lines.pop();
+ buffer = lines.pop(); // 剩下不完整的一行留给下一次
+
for (let line of lines) {
if (line.startsWith("data: ")) {
- const chunk = JSON.parse(line.slice(6));
+ const chunkStr = line.slice(6).trim();
+ if (!chunkStr) continue;
+
+ let chunk;
+ try {
+ chunk = JSON.parse(chunkStr);
+ } catch (err) {
+ console.warn("非法 JSON:", chunkStr);
+ continue;
+ }
+
+ // 解析内容片段
if (chunk.sources) {
for (const s of chunk.sources) {
if (!collectedSources.find(x => x.id === s.id)) {
@@ -442,7 +455,6 @@ async function fetchLLMAnswer(question, container, contentDiv) {
answerStr += content;
}
- // 渲染 markdown,代码块加复制按钮
let html = "";
try {
html = window.marked ? wrapHtmlWithCopyBtn(marked.parse(answerStr)) : answerStr.replace(/\n/g, "
");
@@ -456,7 +468,6 @@ async function fetchLLMAnswer(question, container, contentDiv) {
bindAllCopyButtons(msgBox);
insertCopyFullAnswerBtn(msgBox, answerStr);
-
contentDiv.scrollTop = contentDiv.scrollHeight;
}
}
@@ -478,3 +489,4 @@ async function fetchLLMAnswer(question, container, contentDiv) {
msgBox.innerHTML += `LLM异常:${e}`;
}
}
+