
LangGraph 深度科普:为智能体而生的"有状态"编排框架
-
- [一、LangGraph 是什么](#一、LangGraph 是什么)
- [二、为什么需要 LangGraph](#二、为什么需要 LangGraph)
- 三、核心概念:图、节点、边、状态
-
- [1. 状态(State)](#1. 状态(State))
- [2. 节点(Nodes)](#2. 节点(Nodes))
- [3. 边(Edges)](#3. 边(Edges))
- [4. 图(Graph)](#4. 图(Graph))
- 四、工作流程:从构建到运行
- 五、关键能力详解
-
- [1. 状态持久化与检查点](#1. 状态持久化与检查点)
- [2. 人在回路(Human-in-the-Loop)](#2. 人在回路(Human-in-the-Loop))
- [3. 流式执行(Streaming)](#3. 流式执行(Streaming))
- [4. 嵌套图(Subgraphs)](#4. 嵌套图(Subgraphs))
- [5. 并行执行](#5. 并行执行)
- [六、LangGraph 在 Agent 架构中的位置](#六、LangGraph 在 Agent 架构中的位置)
- 七、与其他框架的比较
- 八、适用场景举例
- 九、未来展望
- 十、总结
在 2023-2024 年,大语言模型(LLM)应用从单次问答快速走向了多步骤推理、工具调用和自主智能体。一个典型场景是:你需要一个 AI 助手,能先查数据库、再做判断,如果信息不够就上网搜索,最后汇总生成报告。这个流程不再是一条直线,而是一个带分支、循环和状态的 图 。
LangGraph 正是为这类场景设计的底层框架。它把 LLM 应用的执行流建模成有向图,核心使命是------让智能体应用拥有可靠的状态管理和可控的流程编排。
一、LangGraph 是什么
LangGraph 是由 LangChain 团队推出的一个库,专门用于构建有状态、多角色、可循环的 LLM 应用。你可以把它理解为:
一个专门为 AI 工作流设计的"状态机 + 图执行引擎"。
它的底层不是 DAG(有向无环图),而是有向有环图 ,因此天然支持 循环。这对于智能体(Agent)那种"思考→行动→观察→再思考"的循环至关重要。
如果用一句话总结定位:
- LangChain 帮你快速搭积木(链式调用 LLM 和工具);
- LangGraph 则给你一个强大的控制中心,管理复杂流程、分支、循环和持久化状态。
二、为什么需要 LangGraph
单纯的 Chain(链)只能按固定顺序执行。一旦遇到下面这些需求,链式调用就不够用了:
-
循环与重试
智能体调用工具后,需要把结果送回模型,判断是否还要继续行动,这是一个循环。
-
条件分支
根据 LLM 输出的内容选择不同路径,比如判断用户意图后分发给不同的处理节点。
-
持久化与中断恢复
长时间运行的任务可能跨越数小时甚至数天,需要保存状态、支持暂停和人工审批后再恢复。
-
人在回路(Human-in-the-Loop)
某些关键操作(如发送邮件、执行交易)需要人类确认,工作流必须能暂停等待输入。
-
流式与并发控制
多个节点可以并发执行,比如同时搜索多个数据源,再汇总结果。
LangGraph 的设计初衷就是把上述能力做成一个通用、可扩展的基础设施,让开发者不再需要为每一次流程控制重新造轮子。
三、核心概念:图、节点、边、状态
LangGraph 的世界观建立在"图"之上。理解下面四个核心概念,就理解了整个框架。
1. 状态(State)
状态是整个图的共享存储器,是一份可在节点之间传递、更新的数据字典。典型的状态字段包括:
messages:完整的对话历史(用户消息、AI 回复、工具调用和结果)。next_step:下一步应执行什么。- 任何自定义数据,如
user_id、retrieved_docs等。
在代码层面,State 通常被定义为一个 TypedDict 或 Pydantic 模型。每个节点函数都会接收当前 State,并返回一个包含更新字段的字典,LangGraph 会自动将更新合并进去。
关键设计: 状态更新默认是"追加"还是"覆盖"可由 Reducer 控制。比如 messages 字段默认会追加新消息,而 current_step 则覆盖旧值。
2. 节点(Nodes)
节点是图的执行单元,通常是 Python 函数(同步或异步)。节点可以做任何事:
- 调用 LLM(大模型)
- 执行工具/函数
- 操作数据库
- 做逻辑判断(然后通常通过条件边来路由)
- 模拟人工处理
每个节点的签名类似:def my_node(state: State) -> dict,输入整个 State,返回需要对 State 做的部分更新。
3. 边(Edges)
边定义了节点之间的控制流。LangGraph 中有三种边:
- 普通边(Normal Edge):从一个节点直接连接到另一个节点,执行完 A 必去 B。
- 条件边(Conditional Edge):从一个节点出发,根据函数返回值路由到不同的下一个节点。这是实现分支的关键。
- 入口点(Entry Point):标记图从哪个节点开始执行。
- 结束点(End):特殊节点,到达它图就停止运行。
4. 图(Graph)
StateGraph 实例就是整张图。你通过 .add_node()、.add_edge()、.add_conditional_edges() 方法构建图结构,然后 .compile() 编译成一个可执行的应用。
编译时,LangGraph 会验证图的完整性,并附加运行时引擎,包括状态管理、检查点等能力。
四、工作流程:从构建到运行
下面是一个简化版的"自主研究助手"图构建过程,帮助你感受代码节奏。
python
from typing import TypedDict, Annotated
from langgraph.graph import StateGraph, END
import operator
# 1. 定义 State
class ResearchState(TypedDict):
messages: Annotated[list, operator.add] # 自动追加
web_search_count: int
final_report: str
# 2. 创建 StateGraph
graph = StateGraph(ResearchState)
# 3. 定义节点函数
def decide_action(state):
# 调用 LLM 决定下一步做什么:搜索还是生成报告
last_message = state["messages"][-1]
# 伪逻辑:如果模型要求搜索则返回 "search",否则 "write_report"
if "需要搜索" in last_message:
return {"next_action": "search"}
else:
return {"next_action": "write_report"}
def web_search(state):
# 执行网络搜索,将结果追加到 messages
results = "搜索结果..."
return {"messages": [{"role": "tool", "content": results}],
"web_search_count": state["web_search_count"] + 1}
def write_report(state):
# 生成最终报告
return {"final_report": "综合报告内容..."}
# 4. 添加节点
graph.add_node("decide_action", decide_action)
graph.add_node("web_search", web_search)
graph.add_node("write_report", write_report)
# 5. 添加边
graph.set_entry_point("decide_action")
# 条件路由:从 decide_action 根据字段决定下一步
graph.add_conditional_edges(
"decide_action",
lambda s: s["next_action"],
{
"search": "web_search",
"write_report": "write_report"
}
)
# web_search 执行完后回到决策节点,形成循环
graph.add_edge("web_search", "decide_action")
# write_report 结束后到 END
graph.add_edge("write_report", END)
# 6. 编译
app = graph.compile()
运行时,你只需提供初始状态并流式读取:
python
initial_state = {"messages": [{"role": "user", "content": "研究 LangGraph 并写报告"}],
"web_search_count": 0}
for output in app.stream(initial_state):
print(output)
图引擎会自动按照边定义的规则执行节点、更新状态,直到遇见 END。
五、关键能力详解
1. 状态持久化与检查点
graph.compile() 时可以传入一个 checkpointer(内存版或 SQLite/Postgres 版)。每执行完一个"超步骤",图状态就会被保存。这意味着:
- 支持中断恢复 :即使程序崩溃,可以用
thread_id恢复并继续。 - 支持时间旅行:可以回溯到历史某个检查点,重新分支执行,用于调试或回放。
2. 人在回路(Human-in-the-Loop)
LangGraph 引入了 interrupt 机制。你可以在某个节点前设置中断点:
python
graph.compile(checkpointer=checkpointer, interrupt_before=["write_report"])
当运行到 write_report 前,执行会暂停,将控制权返回给调用者。开发者可以展示生成的内容给用户确认,然后通过 app.stream(None, config) 提供修正后继续。这正是实现审批流的基础。
3. 流式执行(Streaming)
.stream() 方法支持多种模式:
values:每完成一个节点返回完整状态快照。updates:仅返回节点做出的状态更新部分(默认模式)。messages:更适合对话式场景,仅流式输出 LLM 生成的新 tokens。
这让你能方便地构建实时 UI 更新。
4. 嵌套图(Subgraphs)
你可以把一个图作为另一个图的节点使用,实现多层级复杂工作流。比如主图负责业务逻辑,子图负责专门的验证流程。子图也享受独立的状态管理和检查点。
5. 并行执行
当一个节点有多条出去的普通边,或者用 Send API 实现动态并行时,LangGraph 能并发执行目标节点,然后在汇聚节点(Reducer)中合并结果。这非常适合"扇出-扇入"模式,比如同时对三个搜索引擎发起请求。
六、LangGraph 在 Agent 架构中的位置
目前构建智能体有几大范式:
- ReAct: 推理→行动→观察 → 循环。LangGraph 是其绝佳载体。
- Plan-and-Execute: 先规划步骤,再按顺序执行,可能中途修订计划。天然适合图结构。
- Multi-Agent 协作: 不同智能体作为不同节点,通过图边的消息传递进行对话或任务分发。
在 LangGraph 中,Agent 不再是一个黑箱,而是一个可观测、可控制、可干预的可视化拓扑。你可以轻松实现:
- 一个 Supervisor Agent,监控 Worker Agent 进度并动态分配任务。
- 某 Worker 失败后自动切换到备用节点。
七、与其他框架的比较
| 框架 | 侧重点 | 状态管理 | 循环支持 |
|---|---|---|---|
| LangChain (Chain) | 线性链式调用 | 弱,无内置持久化 | 有限 |
| OpenAI Assistant | 托管式 Agent | 平台端托管,黑盒 | 内置,但控制度低 |
| AutoGPT / BabyAGI | 经典自主 Agent 样例 | 简陋,通常靠文件系统 | 固定循环 |
| LangGraph | 底层图执行引擎 | 一级公民,检查点+时间旅行 | 原生强大 |
可以看到,LangGraph 更像是 Agent 的"操作系统",而不是一个具体的 Agent 实现。你可以在它之上构建任何架构,而框架本身负责所有流程控制的脏活累活。
八、适用场景举例
- 客户支持机器人:多轮对话、查询知识库、创建工单、升级人工,中间涉及多次判断和循环。
- 自动化研究助手:搜索、阅读、提取摘要、对比、交叉验证、生成报告,循环直到满足质量阈值。
- 代码生成与调试系统:写代码→跑测试→看报错→修改代码,自动循环直到通过。
- 多步骤审批系统:员工提交→直属上级审批→超过金额阈值转更高层→HR 归档,每个步骤需要人类确认。
- 游戏 NPC 行为树:用图定义 NPC 的各种状态转换(巡逻、追击、战斗、死亡),结合 LLM 对话。
九、未来展望
LangGraph 正在快速迭代,目前已经支持:
- 更精细的流式控制
- Long-term Memory 集成
- 原生的多智能体通信模式(如 Swarm、Supervisor)
- 云端部署 LangGraph Platform(托管执行与监控)
它的目标很明确------成为 LLM 应用进入"生产级流程化"阶段的基础设施。如果你今天写的 Agent 还是一个脆弱的 while 循环加一堆 if 判断,那么 LangGraph 就是你跨入工程化的那扇门。
十、总结
LangGraph 并不神秘。它的本质是:
把一次 LLM 交互视为图上的一个"超步",用显式的图结构管理状态如何在多个步骤(节点)间流转、合并和复写。
它的价值在于,当你的 AI 应用需要:
- 记住对话历史并跨多步推理,
- 根据情况分支、兜底、重试,
- 中途暂停等待用户批准,
- 把任务拆解成有依赖/并行的子任务,
不再需要硬编码这些复杂的控制逻辑,而是描述一张图,让 LangGraph 替你可靠地运行它。
对于任何想在生产环境构建稳健、可观测、可中断恢复的 AI 智能体的团队,LangGraph 是目前最值得深入学习和掌握的基础组件之一。