声明:本站文章均为作者个人原创,图片均为实际截图。如有需要请收藏网站,禁止转载,谢谢配合!!!

作用:确保工具执行失败时不会导致整个 agent 运行中断

ToolErrorHandlingMiddleware 拦截所有工具调用(wrap_tool_call / awrap_tool_call),用 try-except 包裹:

def wrap_tool_call(
        self,
        request: ToolCallRequest,
        handler: Callable[[ToolCallRequest], ToolMessage | Command],
    ) -> ToolMessage | Command:
        try:
            return handler(request)
        except GraphBubbleUp:
            # Preserve LangGraph control-flow signals (interrupt/pause/resume).
            raise
        except Exception as exc:
            logger.exception("Tool execution failed (sync): name=%s id=%s", request.tool_call.get("name"), request.tool_call.get("id"))
            return self._build_error_message(request, exc)

正常执行 → 返回工具结果
GraphBubbleUp → 放行,这是 LangGraph 的内部控制信号
其他异常 → 构造一个带 status=”error” 的 ToolMessage 返回给 LLM

_build_error_message 构造一个错误 ToolMessage,将工具异常转换为结构化响应