From f542a517769806a1bf4d0b966db1bdc300508dff Mon Sep 17 00:00:00 2001 From: lpm Date: Tue, 15 Sep 2026 16:08:44 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E5=89=8D=E7=AB=AF=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=B4=8B=E6=B4=8B=E5=9C=A8=E4=BF=A1=E6=88=91=E6=9C=80=E5=90=8E?= =?UTF-8?q?=E4=B8=80=E6=AC=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/app/tools/knowledge/page.tsx | 53 +- .../components/admin/assistant-launcher.tsx | 707 ++++++++++++++---- frontend/lib/api.ts | 13 + frontend/lib/assistant-api.ts | 297 +++++++- frontend/lib/knowledge-api.ts | 65 ++ 5 files changed, 948 insertions(+), 187 deletions(-) diff --git a/frontend/app/tools/knowledge/page.tsx b/frontend/app/tools/knowledge/page.tsx index 41d9b7e..f387b26 100644 --- a/frontend/app/tools/knowledge/page.tsx +++ b/frontend/app/tools/knowledge/page.tsx @@ -22,7 +22,16 @@ import { Select, } from "@/components/admin/ui"; import { adminApi, errMessage } from "@/lib/admin-api"; -import { buildKnowledgeForm, knowledgeApi, type KnowledgeDocument, type UploadPreview } from "@/lib/knowledge-api"; +import { + buildKnowledgeForm, + collectionLabel, + DEFAULT_KNOWLEDGE_COLLECTION, + KNOWLEDGE_COLLECTIONS, + knowledgeApi, + knowledgeErrorHint, + type KnowledgeDocument, + type UploadPreview, +} from "@/lib/knowledge-api"; import { isAdmin } from "@/lib/roles"; /** 切分策略,与后端 KnowledgeUploadService 支持的策略保持一致。 */ @@ -38,6 +47,7 @@ export default function KnowledgePage() { const [file, setFile] = useState(null); const [title, setTitle] = useState(""); + const [collection, setCollection] = useState(DEFAULT_KNOWLEDGE_COLLECTION); const [strategy, setStrategy] = useState("default"); const [chunkSize, setChunkSize] = useState(""); const [chunkOverlap, setChunkOverlap] = useState(""); @@ -96,6 +106,7 @@ export default function KnowledgePage() { try { const result = await knowledgeApi.preview( buildKnowledgeForm(file, { + collection_name: collection, strategy, chunk_size: chunkSize ? Number(chunkSize) : null, chunk_overlap: chunkOverlap ? Number(chunkOverlap) : null, @@ -104,7 +115,7 @@ export default function KnowledgePage() { setPreview(result); if (!title) setTitle(file.name); } catch (err) { - setError(errMessage(err, "预览失败,请检查文件格式")); + setError(knowledgeErrorHint(errMessage(err, "预览失败,请检查文件格式"))); } finally { setUploading(false); } @@ -112,6 +123,11 @@ export default function KnowledgePage() { const runConfirm = async () => { if (!file || uploading) return; + // 集合是后端白名单校验的必填项,缺了会直接 400「知识库集合不在允许范围内」 + if (!collection) { + setError("请先选择知识库集合"); + return; + } setUploading(true); setError(null); setNotice(null); @@ -120,16 +136,17 @@ export default function KnowledgePage() { buildKnowledgeForm(file, { title: title || file.name, doc_id: preview?.doc_id ? String(preview.doc_id) : undefined, + collection_name: collection, strategy, chunk_size: chunkSize ? Number(chunkSize) : null, chunk_overlap: chunkOverlap ? Number(chunkOverlap) : null, }) ); - setNotice(`《${title || file.name}》已入库`); + setNotice(`《${title || file.name}》已入库到「${collectionLabel(collection)}」`); resetUpload(); await load(); } catch (err) { - setError(errMessage(err, "入库失败,请稍后重试")); + setError(knowledgeErrorHint(errMessage(err, "入库失败,请稍后重试"))); } finally { setUploading(false); } @@ -211,7 +228,7 @@ export default function KnowledgePage() { -
+
+
@@ -517,7 +822,7 @@ export function AssistantLauncher() {