From 47e35bfd00041e30b1edb81b2f855da66cf82aa1 Mon Sep 17 00:00:00 2001 From: root <953994191@qq.com> Date: Wed, 6 May 2026 19:10:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AD=90=E5=9B=BE=E5=8C=85?= =?UTF-8?q?=E8=A3=85=E5=99=A8=EF=BC=9A=E4=BD=BF=E7=94=A8dispatch=5Fcustom?= =?UTF-8?q?=5Fevent=EF=BC=8C=E7=94=A8ainvoke?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/main_graph/subgraph_wrapper.py | 95 ++++++++++------------ 1 file changed, 42 insertions(+), 53 deletions(-) diff --git a/backend/app/main_graph/subgraph_wrapper.py b/backend/app/main_graph/subgraph_wrapper.py index 91c08f5..345bb7e 100644 --- a/backend/app/main_graph/subgraph_wrapper.py +++ b/backend/app/main_graph/subgraph_wrapper.py @@ -9,6 +9,7 @@ from langchain_core.runnables.config import RunnableConfig from .state import MainGraphState, ErrorRecord, ErrorSeverity from backend.app.logger import info +from ._utils import dispatch_custom_event, make_react_event def wrap_subgraph_for_error_handling(subgraph, name: str): @@ -23,27 +24,23 @@ def wrap_subgraph_for_error_handling(subgraph, name: str): """ async def wrapped_node(state: MainGraphState, config: Optional[RunnableConfig] = None) -> MainGraphState: # 发送子图开始事件 - if config: - try: - from langchain_core.callbacks.manager import adispatch_custom_event - callbacks = config.get("callbacks") - if callbacks: - await adispatch_custom_event( - "react_reasoning", - { - "step": state.reasoning_step, - "action": f"{name}_subgraph_start", - "confidence": 1.0, - "reasoning": f"开始执行 {name} 子图..." - }, - callbacks=callbacks - ) - except Exception as e: - info(f"[{name}_subgraph] 无法发送开始事件: {e}") + try: + await dispatch_custom_event( + "react_reasoning", + make_react_event( + state.reasoning_step, + f"{name}_subgraph_start", + 1.0, + f"开始执行 {name} 子图..." + ), + config + ) + except Exception as e: + info(f"[{name}_subgraph] 无法发送开始事件: {e}") try: - # 调用子图 - result = subgraph.invoke(state) + # 调用子图(异步,传 config) + result = await subgraph.ainvoke(state, config=config) # 更新主图状态 subgraph_result = None @@ -75,23 +72,19 @@ def wrap_subgraph_for_error_handling(subgraph, name: str): }) # 发送子图完成事件 - if config: - try: - from langchain_core.callbacks.manager import adispatch_custom_event - callbacks = config.get("callbacks") - if callbacks: - await adispatch_custom_event( - "react_reasoning", - { - "step": state.reasoning_step, - "action": f"{name}_subgraph_complete", - "confidence": 1.0, - "reasoning": f"{name} 子图执行完成" - }, - callbacks=callbacks - ) - except Exception as e: - info(f"[{name}_subgraph] 无法发送完成事件: {e}") + try: + await dispatch_custom_event( + "react_reasoning", + make_react_event( + state.reasoning_step, + f"{name}_subgraph_complete", + 1.0, + f"{name} 子图执行完成" + ), + config + ) + except Exception as e: + info(f"[{name}_subgraph] 无法发送完成事件: {e}") return state @@ -113,23 +106,19 @@ def wrap_subgraph_for_error_handling(subgraph, name: str): state.success = False # 发送子图错误事件 - if config: - try: - from langchain_core.callbacks.manager import adispatch_custom_event - callbacks = config.get("callbacks") - if callbacks: - await adispatch_custom_event( - "react_reasoning", - { - "step": state.reasoning_step, - "action": f"{name}_subgraph_error", - "confidence": 1.0, - "reasoning": f"{name} 子图执行失败: {str(e)}" - }, - callbacks=callbacks - ) - except Exception as e: - info(f"[{name}_subgraph] 无法发送错误事件: {e}") + try: + await dispatch_custom_event( + "react_reasoning", + make_react_event( + state.reasoning_step, + f"{name}_subgraph_error", + 1.0, + f"{name} 子图执行失败: {str(e)}" + ), + config + ) + except Exception as e: + info(f"[{name}_subgraph] 无法发送错误事件: {e}") return state