@@ -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