05. LangGraph 深度解析:从基础概念到高级应用全指南

引言

在构建复杂的人工智能应用时,我们经常面临状态管理、流程控制和多智能体协作等挑战。LangGraph 正是为了解决这些痛点而生的强大框架。作为 LangChain 生态的重要补充,LangGraph 允许开发者以图(Graph)的形式编排大语言模型(LLM)和工具,从而实现高度定制化、具备状态感知和循环执行能力的 AI 工作流。

本文将带你全面深入地探索 LangGraph。我们将从它的核心概念出发,逐步深入到 State 的进阶用法、高级特性(如并行执行、持久化、中断机制)、工具调用以及多智能体系统的构建。无论你是 LangChain 的老用户还是 AI 应用开发的新手,这篇指南都将为你提供清晰的学习路径和实战参考。


第一部分:LangGraph 概述

什么是 LangGraph?

LangGraph 是一个用于构建具有状态、多步骤、循环和分支逻辑的 LLM 应用程序的库。如果说 LangChain 提供了构建 AI 应用的"积木"(如 Prompt、LLM、Tools),那么 LangGraph 就是将这些积木组装成复杂机器的"图纸"和"传动系统"。

LangGraph 与 LangChain 的关系

LangGraph 建立在 LangChain 之上,但它的定位更加聚焦:

  • LangChain:侧重于组件的抽象和链式调用(Chain),适合线性的、相对简单的任务流。
  • LangGraph :侧重于图结构状态管理,适合需要循环(如 Agent 的自我纠错)、条件分支、多智能体协作以及需要持久化状态的复杂工作流。

简单来说,LangGraph 让你能够像画流程图一样编排 AI 逻辑,并且这个流程图是"活"的------它知道当前执行到了哪一步,上一步的结果是什么。


第二部分:核心概念详解

LangGraph 的架构建立在四个核心概念之上:State(状态)Node(节点)Edge(边)Graph 编译

1. State(状态)

State 是整个图的"记忆"。它是一个在图的执行过程中不断被传递和更新的字典(或 TypedDict)。每个节点都可以读取 State,也可以返回更新后的 State。

python 复制代码
from typing import TypedDict

class AgentState(TypedDict):
    messages: list
    next_step: str

2. Node(节点)

Node 是执行具体逻辑的单元。通常,一个 Node 是一个 Python 函数,它接收当前的 State,执行某些操作(如调用 LLM、执行工具),然后返回需要更新的 State 字段。

python 复制代码
def call_model(state: AgentState):
    response = llm.invoke(state["messages"])
    return {"messages": [response]}

3. Edge(边)

Edge 定义了节点之间的连接关系,即执行流程。LangGraph 支持两种边:

  • 普通边(Normal Edge):无条件地从节点 A 流向节点 B。
  • 条件边(Conditional Edge):根据当前 State 的值,动态决定下一步流向哪个节点。这是实现 Agent 循环和分支逻辑的关键。
python 复制代码
# 条件边示例:根据 LLM 是否调用了工具来决定下一步
def should_continue(state: AgentState):
    last_message = state["messages"][-1]
    if last_message.tool_calls:
        return "tools"
    return "end"

graph.add_conditional_edges("agent", should_continue, {"tools": "tools", "end": END})

4. Graph 编译(Compile)

定义好节点和边之后,我们需要调用 compile() 方法将图编译成一个可执行的对象。编译过程会验证图的结构,确保没有孤立节点或死循环。

python 复制代码
app = graph.compile()
result = app.invoke({"messages": ["Hello!"]})

第三部分:State 进阶

在实际应用中,State 的管理往往比简单的字典覆盖要复杂得多。LangGraph 提供了 Schema 模式Reducers(归约器) 来优雅地处理这些问题。

1. Schema 模式

推荐使用 TypedDict 或 Pydantic 模型来定义 State 的 Schema。这不仅提供了类型提示,还能在编译阶段捕获错误。

python 复制代码
from typing import Annotated
from langgraph.graph.message import add_messages

class State(TypedDict):
    # 使用 Annotated 和 add_messages 作为 reducer
    messages: Annotated[list, add_messages]
    user_input: str

2. Reducers(归约器)

默认情况下,节点返回的 State 更新会覆盖 原有值。但在很多场景下(如消息列表),我们希望追加而不是覆盖。Reducers 就是用来定义这种合并逻辑的。

  • add_messages:LangGraph 内置的 reducer,专门用于消息列表。它会根据消息 ID 智能地追加或更新消息,避免重复。
  • 自定义 Reducer:你可以编写任何函数作为 reducer。例如,实现一个计数器:
python 复制代码
def sum_reducer(current, new):
    return current + new

class State(TypedDict):
    count: Annotated[int, sum_reducer]

3. 多模式 State

在某些复杂图中,不同的子图或节点可能需要不同的 State 视图。LangGraph 支持通过 input_schema 和 output_schema 来限制节点看到和修改的 State 范围,实现关注点分离。


第四部分:高级特性

LangGraph 的真正威力在于其高级特性,这些特性让构建生产级 AI 应用成为可能。

1. Send 与并行执行

当需要同时处理多个独立任务时,Send API 允许你在条件边中动态生成多个并行分支。

python 复制代码
from langgraph.types import Send

def fan_out(state: State):
    # 为每个待处理项创建一个 Send 对象
    return [Send("process_item", {"item": item}) for item in state["items"]]

graph.add_conditional_edges("router", fan_out)

2. Command(命令)

