diff --git a/api/app/routers/knowledge.py b/api/app/routers/knowledge.py
index ee43f02..bda6abb 100644
--- a/api/app/routers/knowledge.py
+++ b/api/app/routers/knowledge.py
@@ -309,7 +309,10 @@ def delete_document(kb_id: str, doc_id: str, db: Session = Depends(get_db)):
# ============ Search ============
@router.post("/search")
def search_knowledge_base(query: KnowledgeSearchQuery):
- return search_knowledge(kb_id=query.kb_id, query=query.query, n_results=query.nResults)
+ try:
+ return search_knowledge(kb_id=query.kb_id, query=query.query, n_results=query.nResults)
+ except ValueError as exc:
+ raise HTTPException(status_code=400, detail=str(exc)) from exc
# ============ Stats ============
diff --git a/api/app/vector_store.py b/api/app/vector_store.py
index 418484a..9b9c350 100644
--- a/api/app/vector_store.py
+++ b/api/app/vector_store.py
@@ -64,6 +64,8 @@ class VectorStore:
):
"""添加文档片段到向量库"""
collection = self.get_collection(kb_id)
+ if collection is None:
+ raise ValueError(f"Knowledge collection not found for kb_id={kb_id}")
if ids is None:
ids = [f"chunk-{i}" for i in range(len(documents))]
@@ -93,6 +95,11 @@ class VectorStore:
) -> Dict:
"""检索相似文档"""
collection = self.get_collection(kb_id)
+ if collection is None:
+ raise ValueError(
+ f"Knowledge collection not found for kb_id={kb_id}. "
+ "Please ensure the knowledge base exists and documents are indexed."
+ )
# 生成查询向量
query_embedding = embedding_service.embed_query(query)
@@ -108,6 +115,8 @@ class VectorStore:
def get_stats(self, kb_id: str) -> Dict:
"""获取向量库统计"""
collection = self.get_collection(kb_id)
+ if collection is None:
+ raise ValueError(f"Knowledge collection not found for kb_id={kb_id}")
return {
"count": collection.count(),
"kb_id": kb_id
@@ -116,11 +125,15 @@ class VectorStore:
def delete_documents(self, kb_id: str, ids: List[str]):
"""删除指定文档片段"""
collection = self.get_collection(kb_id)
+ if collection is None:
+ return
collection.delete(ids=ids)
def delete_by_metadata(self, kb_id: str, document_id: str):
"""根据文档 ID 删除所有片段"""
collection = self.get_collection(kb_id)
+ if collection is None:
+ return
results = collection.get(where={"document_id": document_id})
if results["ids"]:
collection.delete(ids=results["ids"])
@@ -244,9 +257,6 @@ embedding_service = EmbeddingService()
def search_knowledge(kb_id: str, query: str, n_results: int = 5) -> Dict:
"""知识库检索"""
- # 生成查询向量
- query_vector = embedding_service.embed_query(query)
-
# 检索
results = vector_store.search(
kb_id=kb_id,
diff --git a/web/pages/KnowledgeBase.tsx b/web/pages/KnowledgeBase.tsx
index efddc76..4814ef6 100644
--- a/web/pages/KnowledgeBase.tsx
+++ b/web/pages/KnowledgeBase.tsx
@@ -525,6 +525,8 @@ const KnowledgeBaseDetail: React.FC<{
文档名称
大小
+ 索引状态
+ 分片数
上传时间
操作
@@ -536,6 +538,12 @@ const KnowledgeBaseDetail: React.FC<{
{doc.name}
{doc.size}
+
+
+ {doc.status === 'completed' ? '已索引' : doc.status === 'failed' ? '失败' : doc.status === 'processing' ? '处理中' : '待处理'}
+
+
+ {doc.chunkCount ?? 0}
{doc.uploadDate}