diff --git a/astrbot/core/astr_main_agent_resources.py b/astrbot/core/astr_main_agent_resources.py index d0ef33b815..09e77b4cbe 100644 --- a/astrbot/core/astr_main_agent_resources.py +++ b/astrbot/core/astr_main_agent_resources.py @@ -33,6 +33,7 @@ RunBrowserSkillTool, SyncSkillReleaseTool, ) +from astrbot.core.knowledge_base.kb_helper import KBHelper from astrbot.core.message.message_event_result import MessageChain from astrbot.core.platform.message_session import MessageSession from astrbot.core.star.context import Context @@ -396,6 +397,18 @@ async def call( return f"Message sent to session {target_session}" +def check_all_kb(kb_list: list[KBHelper | None]) -> bool: + """检查是否所有的知识库都为空 + Args: + kb_list: 所选的知识库 + Returns: + bool: 是否全为空 + """ + return not any( + kb and (kb.kb.doc_count != 0 or kb.kb.chunk_count != 0) for kb in kb_list + ) + + async def retrieve_knowledge_base( query: str, umo: str, @@ -454,6 +467,12 @@ async def retrieve_knowledge_base( if not kb_names: return + all_kbs = [await kb_mgr.get_kb_by_name(kb) for kb in kb_names] + + if check_all_kb(all_kbs): + logger.debug("所配置的所有知识库全为空,跳过检索过程") + return + logger.debug(f"[知识库] 开始检索知识库,数量: {len(kb_names)}, top_k={top_k}") kb_context = await kb_mgr.retrieve( query=query, diff --git a/astrbot/core/db/vec_db/faiss_impl/vec_db.py b/astrbot/core/db/vec_db/faiss_impl/vec_db.py index f1b89768e9..bc729aac8c 100644 --- a/astrbot/core/db/vec_db/faiss_impl/vec_db.py +++ b/astrbot/core/db/vec_db/faiss_impl/vec_db.py @@ -75,7 +75,9 @@ async def insert_batch( ids = ids or [str(uuid.uuid4()) for _ in contents] if not contents: - logger.debug("No contents provided for batch insert; skipping embedding generation.") + logger.debug( + "No contents provided for batch insert; skipping embedding generation." + ) return [] start = time.time()