2025/12/24 1:45:10
网站建设
项目流程
湘潭seo公司,seo网页优化公司,营销型网站建设新感觉建站,织梦系统做的网站忘记登录密码本文我们将重点探讨在构建智能体系统的过程中#xff0c;工具调用 (Tool Calling) 是一项至关重要的能力。智能体通过调用各种外部工具#xff0c;可以扩展自身的能力边界#xff0c;完成更复杂、更实用的任务。
LangGraph 框架提供了强大的工具调用支持#xff0c;并预置…本文我们将重点探讨在构建智能体系统的过程中工具调用 (Tool Calling) 是一项至关重要的能力。智能体通过调用各种外部工具可以扩展自身的能力边界完成更复杂、更实用的任务。LangGraph 框架提供了强大的工具调用支持并预置了ToolNode组件极大地简化了在 LangGraph 图中集成和使用工具的流程。1、 ToolNodeLangGraph 的工具调用中心ToolNode是 LangGraph 框架预置的核心组件专门用于处理工具调用操作。可以将其理解为 LangGraph 图中的工具执行器或工具调度中心。ToolNode 内部封装了工具的执行逻辑可以根据 LLM 的工具调用请求动态地调度和调用预先注册的工具并将工具的执行结果返回。ToolNode 支持同步和异步工具调用并自动处理工具执行过程中的错误 例如工具不存在、参数校验失败、工具运行时异常。ToolNode 会将工具的执行结果封装成 ToolMessage 类型的消息并将其添加到图的状态 消息历史列表 中作为状态更新输出。ToolNode 操作 MessagesState。输入MessagesState其中最后一条消息是包含 tool_calls 参数的AIMessage。输出MessagesState更新为执行工具后产生的 ToolMessage。ToolNode 的核心职责\1.接收来自 LLM 的工具调用请求与支持工具调用的 LLM 模型集成接收工具调用请求。\2.执行工具调用动态调度和调用预先注册的工具并返回执行结果。\3.更新图状态将工具执行结果封装成ToolMessage并添加到图状态中。最近两年大家都可以看到AI的发展有多快我国超10亿参数的大模型在短短一年之内已经超过了100个现在还在不断的发掘中时代在瞬息万变我们又为何不给自己多一个选择多一个出路多一个可能呢与其在传统行业里停滞不前不如尝试一下新兴行业而AI大模型恰恰是这两年的大风口整体AI领域2025年预计缺口1000万人其中算法、工程应用类人才需求最为紧迫学习AI大模型是一项系统工程需要时间和持续的努力。但随着技术的发展和在线资源的丰富零基础的小白也有很好的机会逐步学习和掌握。【点击蓝字获取】【2025最新】AI大模型全套学习籽料可白嫖LLM面试题AI大模型学习路线大模型PDF书籍640套AI大模型报告等等从入门到进阶再到精通超全面存下吧使用 ToolNode 的优势•简化工具集成封装工具调用复杂性开发者只需简单注册工具列表。•原生支持 LangChain 工具与 LangChain 工具体系无缝集成。•内置错误处理自动捕获工具执行异常提高系统鲁棒性。•兼容 ReAct Agent与 LangGraph 预置的 ReAct 组件高度兼容。LangGraph 推荐使用 LangChain 的 tool 装饰器来定义工具函数。tool 装饰器可以将普通的 Python 函数快速地转换成 LangChain Tool并自动生成工具描述信息和参数 Schema便于LLM 理解和调用工具。定义工具有以下关键要素1tool 装饰器必须使用 tool 装饰器将 Python 函数转换为 LangChain Tool 工具。2清晰详细的 docstring尽可能使用自然语言清晰详细地描述工具的功能、输入参数和输出结果以便 LLM 更好地理解。3类型提示建议为工具函数的参数和返回值添加明确的类型提示TypeHints例如location: str、year: int、→ str、→ list[str] 等。4合理的工具名称可通过 tool( 自定义工具名称) 显式指定应简洁明确具有描述性例如“get_weather_information” “search_wikipedia” 等。示例 1使用 ToolNode 构建工具调用智能体from langchain_core.tools import tool from langchain_core.messages import AIMessage from langgraph.prebuilt import ToolNode tool # 使用 tool 装饰器将 Python 函数转换为 LangChain Tool def get_weather(location: str): # 定义工具函数 get_weather, location 参数用于接收城市名称 Call to get the current weather. # 工具函数的 docstring 会被作为工具的描述信息提供给 LLM if location.lower() in [sf, san francisco]: return Its 60 degrees and foggy. else: return Its 90 degrees and sunny. tool def get_coolest_cities(): Get a list of coolest cities return nyc, sf # 创建 ToolNode 实例注册工具列表 (包含 get_weather 和 get_coolest_cities 两个工具) tools [get_weather, get_coolest_cities] tool_node ToolNode(tools) # 构造包含单个工具调用请求的 AIMessage message_with_single_tool_call AIMessage( # 创建 AIMessage content, # content 为空字符串表示该消息主要用于工具调用不包含文本内容 tool_calls[ # tool_calls 参数包含工具调用请求列表 { name: get_weather, # 工具名称必须与注册的工具名称一致 args: {location: sf}, # 工具参数必须与工具函数定义的参数匹配 id: tool_call_id, # 工具调用 ID用于唯一标识工具调用 可以自定义 type: tool_call, # 消息类型固定为 tool_call } ], ) # 手动调用 ToolNode输入为包含 AIMessage 的状态字典 tool_node_output tool_node.invoke({messages: [message_with_single_tool_call]}) print(tool_node_output) # 打印 ToolNode 的输出结果 {messages: [ToolMessage(contentIts 60 degrees and foggy., nameget_weather, tool_call_idtool_call_id)]}示例 2手动调用 ToolNode并行工具调用# 构造包含多个工具调用请求的 AIMessage message_with_multiple_tool_calls AIMessage( # 创建 AIMessage content, tool_calls[ # tool_calls 参数包含多个工具调用请求 { name: get_coolest_cities, # 工具 1get_coolest_cities args: {}, id: tool_call_id_1, type: tool_call, }, { name: get_weather, # 工具 2get_weather args: {location: sf}, id: tool_call_id_2, type: tool_call, }, ], ) # 手动调用 ToolNode, 输入为包含 AIMessage 的状态字典 tool_node_output tool_node.invoke({messages: [message_with_multiple_tool_calls]}) print(tool_node_output) # 打印 ToolNode 的输出结果 {messages: [ToolMessage(contentnyc, sf, nameget_coolest_cities, tool_call_idtool_call_id_1), ToolMessage(contentIts 60 degrees and foggy., nameget_weather, tool_call_idtool_call_id_2)]}在 LangGraph 图中使用 ToolNode理解了 ToolNode 的工作原理和手动调用方法后即可将其集成到 LangGraph 图中构建具备工具调用能力的 ReAct 智能体。ToolNode 通常与 LLM 节点和条件路由节点配合使用构成 ReAct 智能体的基本运行流程。1LLM 节点 Agent Node负责接收用户输入和对话历史调用 LLM 生成智能体行为。如果 LLM 决定调用工具则会返回包含 tool_calls 的 AIMessage指示需要调用哪些工具以及工具的参数如果 LLM 决定直接回复用户则会返回不包含 tool_calls的 AIMessage指示对话结束或等待用户进一步输入。2ToolNode 工具节点负责接收来自 LLM 节点的工具调用请求调度和执行相应的工具并将执行结果封装为 ToolMessage 返回。3条件路由节点 Conditional Edge负责根据 LLM 节点的输出结果动态地决定流程走向。若返回了 tool_calls 指示需要调用工具则路由到 ToolNode节点执行工具调用否则将路由到 END 节点结束对话流程或等待用户进一步输入。示例 3在 LangGraph 图中使用 ToolNode 构建 ReAct 智能体from langgraph.graph import StateGraph, MessagesState, START, END # 导入 MessagesState from langgraph.prebuilt import ToolNode # 导入 ToolNode from langchain_openai import ChatOpenAI # ... (get_weather, get_coolest_cities 工具函数的定义此处省略) ... tools [get_weather, get_coolest_cities] # 工具列表 tool_node ToolNode(tools) # 创建 ToolNode 实例注册工具列表 model_with_tools ChatOpenAI(modelQwen/Qwen3-8B, temperature0).bind_tools(tools) # 绑定工具列表到 LLM 模型 def should_continue(state: MessagesState): # 条件路由函数判断是否继续工具调用 messages state[messages] last_message messages[-1] # 获取最后一个消息 (LLM 模型的输出) if last_message.tool_calls: # 判断最后一个消息是否包含 tool_calls (工具调用请求) return tools # 如果包含 tool_calls, 则路由到 tools 节点 (ToolNode)执行工具调用 return END # 如果不包含 tool_calls, 则路由到 END 节点结束流程 def call_model(state: MessagesState): # LLM 模型节点函数 messages state[messages] response model_with_tools.invoke(messages) # 调用 LLM 模型生成 AI 消息 (可能包含 tool_calls) return {messages: [response]} # 返回包含 AI 消息的状态更新 workflow StateGraph(MessagesState) # 创建 StateGraph 实例状态 Schema 为 MessagesState workflow.add_node(agent, call_model) # 添加 LLM 模型节点节点名为 agent workflow.add_node(tools, tool_node) # 添加 ToolNode 节点节点名为 tools workflow.add_edge(START, agent) # 定义从 START 节点到 agent 节点的边 (流程入口) workflow.add_conditional_edges(agent, should_continue, [tools, END]) # 定义条件边根据 agent 节点的输出动态路由到 tools 节点或 END 节点 workflow.add_edge(tools, agent) # 定义从 tools 节点到 agent 节点的边 (ReAct 循环) app workflow.compile() # 编译 LangGraph 图 app.invoke({messages: [{role: user, content: what is the weather in sf}]}) {messages: [HumanMessage(contentwhat is the weather in sf, additional_kwargs{}, response_metadata{}, id34ecd7e5-d783-432d-8e10-b88e07ddaf62), AIMessage(content\n\n, additional_kwargs{tool_calls: [{id: 0198c62a207bdc8ef9a5afb762ec5225, function: {arguments: {location: sf}, name: get_weather}, type: function, index: 0}], refusal: None}, response_metadata{token_usage: {completion_tokens: 156, prompt_tokens: 204, total_tokens: 360, completion_tokens_details: {accepted_prediction_tokens: None, audio_tokens: None, reasoning_tokens: 148, rejected_prediction_tokens: None}, prompt_tokens_details: None}, model_name: Qwen/Qwen3-8B, system_fingerprint: , finish_reason: tool_calls, logprobs: None}, idrun--f86d6a8c-d6a8-4a73-80df-70618ced2b13-0, tool_calls[{name: get_weather, args: {location: sf}, id: 0198c62a207bdc8ef9a5afb762ec5225, type: tool_call}], usage_metadata{input_tokens: 204, output_tokens: 156, total_tokens: 360, input_token_details: {}, output_token_details: {reasoning: 148}}), ToolMessage(contentIts 60 degrees and foggy., nameget_weather, id55196e1a-c8e4-40c3-ba2a-3dae67151012, tool_call_id0198c62a207bdc8ef9a5afb762ec5225), AIMessage(content\n\nThe current weather in San Francisco is 60 degrees Fahrenheit and foggy. Be sure to carry an umbrella if youre heading out!, additional_kwargs{refusal: None}, response_metadata{token_usage: {completion_tokens: 184, prompt_tokens: 246, total_tokens: 430, completion_tokens_details: {accepted_prediction_tokens: None, audio_tokens: None, reasoning_tokens: 155, rejected_prediction_tokens: None}, prompt_tokens_details: None}, model_name: Qwen/Qwen3-8B, system_fingerprint: , finish_reason: stop, logprobs: None}, idrun--e85daa98-1594-4ef6-a759-c52de36c9fa6-0, usage_metadata{input_tokens: 246, output_tokens: 184, total_tokens: 430, input_token_details: {}, output_token_details: {reasoning: 155}})]}在示例 3 中我们创建了一个实用的StateGraph 工作流实例。我们定义了agent LLM 节点 和 toolsToolNode 节点两个核心节点以及一个条件路由函数should_continue。该函数根据LLM 节点的输出动态地控制流程的走向在工具调用路由到 tools 节点和结束对话路由到 END 节点之间进行选择。通过边连接这些节点构建了基本的 ReAct 循环。最后调用 workflow.compile() 方法编译此示例展示了使用 ToolNode 构建的 ReAct 智能体能够成功地接收用户输入调用 get_weather 工具查询天气信息并基于工具的执行结果生成最终的回复完成基于工具调用的 ReAct 循环。ToolNode 组件作为工具调度和执行的核心模块简化了工具集成和 ReAct 智能体构建流程使开发者能更专注于智能体核心逻辑和业务功能的开发。总结通过以上步骤用户可以利用 LangGraph 的 ToolNode 实现多种工具调用和集成增强用户交互体验。这种方法不仅让工具调用过程更加灵活也使得 AI 模型能够更好地响应用户查询。最近两年大家都可以看到AI的发展有多快我国超10亿参数的大模型在短短一年之内已经超过了100个现在还在不断的发掘中时代在瞬息万变我们又为何不给自己多一个选择多一个出路多一个可能呢与其在传统行业里停滞不前不如尝试一下新兴行业而AI大模型恰恰是这两年的大风口整体AI领域2025年预计缺口1000万人其中算法、工程应用类人才需求最为紧迫学习AI大模型是一项系统工程需要时间和持续的努力。但随着技术的发展和在线资源的丰富零基础的小白也有很好的机会逐步学习和掌握。【点击蓝字获取】【2025最新】AI大模型全套学习籽料可白嫖LLM面试题AI大模型学习路线大模型PDF书籍640套AI大模型报告等等从入门到进阶再到精通超全面存下吧