Skip to content

Commit 0ae42b1

Browse files
committed
fix(kb): skip knowledge base retrieval if query is empty or whitespace
1 parent 24f568b commit 0ae42b1

1 file changed

Lines changed: 28 additions & 18 deletions

File tree

astrbot/core/knowledge_base/retrieval/manager.py

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,9 @@ def __init__(
5151
"""初始化检索管理器
5252
5353
Args:
54-
vec_db_factory: 向量数据库工厂
5554
sparse_retriever: 稀疏检索器
5655
rank_fusion: 结果融合器
5756
kb_db: 知识库数据库实例
58-
5957
"""
6058
self.sparse_retriever = sparse_retriever
6159
self.rank_fusion = rank_fusion
@@ -80,13 +78,17 @@ async def retrieve(
8078
Args:
8179
query: 查询文本
8280
kb_ids: 知识库 ID 列表
81+
kb_id_helper_map: 知识库助手映射
82+
top_k_fusion: 融合召回的数量
8383
top_m_final: 最终返回数量
84-
enable_rerank: 是否启用 Rerank
8584
8685
Returns:
8786
List[RetrievalResult]: 检索结果列表
8887
8988
"""
89+
if not isinstance(query, str) or not query.strip():
90+
return []
91+
9092
if not kb_ids:
9193
return []
9294

@@ -152,22 +154,30 @@ async def retrieve(
152154
retrieval_results = []
153155
for fr in fused_results:
154156
metadata_dict = metadata_map.get(fr.doc_id)
155-
if metadata_dict:
156-
retrieval_results.append(
157-
RetrievalResult(
158-
chunk_id=fr.chunk_id,
159-
doc_id=fr.doc_id,
160-
doc_name=metadata_dict["document"].doc_name,
161-
kb_id=fr.kb_id,
162-
kb_name=metadata_dict["knowledge_base"].kb_name,
163-
content=fr.content,
164-
score=fr.score,
165-
metadata={
166-
"chunk_index": fr.chunk_index,
167-
"char_count": len(fr.content),
168-
},
169-
),
157+
if not metadata_dict:
158+
logger.warning(
159+
"Metadata for doc_id %s (kb %s, chunk %s) not found; skipping.",
160+
getattr(fr, "doc_id", "unknown"),
161+
getattr(fr, "kb_id", "unknown"),
162+
getattr(fr, "chunk_id", "unknown"),
170163
)
164+
continue
165+
166+
retrieval_results.append(
167+
RetrievalResult(
168+
chunk_id=getattr(fr, "chunk_id", None),
169+
doc_id=fr.doc_id,
170+
doc_name=metadata_dict["document"].doc_name,
171+
kb_id=fr.kb_id,
172+
kb_name=metadata_dict["knowledge_base"].kb_name,
173+
content=fr.content,
174+
score=fr.score,
175+
metadata={
176+
"chunk_index": getattr(fr, "chunk_index", None),
177+
"char_count": len(fr.content),
178+
},
179+
),
180+
)
171181

172182
# 5. Rerank
173183
first_rerank = None

0 commit comments

Comments
 (0)