LangGraph 是基于 LangChain 的扩展框架,专为构建有状态(Stateful)的大模型工作流而设计。它通过图结构(Graph)定义多个执行节点(Node)及其依赖关系,支持复杂任务编排,尤其适合多智能体协作、长对话管理等场景。
状态持久化:自动维护任务执行过程中的上下文状态
灵活编排:支持条件分支、循环、并行等控制流
容错机制:内置错误重试、回滚策略
可视化调试:自动生成执行流程图

from langgraph.graph import StateGraph, END
from typing import TypedDict, Annotated
import operator
# 定义状态结构
class AgentState(TypedDict):
input: str
result: Annotated[list, operator.add] # 自动累积结果
# 初始化图
graph = StateGraph(AgentState)
# 添加节点与边(后续章节详解)
...
# 编译并运行
app = graph.compile()
result = app.invoke({"input": "任务描述"})使用 Pydantic模型 或 TypedDict 明确状态结构:
from pydantic import BaseModel class ProjectState(BaseModel): requirements: str draft_versions: list[str] current_step: int # 初始化状态 initial_state = ProjectState( requirements="开发一个聊天机器人", draft_versions=[], current_step=0 )
LangGraph通过注解(Annotation)实现状态字段的自动更新:
from langgraph.graph import add_messages
class DialogState(TypedDict):
history: Annotated[list, add_messages] # 自动追加消息
def user_node(state: DialogState):
return {"history": ["用户: 你好"]}
def bot_node(state: DialogState):
return {"history": ["AI: 您好,有什么可以帮您?"]}节点是工作流的基本单元,接收状态并返回更新:
from langchain_core.runnables import RunnableLambda
# 简单节点
def data_loader(state: dict):
return {"data": load_dataset(state["input"])}
# 包含LLM调用的节点
llm_node = RunnableLambda(
lambda state: {"answer": chat_model.invoke(state["question"])}
)
# 注册节点
graph.add_node("loader", data_loader)
graph.add_node("llm", llm_node)def designer_agent(state):
return {"design": "界面草图"}
def developer_agent(state):
return {"code": "实现代码"}
# 并行执行
graph.add_node("designer", designer_agent)
graph.add_node("developer", developer_agent)
graph.add_edge("designer", "reviewer")
graph.add_edge("developer", "reviewer")
根据状态值动态路由:
from langgraph.graph import conditional_edge
def should_continue(state):
return "continue" if state["step"] < 5 else "end"
graph.add_conditional_edges(
source="decision_node",
path_map={"continue": "next_node", "end": END},
condition=should_continue
)graph.add_edge("start", "process")
graph.add_conditional_edges(
"process",
lambda s: "loop" if s["count"] < 3 else "end",
{"loop": "process", "end": END}
)from langgraph.retry import RetryPolicy policy = RetryPolicy( max_retries=3, backoff_factor=1.5, retry_on=(Exception,) ) graph.add_node( "api_call", api_wrapper.with_retry(policy) )
def compensation_action(state):
# 执行补偿操作
rollback_transaction(state["tx_id"])
return {"status": "rolled_back"}
graph.add_edge("failed_node", "compensation")
graph.add_edge("compensation", END)注:本文代码基于LangGraph 0.1+版本实现,需预先安装依赖:
pip install langgraph langchain pydantic
更多AI大模型应用开发学习内容,尽在聚客AI学院。