Skip to content

Commit a3fba97

Browse files
committed
fix: 改进知识库初始化和重排序错误处理,增强日志记录
1 parent 987f9f6 commit a3fba97

3 files changed

Lines changed: 25 additions & 17 deletions

File tree

astrbot/core/knowledge_base/kb_helper.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff 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"),

astrbot/core/knowledge_base/kb_mgr.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff 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

astrbot/core/knowledge_base/retrieval/manager.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff 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)

0 commit comments

Comments
 (0)