1- import traceback
21from pathlib import Path
32
43from astrbot .core import logger
@@ -56,8 +55,7 @@ async def initialize(self) -> None:
5655 logger .error (f"知识库模块导入失败: { e } " )
5756 logger .warning ("请确保已安装所需依赖: pypdf, aiofiles, Pillow, rank-bm25" )
5857 except Exception as e :
59- logger .error (f"知识库模块初始化失败: { e } " )
60- logger .error (traceback .format_exc ())
58+ logger .error (f"知识库模块初始化失败: { e } " , exc_info = True )
6159
6260 async def _init_kb_database (self ) -> None :
6361 self .kb_db = KBSQLiteDatabase (DB_PATH .as_posix ())
@@ -80,8 +78,10 @@ async def load_kbs(self) -> None:
8078 await kb_helper .initialize ()
8179 except Exception as e :
8280 kb_helper .init_error = str (e )
83- logger .error (f"知识库 { record .kb_name } ({ record .kb_id } ) 初始化失败: { e } " )
84- logger .error (traceback .format_exc ())
81+ logger .error (
82+ f"知识库 { record .kb_name } ({ record .kb_id } ) 初始化失败: { e } " ,
83+ exc_info = True ,
84+ )
8585 self .kb_insts [record .kb_id ] = kb_helper
8686
8787 async def create_kb (
@@ -210,12 +210,14 @@ async def update_kb(
210210
211211 # re-initialize to pick up provider changes
212212 try :
213+ await kb_helper .terminate ()
213214 await kb_helper .initialize ()
214215 kb_helper .init_error = None
215216 except Exception as e :
216217 kb_helper .init_error = str (e )
217- logger .error (f"知识库 { kb .kb_name } ({ kb .kb_id } ) 重新初始化失败: { e } " )
218- logger .error (traceback .format_exc ())
218+ logger .error (
219+ f"知识库 { kb .kb_name } ({ kb .kb_id } ) 重新初始化失败: { e } " , exc_info = True
220+ )
219221
220222 return kb_helper
221223
@@ -229,16 +231,21 @@ async def retrieve(
229231 """从指定知识库中检索相关内容"""
230232 kb_ids = []
231233 kb_id_helper_map = {}
234+ unavailable_kbs = []
232235 for kb_name in kb_names :
233236 if kb_helper := await self .get_kb_by_name (kb_name ):
234237 if 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 } " ,
238- )
238+ unavailable_kbs .append ((kb_name , kb_helper .init_error ))
239+ logger .warning (f"知识库 { kb_name } 不可用: { kb_helper .init_error } " )
240+ continue
239241 kb_ids .append (kb_helper .kb .kb_id )
240242 kb_id_helper_map [kb_helper .kb .kb_id ] = kb_helper
241243
244+ # all requested KBs are unavailable
245+ if not kb_ids and unavailable_kbs :
246+ errors = "; " .join (f"{ n } : { e } " for n , e in unavailable_kbs )
247+ raise ValueError (f"所有请求的知识库均不可用: { errors } " )
248+
242249 if not kb_ids :
243250 return {}
244251
0 commit comments