Command 允许节点在返回状态更新的同时,显式地指定下一个要执行的节点。这在动态路由场景中非常有用,将路由逻辑内聚到节点内部。

python 复制代码
from langgraph.types import Command

def router_node(state: State):
    next_node = determine_next(state)
    return Command(goto=next_node, update={"routed_at": "now"})

3. Persistence(持久化)

生产环境中的 AI 应用需要支持暂停、恢复、回溯和时间旅行调试。LangGraph 通过 Checkpointer 实现状态持久化。

python 复制代码
from langgraph.checkpoint.memory import MemorySaver

checkpointer = MemorySaver()
app = graph.compile(checkpointer=checkpointer)

# 每次调用传入 thread_id,状态会自动保存和恢复
config = {"configurable": {"thread_id": "user-123"}}
app.invoke({"messages": ["Hi"]}, config)

4. Interrupt(中断)

Interrupt 允许图在执行到某一步时暂停,等待外部输入(如人类审批、用户确认)。结合 Checkpointer,可以实现完美的人机交互循环。

python 复制代码
from langgraph.types import interrupt

def human_approval(state: State):
    # 图会在这里暂停,等待外部调用 resume
    decision = interrupt({"question": "是否批准此操作?"})
    return {"approved": decision}

5. Subgraphs(子图)

当图变得过于复杂时,可以将其拆分为子图。子图拥有自己的 State 和编译逻辑,通过父图的节点进行调用。这实现了逻辑的模块化和复用。


第五部分:工具调用与 ToolNode

工具调用是 Agent 的核心能力。LangGraph 提供了 ToolNode 来标准化这一过程。

ToolNode 的工作原理

ToolNode 是一个预构建的节点,它会自动:

  1. 检查 State 中最后一条消息是否包含 tool_calls。

  2. 并行执行所有工具调用。

  3. 将工具执行结果作为 ToolMessage 追加到 State 的 messages 中。

python 复制代码
from langgraph.prebuilt import ToolNode

tools = [search_tool, calculator_tool]
tool_node = ToolNode(tools)

graph.add_node("tools", tool_node)

错误处理

ToolNode 还支持自定义错误处理。当工具执行失败时,它可以返回一个包含错误信息的 ToolMessage,而不是直接抛出异常,让 LLM 有机会自我纠错。


第六 部分:多智能体系统

LangGraph 是构建多智能体(Multi-Agent)系统的理想选择。常见的模式包括:

1. Supervisor(主管)模式

一个主管 Agent 负责理解任务、分配工作给专业 Agent,并汇总结果。

User\] → \[Supervisor\] → \[Coder\] / \[Reviewer\] → \[Supervisor\] → \[User

2. Swarm(群体)模式

Agent 之间通过 Command(goto=...) 或共享 State 进行点对点通信,没有中心化的主管。每个 Agent 自主决定何时将控制权交给下一个 Agent。

3. 层级模式

结合 Subgraphs,构建多层级的智能体组织。例如,一个"工程团队"子图内部包含"架构师"、"开发者"、"测试员"等多个节点。

多智能体系统的关键在于通信协议状态共享。LangGraph 的 State 和 Edge 机制天然支持这些需求。


总结与展望

LangGraph 为 AI 应用开发带来了范式转变。通过图结构、状态管理和高级控制流,它让我们能够构建出真正具备"智能体"特性的应用------它们能够推理、规划、使用工具、自我纠错,甚至与其他智能体协作。

核心要点回顾: - State 是图的记忆,使用 Reducers 管理更新逻辑。 - NodeEdge 构成执行流,条件边实现动态路由。 - 高级特性 (Send、Command、Persistence、Interrupt、Subgraphs)是构建生产级应用的基石。 - ToolNode 和多智能体模式让 Agent 能力无限扩展。

随着 LangGraph 的不断演进,我们可以期待更多开箱即用的预构建组件、更强大的可视化调试工具,以及与更多外部系统的深度集成。无论你是想构建一个智能客服、自动化研究助手,还是复杂的企业级 AI 工作流,LangGraph 都为你提供了坚实的技术底座。

现在,打开你的编辑器,开始绘制你的第一个 AI 工作流图吧!

相关推荐
AI程序员39 分钟前
MCP Apps 能直接返回 HTML,为什么还需要 A2UI?
人工智能·agent·mcp
luckystar513~2 小时前
Hermes实战 :skill编写 + skill治理
人工智能·agent·智能体·hermes·实战专栏
海天一色y2 小时前
构建智能Agent的记忆系统:三层记忆管理器设计
agent·memory
张忠琳4 小时前
【deepseek-harness】Cordis 开源项目深度介绍
ai·agent·deepseek·harness·cordis·dsh
wangruofeng4 小时前
2000+ 小时实战后,我的 Agentic Engineering 全套装备「精译」
aigc·agent·ai编程
tachibana25 小时前
如何设计多 Agent 的协作与动态切换机制?
网络·人工智能·ai·大模型·llm·agent
DeepAgent5 小时前
AI Agent 工程实践(39):第一次实现——先做一个最小 Agent
大数据·人工智能·agent
阿图灵6 小时前
LangGraph 实战 03:Workflows 与 Agents——六种工作流模式与智能体实战(附 6 个可运行示例)
java·前端·javascript·工作流·ai agent·智能体·langgraph
大模型真好玩6 小时前
DeepSeek Harness 入门很简单(一)——认识DeepSeek Harness并安装
人工智能·agent·deepseek