From aba6475c5acc5c0d286322c2849c3728fb54d8aa Mon Sep 17 00:00:00 2001 From: wanyaokun <12345678> Date: Thu, 5 Sep 2024 09:24:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E4=BA=8B=E4=BB=B6=E5=90=8D=E7=A7=B0?= =?UTF-8?q?=E8=BD=AC=E4=B9=89=E6=88=90=E4=B8=AD=E6=96=87=E5=8F=8A=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E5=85=B3=E9=94=AE=E5=AD=97=E6=A3=80=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/api/routers/app.py | 22 +++++++++++++++-- .../app/engine/retriever/HybridRetriever.py | 24 +++++++++++++++++-- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/backend/app/api/routers/app.py b/backend/app/api/routers/app.py index bf9f19d..7f57dde 100644 --- a/backend/app/api/routers/app.py +++ b/backend/app/api/routers/app.py @@ -32,6 +32,24 @@ v1_router = v = APIRouter() gEvent_handler = None +CH_Event_map={ + 'CHUNKING':'文本切片', + 'NODE_PARSING':'节点解析', + 'EMBEDDING':'生成向量', + 'LLM':'知识问答', + 'QUERY':'查询', + 'RETRIEVE':'检索', + 'SYNTHESIZE':'答案合成', + 'TREE':'总结', + 'SUB_QUESTION':'问题分解', + 'TEMPLATING':'生成提示词模板', + 'FUNCTION_CALL':'函数调用', + 'RERANKING':'节点重排', + 'EXCEPTION':'执行异常', + 'AGENT_STEP':'单步执行' +} + + class ChatCallbackEvent(BaseModel): event_type: ChatEventType payload: Optional[Dict[str, Any]] = None @@ -99,7 +117,7 @@ class ChatCallbackEvent(BaseModel): "id": self.payload.get('nodeid'), "node_id": self.payload.get('nodeid'), "node_type": "http-request", - "title": f"正在执行事件:{self.payload.get('title')}", + "title": CH_Event_map[self.payload.get('title')], "index": self.payload.get('index'), "predecessor_node_id": self.payload.get('predecessor_node_id'), "inputs": '', @@ -117,7 +135,7 @@ class ChatCallbackEvent(BaseModel): "id": self.payload.get('nodeid'), "node_id": self.payload.get('nodeid'), "node_type": "http-request", - "title": f"事件执行结束:{self.payload.get('title')}", + "title": CH_Event_map[self.payload.get('title')], "index": self.payload.get('index'), "predecessor_node_id": self.payload.get('predecessor_node_id'), "inputs": '', diff --git a/backend/app/engine/retriever/HybridRetriever.py b/backend/app/engine/retriever/HybridRetriever.py index 4bf0b8d..00b5495 100644 --- a/backend/app/engine/retriever/HybridRetriever.py +++ b/backend/app/engine/retriever/HybridRetriever.py @@ -43,6 +43,16 @@ class HybridRetriever(BaseRetriever): for node in bmNodes: bmDic[node.node_id] = node + vecScores = [node_with_score.score for node_with_score in vecNodes] + bmSores = [node_with_score.score for node_with_score in bmNodes] + + vec_min_score = min(vecScores) + vec_max_score = max(vecScores) + + bm_min_score = min(bmSores) + bm_max_score = max(bmSores) + + result_tups = [] for i in range(len(vecNodes)): node = vecNodes[i] @@ -52,7 +62,11 @@ class HybridRetriever(BaseRetriever): bmDic.pop(node.node_id) else: bmScore = 0.0 - full_similarity = (self._alpha * node.score) + ( + + bmScore = self.normal_score(bmScore,bm_min_score,bm_max_score) + vecScore = self.normal_score(node.score,vec_min_score,vec_max_score) + + full_similarity = (self._alpha * vecScore) + ( (1 - self._alpha) * bmScore ) result_tups.append((full_similarity, node)) @@ -64,4 +78,10 @@ class HybridRetriever(BaseRetriever): result_tups = sorted(result_tups, key=lambda x: x[0], reverse=True) for full_score, node in result_tups: node.score = full_score - return [n for _, n in result_tups][:self._out_top_k] \ No newline at end of file + return [n for _, n in result_tups][:self._out_top_k] + + def normal_score(self,score,min,max): + if min == max: + return 1.0 if score > 0 else 0.0 + else: + return (score - min) / (max - min) \ No newline at end of file