Skip to content

LangGraph

概念

LangGraph 是用于构建、管理和部署长期运行、有状态智能体的底层编排框架,属于 LangChain 生态中的高级库。

特点:

  • 持久执行:能够经受故障并长时间运行,从中断处自动恢复。
  • 人机协同:在执行过程中的任意时刻,通过检查与修改智能体状态引入人类监督。
  • 全面记忆:支持短期工作记忆(持续推理)与跨会话的长期持久记忆。

与 LangChain 的区别

LangGraph 为大模型应用带来更可控的循环计算能力。它超越了 LangChain 的线性工作流,通过循环与条件分支支持复杂、多步骤的任务处理。

维度LangChainLangGraph
流程模型线性链式(LCEL | 组合)图结构(节点 + 边 + 状态)
状态管理需额外封装内置有状态执行
适用场景单次调用、简单链多轮推理、工具循环、人机协作

学习 Agent 框架的八大要点

  1. 如何实现外部调用
  2. 如何实现多轮对话
  3. 如何实现流式输出
  4. 如何实现短期 / 长期记忆
  5. 如何实现人机交互
  6. 如何实现规划逻辑
  7. 如何实现多 Agent
  8. 如何实现 Debug 和监控

核心概念:图

LangGraph 将代理工作流建模为,通过三个组件定义行为:

组件说明
State(状态)共享数据结构,表示应用当前上下文;可为任意 Python 类型,通常为 TypedDict
Node(节点)编码代理逻辑的 Python 函数;接收当前 State,执行计算后返回更新后的 State
Edge(边)根据当前 State 决定下一步执行哪个 Node;支持条件分支或固定转换

组合 Node 与 Edge,即可构建复杂、多分支、可循环的动态工作流,State 随执行逐步演变。

代理架构

LangGraph 默认支持四种常见代理模式。从上到下,人为控制逐渐减少,自主性依次增强:

模式流程控制程度
路由代理用户输入 → LLM 意图分类 → 路由到对应专业节点
工具代理用户提问 → LLM 判断是否用工具 → 调用工具 → 整理回答
自主循环代理思考 → 行动 → 观察 → 回到自身节点继续思考
多代理一个模型分析问题并分类,分别交给对应模型处理最低

路由代理

构建路由图时,通常配合 .with_structured_output() 使用,输出格式可选 TypedDictJSON SchemaPydantic(推荐)。

Pydantic 结构化输出可确保数据符合指定结构与类型,减少处理错误;验证失败时会抛出异常,便于及早发现问题。

python
from typing import Optional
from pydantic import BaseModel, Field

class User(BaseModel):
    """Extracted user information, such as name, age if relevant"""
    name: str = Field(description="The name of user")
    age: Optional[int] = Field(description="The age of user")

字段说明:

  • name:必填
  • age:可选

工具代理

LangGraph 提供内置 ToolNode 用于工具调用,内部流程与 Function Calling 基本一致。

ToolNode 返回 LangChain Runnable 对象:以图状态(含消息列表)为输入,输出状态更新及工具调用结果,从而与 LangGraph 其他组件衔接。

使用前提:

  1. State 必须包含消息列表
  2. 最后一条消息必须是 AIMessage
  3. AIMessage 必须包含 tool_calls

自主循环代理(ReAct)

ReAct(Reasoning + Acting)是 Agent 的核心思考与行动框架:通过自然语言推理指导工具调用,形成「思考 → 行动 → 观察」的循环,直到任务完成。

在 LangGraph 中,自主循环代理通过边将节点指回自身实现循环:LLM 节点输出工具调用 → ToolNode 执行并写回观察结果 → 再次进入 LLM 节点继续推理。该模式适合多步推理、工具协作等场景(如智能客服、报告生成、任务规划)。

多代理

多代理模式下,通常由协调节点负责问题分析与任务分发,各子代理专注特定领域。LangGraph 的图结构天然支持多节点协作与条件路由,便于组合不同模型或不同工具集。

Released under the MIT License.