From 0b298bf6c8df5f7e0c7d531379134c363981a2ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A2=A8=E6=A2=93=E6=9F=92?= <1787882683@qq.com> Date: Sun, 3 Aug 2025 11:03:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=9F=A5=E8=AF=86=E5=BA=93?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=97=B6=E7=9A=84=E7=A9=BA=E7=BB=93=E6=9E=9C?= =?UTF-8?q?=E5=A4=84=E7=90=86=EF=BC=8C=E5=A2=9E=E5=BC=BA=E5=8A=A8=E6=80=81?= =?UTF-8?q?TopK=E9=80=89=E6=8B=A9=E5=87=BD=E6=95=B0=E7=9A=84=E8=BE=93?= =?UTF-8?q?=E5=85=A5=E6=A3=80=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/chat/knowledge/qa_manager.py | 7 ++++++- src/chat/knowledge/utils/dyn_topk.py | 4 ++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/chat/knowledge/qa_manager.py b/src/chat/knowledge/qa_manager.py index 678aa4190..587775755 100644 --- a/src/chat/knowledge/qa_manager.py +++ b/src/chat/knowledge/qa_manager.py @@ -50,7 +50,7 @@ class QAManager: # 过滤阈值 # 考虑动态阈值:当存在显著数值差异的结果时,保留显著结果;否则,保留所有结果 relation_search_res = dyn_select_top_k(relation_search_res, 0.5, 1.0) - if relation_search_res[0][1] < global_config.lpmm_knowledge.qa_relation_threshold: + if not relation_search_res or relation_search_res[0][1] < global_config.lpmm_knowledge.qa_relation_threshold: # 未找到相关关系 logger.debug("未找到相关关系,跳过关系检索") relation_search_res = [] @@ -106,6 +106,11 @@ class QAManager: processed_result = await self.process_query(question) if processed_result is not None: query_res = processed_result[0] + # 检查查询结果是否为空 + if not query_res: + logger.debug("知识库查询结果为空,可能是知识库中没有相关内容") + return None + knowledge = [ ( self.embed_manager.paragraphs_embedding_store.store[res[0]].str, diff --git a/src/chat/knowledge/utils/dyn_topk.py b/src/chat/knowledge/utils/dyn_topk.py index eb40ef3a8..5304934f0 100644 --- a/src/chat/knowledge/utils/dyn_topk.py +++ b/src/chat/knowledge/utils/dyn_topk.py @@ -5,6 +5,10 @@ def dyn_select_top_k( score: List[Tuple[Any, float]], jmp_factor: float, var_factor: float ) -> List[Tuple[Any, float, float]]: """动态TopK选择""" + # 检查输入列表是否为空 + if not score: + return [] + # 按照分数排序(降序) sorted_score = sorted(score, key=lambda x: x[1], reverse=True)