LangGraph 完全指南 2026:构建有状态的 AI 智能体
使用 LangGraph 构建具有循环、记忆、人机协作的智能体
LangGraph 完全指南 2026:构建有状态的 AI 智能体
使用 LangGraph 构建具有循环、记忆、人机协作的智能体
LangGraph 完全指南(2026):将智能体构建为状态机——State+reducer、条件边、检查点持久化(多轮记忆/崩溃恢复/时间旅行)、用于人工审批门控的中断、多智能体监督者模式。包含何时使用与何时不使用的诚实对比。
LangGraph 完全指南 2026:构建有状态的 AI 智能体
LangGraph 将智能体建模为状态机:节点是函数(LLM 调用、工具、纯代码),边决定下一步运行什么,类型化的状态对象在图中流动。这种显式性正是其核心卖点——循环、分支、重试和人工审批都成为可见的图结构,而不是隐藏在提示词中的期望。它是 LangChain 生态系统中面向生产的智能体层,即使你跳过其余部分,也最值得学习。
安装
bash
pip install langgraph langchain-openai
30 秒速览:预构建的 ReAct 智能体
python
from langgraph.prebuilt import create_react_agent
from langchain_core.tools import tool@tool
def get_weather(city: str) -> str:
'获取某个城市的当前天气。'
return f'{city} 华氏 72°F,晴朗'
agent = create_react_agent('openai:gpt-4o-mini', tools=[get_weather])
result = agent.invoke({'messages': [{'role': 'user', 'content': '巴黎的天气?'}]})
print(result['messages'][-1].content)
create_react_agent 用三行代码提供了标准的工具调用循环。在需要自定义控制流之前使用它——然后自己构建图:
真正的核心:显式图
python
from typing import TypedDict, Annotated
from langgraph.graph import StateGraph, START, END, add_messages
from langgraph.prebuilt import ToolNode
from langchain_openai import ChatOpenAIclass State(TypedDict):
messages: Annotated[list, add_messages] # reducer:追加而非覆盖
llm = ChatOpenAI(model='gpt-4o-mini').bind_tools([get_weather])
def agent_node(state: State):
return {'messages': [llm.invoke(state['messages'])]}
def route(state: State):
last = state['messages'][-1]
return 'tools' if last.tool_calls else END
builder = StateGraph(State)
builder.add_node('agent', agent_node)
builder.add_node('tools', ToolNode([get_weather]))
builder.add_edge(START, 'agent')
builder.add_conditional_edges('agent', route) # agent → tools,或结束
builder.add_edge('tools', 'agent') # 工具结果循环回 agent
graph = builder.compile()
三个概念支撑了整个框架:
Annotated[list, add_messages] 模式声明了更新如何合并(追加 vs 覆盖)。自定义状态字段(计划、重试次数、检索到的文档)与消息共存。.invoke()、.stream()、异步变体,均为标准接口。生产级的关键:持久化
这是 LangGraph 真正的差异化优势。传入检查点后,每一步的状态都会在线程 ID 下保存:
python
from langgraph.checkpoint.memory import MemorySaver # 生产环境使用 Postgres/SQLite 保存器graph = builder.compile(checkpointer=MemorySaver())
cfg = {'configurable': {'thread_id': 'user-42'}}
graph.invoke({'messages': [('user', '我叫 Alice')]}, cfg)
graph.invoke({'messages': [('user', '我叫什么名字?')]}, cfg) # 记住——同一线程
持久化无需额外代码即可带来:多轮记忆(状态在调用之间保持)、崩溃恢复(从运行中途的最后一个检查点恢复)、以及时间旅行(检查或分叉任何历史状态以进行调试)。
人机协作:中断
在关键操作处暂停图,等待审批,然后恢复:
python
from langgraph.types import interrupt, Commanddef execute_trade(state: State):
decision = interrupt({'proposed': state['trade']}) # 图在此处暂停
if decision == 'approve':
return {'result': do_trade(state['trade'])}
return {'result': '被人类拒绝'}
稍后,在人类审核后:
graph.invoke(Command(resume='approve'), cfg) # 在节点中间恢复
由于状态已被检查点保存,暂停可以持续几秒或几天——恢复请求甚至可以来自不同的进程。这就是人机协作模式中的审批门控模式,在框架层面实现。
多智能体形态
监督者模式只是一个图:路由节点选择哪个专业子图处理下一步;专家返回给监督者;监督者决定完成还是继续。每个专家本身可以是一个编译后的图(子图可组合)。在评估 LangGraph 与 crew 风格框架时——参见 CrewAI vs AutoGen——权衡在于显式控制(LangGraph)与快速搭建(CrewAI)。
可观测性与服务化
graph.astream() 封装在 FastAPI SSE 端点中(配方)用于无状态部署;对于托管持久化/队列/定时任务,有 LangGraph Platform——构建 vs 购买的分析见 FastAPI vs LangServe。graph.stream(..., stream_mode='updates') 产生每个节点的状态增量——以类型化事件而非仅令牌的形式流式输出“搜索中…”、“找到 12 个结果”。何时使用 LangGraph 与更简单的工具
诚实的代价:状态类型、reducer 和边函数是需要学习的真实概念,简单流程用图实现会显得过度工程化。但回报恰好出现在你的智能体需要经受重启、为人类暂停或通过追踪进行调试时。
FAQ
LangGraph vs LangChain agents? LangGraph *就是*后继者——经典的 LangChain AgentExecutor 已过时;生态系统中新的智能体工作都在图上进行(LangChain vs LangGraph)。
TypeScript? LangGraph.js 与 Python API 高度相似;对于 Next.js 原生替代方案,参见 Vercel AI SDK vs LangChain.js。
哪个模型? 工具调用质量主导智能体可靠性——前沿模型在这方面明显更好;在模型库中比较。
*最后更新:2026 年 6 月。API 会变化——请对照 LangGraph 文档验证。*
相关工具
相关教程
使用 CrewAI 创建协调的 AI 智能体团队,处理研究、分析、内容创作等单个智能体无法独立完成的复杂任务
系统拆解 Harness 的概念、架构、与模型的关系,以及如何通过 Harness 实现 Agent 的自进化与可控执行
深入解析多智能体系统的编排、记忆共享、冲突解决与安全防护,提供可落地的架构方案
使用 Gemini 2.0 Flash 和 Pro 构建 multimodal AI 应用:视觉、音频、文档
使用 Claude Opus 4 构建处理复杂推理任务的高级 AI 应用
通过 LlamaIndex 摄取管道和查询引擎将 LLM 连接到您的文档