Langgraph ToolNode 的原理 及综合实战

Langgraph ToolNode 的原理

LangGraph ToolNode 是一个预构建的组件,用于在 LangGraph 状态图中执行工具调用。它的核心原理和工作机制如下:

基本原理

ToolNode 是一个 LangChain Runnable,它接收图状态(包含消息列表)作为输入,并输出工具调用结果的状态更新。

工作流程

  1. ToolNode 期望接收到的最后一条消息是包含 tool_calls 参数的 AIMessage。ToolNode 在图状态中操作,状态中包含消息列表,它期望消息列表中的最后一条消息是一个带有 tool_calls 参数的 AIMessage。
  2. 工具调用消息需要特定的结构。AIMessage 的内容必须为空,tool_calls 需要特定的结构,结果处理需要进行类型验证。
  3. ToolNode 执行工具调用,并返回 ToolMessage 格式的结果。如果请求多个工具调用,它们将并行执行,输出将是每个工具调用对应的 ToolMessage 列表。

状态管理

默认情况下,ToolNode 只会更新状态中的 messages 键。预构建的 ToolNode 仅会将消息追加到状态中的 messages 键。如果需要更新其他状态变量,则需要创建自定义节点。

ToolNode 的设计使其特别适合与 LangGraph 的 ReAct agent 配合使用,它可以自动处理返回 Command 对象的工具,并将其传播到图状态中。如果你使用的工具会通过 Command 更新状态,推荐使用预构建的 ToolNode,它可以自动处理返回 Command 对象的工具,并将其传播到图状态中。

客户服务系统

客户服务系统,其中包含一个"信息收集"Agent 和一个"问题解决"Agent。

两个 Agent 协作处理客户服务请求:

  1. 信息收集 Agent:负责获取客户的基本信息,通过 ToolNode 调用 get_customer_info 工具。
  2. 问题解决 Agent:在获得客户信息后,使用 check_order_statusrefund_order 工具来解决客户的问题。
    主要特点:
  • 使用 LangGraph 的 StateGraph 管理两个 Agent 的状态和流程
  • 每个 Agent 有自己的 ToolNode 实例和专属工具
  • 通过条件边(conditional edges)控制 Agent 之间的切换
  • 使用统一的状态结构在 Agent 之间传递信息

工作流程:

  1. 用户提出问题
  2. 信息收集 Agent 提取客户ID并调用工具获取客户信息
  3. 系统自动切换到问题解决 Agent
  4. 问题解决 Agent 使用订单相关工具处理问题
  5. 问题解决后,流程结束

这种设计让每个 Agent 专注于特定任务,同时通过 LangGraph 的图结构实现灵活的协作。

import operator
from typing import Annotated, List, TypedDict, Literal
from langchain_core.messages import BaseMessage, HumanMessage, AIMessage, ToolMessage
from langchain_core.tools import tool
from langgraph.graph import StateGraph, END
from langgraph.prebuilt import ToolNode
from langchain_anthropic import ChatAnthropic
from langgraph.graph.message import add_messages

# 定义状态结构
class AgentState(TypedDict):
    messages: Annotated[List[BaseMessage], add_messages]
    next_agent: str
    customer_info: dict
    issue_solved: bool

# 定义工具
@tool
def get_customer_info(customer_id: str) -> dict:
    """根据客户ID获取客户基本信息"""
    # 模拟数据库查询
    return {
   
        "name": "张三",
        "id": customer_id,
        "membership_level": "VIP",
        "last_purchase": "2024-12-15"
    }

@tool
def 
基于大模型智能体Agent的LangGraph入门与实战课程目标:本课程旨在为LangGraph的初学者提供深入的理论知识和实践技能,使其能够独立构建和部署基于LangGraph的应用程序。课程形式:理论讲解 + 实战演练第1课 LangGraph基础架构与环境配置-LangGraph的概念解析第2课 LangGraph基础架构与环境配置-LangGraph的环境搭建与依赖管理第3课 LangGraph的基础原理与应用入门-构建基本聊天机器人及使用工具增强第4课 LangGraph的基础原理与应用入门-内存管理、人在回路、状态更新第5课 LangGraph高级图控制技术-并行节点扇出和扇入、增加额外步骤、条件分支第6课 LangGraph高级图控制技术-稳定排序、Map-Reduce并行执行、图递归控制第7课 LangGraph持久化机制与状态管理-线程级持久化、子图持久化、跨线程持久化第8课 LangGraph Human-in-the-loop-断点设置、动态设置断点、编辑更新状态第9课 LangGraph Human-in-the-loop-等待用户输入、时间旅行、工具评审第10课 LangGraph在具有长期记忆的有状态Agent中的应用-长期记忆及短期记忆、过滤信息、删掉信息第11课 LangGraph在具有长期记忆的有状态Agent中的应用-摘要总结、跨线程持久化、代理语义搜索第12课 LangGraph工具集成与调用-直接调用ToolNode、大模型使用工具第13课 LangGraph工具集成与调用-工具调用报错处理、运行时值传递给工具、注入参数第14课 LangGraph工具集成与调用-配置传入工具、从工具更新图状态、管理大量工具第15课 LangGraph子图设计与实现-添加及使用子图、父图及子图状态管理第16课 LangGraph子图设计与实现-子图状态的查看与更新、子图输入输出的转换与处理第17课 LangGraph项目实战演练-多智能体系统主管委托各个代理第18课 LangGraph课程复习与答疑 自我反思案例及论文案例讲解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI Agent首席体验官

您的打赏是我继续创作的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值