主要内容
LangGraph 的核心抽象是一张图:节点是函数或 agent,边是跳转规则,状态是强类型对象。Checkpointer 把每一步的状态写入持久存储,意味着你可以在任何一步暂停、恢复、分支、时间旅行。LangGraph 2.0 把三年生产经验沉淀成标准原语:Router、Supervisor、Subagent,让常见多 agent 拓扑不必再手搓。它不像 CrewAI 那样倚重角色比喻,也不像 AutoGen 那样围绕对话展开,它就是一个严肃的工作流引擎,长得像 Airflow 遇到了 LLM。
核心关注点
生产级 workflow 的可控性、可观测性、可恢复性。如果你的 agent 要跑几个小时甚至几天,它是最成熟的选择。
安装与 hello world
from typing import TypedDict
from langgraph.graph import StateGraph, END
from langgraph.checkpoint.memory import MemorySaver
class State(TypedDict):
messages: list
next_action: str
def plan(state: State) -> State:
state["next_action"] = "search"
return state
def act(state: State) -> State:
state["messages"].append("搜索结果")
return state
def router(state: State) -> str:
return "act" if state["next_action"] else END
graph = StateGraph(State)
graph.add_node("plan", plan)
graph.add_node("act", act)
graph.set_entry_point("plan")
graph.add_conditional_edges("plan", router)
graph.add_edge("act", "plan")
app = graph.compile(checkpointer=MemorySaver())
result = app.invoke(
{"messages": [], "next_action": ""},
config={"configurable": {"thread_id": "1"}},
)关键 API / 概念
StateGraph用 TypedDict 声明状态 schema,add_node 添加节点,add_edge 连边。
CheckpointerMemorySaver(内存)、SqliteSaver(本地)、PostgresSaver(生产)三种存储。
interrupt在节点内调用 interrupt() 暂停图,等人工输入后从断点恢复。
Command节点返回 Command 可以同时更新状态 + 指定下一个节点,比单纯返回 state 更灵活。
适用场景
长时间运行的多 agent 任务
例如研究 agent 跑 5 小时做深度调研,中间失败要能从 checkpoint 恢复而不是从头再来。
需要人工审批的业务流程
在图中任意节点 interrupt,暂停等人工输入,人工决策后恢复执行。金融、医疗、法律场景常用。
有显式分支逻辑的复杂流程
客服分派、工单分级、合同审查,这类确定性分支逻辑用图结构比对话范式清晰得多。
什么时候别用
- 只是想做一个单 agent + 几个工具:杀鸡用牛刀,OpenAI Agents SDK 更合适
- 快速 PoC / hackathon demo:setup 成本偏高,smolagents 或 CrewAI 更快
vs 相邻选项
vs AutoGen
LangGraph 是图,AutoGen 是对话。前者适合确定流程,后者适合探索性协作。
vs CrewAI
CrewAI 的 Flow 类似 LangGraph 但更简单;真正复杂的分支和恢复逻辑,LangGraph 更硬。