File tree Expand file tree Collapse file tree
astrbot/core/knowledge_base Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -150,21 +150,28 @@ async def get_ep(self) -> EmbeddingProvider:
150150 async def get_rp (self ) -> RerankProvider | None :
151151 if not self .kb .rerank_provider_id :
152152 return None
153- rp : RerankProvider = await self .prov_mgr .get_provider_by_id (
153+ rp : RerankProvider | None = await self .prov_mgr .get_provider_by_id (
154154 self .kb .rerank_provider_id ,
155155 ) # type: ignore
156156 if not rp :
157- raise ValueError (
158- f"无法找到 ID 为 { self .kb .rerank_provider_id } 的 Rerank Provider" ,
157+ logger . warning (
158+ f"知识库 { self .kb .kb_name } ( { self . kb . kb_id } ) 的 Rerank Provider( { self . kb . rerank_provider_id } ) 不可用,将跳过重排序。 " ,
159159 )
160+ return None
160161 return rp
161162
162163 async def _ensure_vec_db (self ) -> FaissVecDB :
163164 if not self .kb .embedding_provider_id :
164165 raise ValueError (f"知识库 { self .kb .kb_name } 未配置 Embedding Provider" )
165166
166167 ep = await self .get_ep ()
167- rp = await self .get_rp ()
168+ rp : RerankProvider | None = None
169+ try :
170+ rp = await self .get_rp ()
171+ except Exception as e :
172+ logger .warning (
173+ f"知识库 { self .kb .kb_name } ({ self .kb .kb_id } ) 初始化重排序能力失败,将跳过重排序: { e } " ,
174+ )
168175
169176 vec_db = FaissVecDB (
170177 doc_store_path = str (self .kb_dir / "doc.db" ),
Original file line number Diff line number Diff line change @@ -232,10 +232,10 @@ async def retrieve(
232232 for kb_name in kb_names :
233233 if kb_helper := await self .get_kb_by_name (kb_name ):
234234 if kb_helper .init_error :
235- logger .warning (
236- f"跳过初始化失败的知识库 { kb_name } : { kb_helper .init_error } "
235+ logger .error (f"知识库 { kb_name } 不可用: { kb_helper .init_error } " )
236+ raise ValueError (
237+ f"知识库 { kb_name } 不可用: { kb_helper .init_error } " ,
237238 )
238- continue
239239 kb_ids .append (kb_helper .kb .kb_id )
240240 kb_id_helper_map [kb_helper .kb .kb_id ] = kb_helper
241241
Original file line number Diff line number Diff line change @@ -184,12 +184,15 @@ async def retrieve(
184184 first_rerank = vec_db .rerank_provider
185185 break
186186 if first_rerank and retrieval_results :
187- retrieval_results = await self ._rerank (
188- query = query ,
189- results = retrieval_results ,
190- top_k = top_m_final ,
191- rerank_provider = first_rerank ,
192- )
187+ try :
188+ retrieval_results = await self ._rerank (
189+ query = query ,
190+ results = retrieval_results ,
191+ top_k = top_m_final ,
192+ rerank_provider = first_rerank ,
193+ )
194+ except Exception as e :
195+ logger .warning (f"Rerank 执行失败,已跳过重排序并使用融合结果: { e } " )
193196
194197 return retrieval_results [:top_m_final ]
195198
@@ -229,10 +232,8 @@ async def _dense_retrieve(
229232
230233 all_results .extend (vec_results )
231234 except Exception as e :
232- from astrbot .core import logger
233-
234- logger .warning (f"知识库 { kb_id } 稠密检索失败: { e } " )
235- continue
235+ logger .error (f"知识库 { kb_id } 稠密检索失败: { e } " )
236+ raise RuntimeError (f"知识库 { kb_id } 稠密检索失败: { e } " ) from e
236237
237238 # 按相似度排序并返回 top_k
238239 all_results .sort (key = lambda x : x .similarity , reverse = True )
You can’t perform that action at this time.
0 commit comments