Skip to content

Commit df3fb7c

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

1 file changed

Lines changed: 29 additions & 18 deletions

File tree

astrbot/core/knowledge_base/retrieval/manager.py

Lines changed: 29 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,18 @@ 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+
# skip retrieval for empty / non-string queries (e.g. images, stickers)
91+
return []
92+
9093
if not kb_ids:
9194
return []
9295

@@ -152,22 +155,30 @@ async def retrieve(
152155
retrieval_results = []
153156
for fr in fused_results:
154157
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-
),
158+
if not metadata_dict:
159+
logger.warning(
160+
"Metadata for doc_id %s (kb %s, chunk %s) not found; skipping.",
161+
getattr(fr, "doc_id", "unknown"),
162+
getattr(fr, "kb_id", "unknown"),
163+
getattr(fr, "chunk_id", "unknown"),
170164
)
165+
continue
166+
167+
retrieval_results.append(
168+
RetrievalResult(
169+
chunk_id=getattr(fr, "chunk_id", None),
170+
doc_id=fr.doc_id,
171+
doc_name=metadata_dict["document"].doc_name,
172+
kb_id=fr.kb_id,
173+
kb_name=metadata_dict["knowledge_base"].kb_name,
174+
content=fr.content,
175+
score=fr.score,
176+
metadata={
177+
"chunk_index": getattr(fr, "chunk_index", None),
178+
"char_count": len(fr.content),
179+
},
180+
),
181+
)
171182

172183
# 5. Rerank
173184
first_rerank = None

0 commit comments

Comments
 (0)