LangGraph
概念
LangGraph 是用于构建、管理和部署长期运行、有状态智能体的底层编排框架,属于 LangChain 生态中的高级库。
特点:
- 持久执行:能够经受故障并长时间运行,从中断处自动恢复。
- 人机协同:在执行过程中的任意时刻,通过检查与修改智能体状态引入人类监督。
- 全面记忆:支持短期工作记忆(持续推理)与跨会话的长期持久记忆。
与 LangChain 的区别
LangGraph 为大模型应用带来更可控的循环计算能力。它超越了 LangChain 的线性工作流,通过循环与条件分支支持复杂、多步骤的任务处理。
| 维度 | LangChain | LangGraph |
|---|---|---|
| 流程模型 | 线性链式(LCEL | 组合) | 图结构(节点 + 边 + 状态) |
| 状态管理 | 需额外封装 | 内置有状态执行 |
| 适用场景 | 单次调用、简单链 | 多轮推理、工具循环、人机协作 |
学习 Agent 框架的八大要点
- 如何实现外部调用
- 如何实现多轮对话
- 如何实现流式输出
- 如何实现短期 / 长期记忆
- 如何实现人机交互
- 如何实现规划逻辑
- 如何实现多 Agent
- 如何实现 Debug 和监控
核心概念:图
LangGraph 将代理工作流建模为图,通过三个组件定义行为:
| 组件 | 说明 |
|---|---|
| State(状态) | 共享数据结构,表示应用当前上下文;可为任意 Python 类型,通常为 TypedDict |
| Node(节点) | 编码代理逻辑的 Python 函数;接收当前 State,执行计算后返回更新后的 State |
| Edge(边) | 根据当前 State 决定下一步执行哪个 Node;支持条件分支或固定转换 |
组合 Node 与 Edge,即可构建复杂、多分支、可循环的动态工作流,State 随执行逐步演变。
代理架构
LangGraph 默认支持四种常见代理模式。从上到下,人为控制逐渐减少,自主性依次增强:
| 模式 | 流程 | 控制程度 |
|---|---|---|
| 路由代理 | 用户输入 → LLM 意图分类 → 路由到对应专业节点 | 高 |
| 工具代理 | 用户提问 → LLM 判断是否用工具 → 调用工具 → 整理回答 | 中 |
| 自主循环代理 | 思考 → 行动 → 观察 → 回到自身节点继续思考 | 低 |
| 多代理 | 一个模型分析问题并分类,分别交给对应模型处理 | 最低 |
路由代理
构建路由图时,通常配合 .with_structured_output() 使用,输出格式可选 TypedDict、JSON Schema 或 Pydantic(推荐)。
Pydantic 结构化输出可确保数据符合指定结构与类型,减少处理错误;验证失败时会抛出异常,便于及早发现问题。
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 其他组件衔接。
使用前提:
- State 必须包含消息列表
- 最后一条消息必须是
AIMessage AIMessage必须包含tool_calls
自主循环代理(ReAct)
ReAct(Reasoning + Acting)是 Agent 的核心思考与行动框架:通过自然语言推理指导工具调用,形成「思考 → 行动 → 观察」的循环,直到任务完成。
在 LangGraph 中,自主循环代理通过边将节点指回自身实现循环:LLM 节点输出工具调用 → ToolNode 执行并写回观察结果 → 再次进入 LLM 节点继续推理。该模式适合多步推理、工具协作等场景(如智能客服、报告生成、任务规划)。
多代理
多代理模式下,通常由协调节点负责问题分析与任务分发,各子代理专注特定领域。LangGraph 的图结构天然支持多节点协作与条件路由,便于组合不同模型或不同工具集。
