LangGraph 完整指南 2026:构建多智能体协作系统
为什么选择 LangGraph?
在 2026 年的 AI 代理生态中,LangGraph 已成为构建复杂多智能体系统的首选框架。作为 LangChain 生态的扩展,它引入了基于状态图的编排模型,让开发者能够精确控制智能体的执行流程、条件分支和循环逻辑。
根据 Towards AI 的 2026 年框架评测,LangGraph 在可扩展性、状态管理和生产就绪度三个维度均位列前三。相比 CrewAI 的简单链式调用,LangGraph 提供了更细粒度的控制能力。
核心概念解析
状态图(State Graph)
LangGraph 的核心是状态图模型。每个智能体执行都可以看作状态转换:
from langgraph.graph import StateGraph, END
from typing import TypedDict, Annotated
import operator
# 定义状态结构
class AgentState(TypedDict):
messages: list
current_step: str
results: Annotated[list, operator.add]
metadata: dict
节点(Nodes)与边(Edges)
节点代表执行单元,边定义流程控制:
from langchain_core.messages import HumanMessage, AIMessage
def research_node(state: AgentState):
"""研究节点:执行网络搜索"""
query = state["messages"][-1].content
# 调用搜索工具
results = search_web(query)
return {"results": [results], "current_step": "research"}
def analysis_node(state: AgentState):
"""分析节点:处理研究结果"""
context = state["results"][-1]
analysis = llm.invoke(f"分析以下内容:{context}")
return {"messages": [AIMessage(content=analysis)], "current_step": "analysis"}
# 构建图
workflow = StateGraph(AgentState)
workflow.add_node("research", research_node)
workflow.add_node("analysis", analysis_node)
# 定义边
workflow.set_entry_point("research")
workflow.add_edge("research", "analysis")
workflow.add_edge("analysis", END)
条件边与循环
LangGraph 的强大之处在于支持条件分支和循环执行:
from langgraph.graph import ConditionalEdges
def should_continue(state: AgentState) -> str:
"""根据结果质量决定下一步"""
if len(state["results"]) < 3:
return "research_more" # 需要更多研究
return "finalize" # 可以结束
# 添加条件边
workflow.add_conditional_edges(
"research",
should_continue,
{
"research_more": "research", # 循环回研究节点
"finalize": "analysis" # 进入分析
}
)
这种模式非常适合需要迭代优化的场景,比如代码生成、内容创作或数据分析。
多智能体协作实战
下面是一个完整的多智能体协作示例,包含研究员、分析师和审核员三个角色:
from langgraph.graph import StateGraph, END
from langchain_openai import ChatOpenAI
from typing import TypedDict, Annotated, List
import operator
class TeamState(TypedDict):
task: str
research_findings: Annotated[List[str], operator.add]
analysis: str
review_comments: List[str]
final_output: str
iteration_count: int
llm = ChatOpenAI(model="gpt-4o", temperature=0.7)
# 研究员智能体
def researcher(state: TeamState):
prompt = f"""作为研究员,请针对以下任务进行信息搜集:
任务:{state['task']}
当前发现:{state['research_findings']}
请提供 3-5 个关键信息点。"""
response = llm.invoke(prompt)
findings = response.content.split('\n')
return {"research_findings": findings, "iteration_count": state['iteration_count'] + 1}
# 分析师智能体
def analyst(state: TeamState):
prompt = f"""作为分析师,请基于以下研究发现进行深度分析:
{chr(10).join(state['research_findings'])}
请提供结构化分析报告。"""
response = llm.invoke(prompt)
return {"analysis": response.content}
# 审核员智能体
def reviewer(state: TeamState):
prompt = f"""作为审核员,请评估以下分析的质量:
{state['analysis']}
如果质量达标,回复"APPROVED"。否则列出需要改进的点。"""
response = llm.invoke(prompt)
if "APPROVED" in response.content:
return {"final_output": state['analysis'], "review_comments": ["审核通过"]}
return {"review_comments": [response.content]}
# 决定是否继续迭代
def should_iterate(state: TeamState) -> str:
if state['iteration_count'] >= 3:
return "finalize"
if any("需要改进" in comment for comment in state['review_comments']):
return "revise"
return "finalize"
# 构建协作图
team_workflow = StateGraph(TeamState)
team_workflow.add_node("researcher", researcher)
team_workflow.add_node("analyst", analyst)
team_workflow.add_node("reviewer", reviewer)
team_workflow.set_entry_point("researcher")
team_workflow.add_edge("researcher", "analyst")
team_workflow.add_edge("analyst", "reviewer")
team_workflow.add_conditional_edges(
"reviewer",
should_iterate,
{
"revise": "researcher", # 返回重新研究
"finalize": END
}
)
app = team_workflow.compile()
# 执行
result = app.invoke({
"task": "分析 2026 年 AI 代理框架的技术趋势",
"research_findings": [],
"analysis": "",
"review_comments": [],
"final_output": "",
"iteration_count": 0
})
print(result['final_output'])
记忆与检查点
LangGraph 内置了检查点系统,支持长对话记忆和断点续跑:
from langgraph.checkpoint.memory import MemorySaver
# 启用记忆保存
memory = MemorySaver()
app = team_workflow.compile(checkpointer=memory)
# 使用线程 ID 保持对话历史
config = {"configurable": {"thread_id": "conversation-123"}}
# 第一次调用
result1 = app.invoke({"task": "研究量子计算", ...}, config)
# 后续调用会保留之前的状态
result2 = app.invoke({"task": "基于上述研究进行扩展", ...}, config)
生产环境最佳实践
1. 错误处理与重试
from tenacity import retry, stop_after_attempt, wait_exponential
@retry(stop=stop_after_attempt(3), wait=wait_exponential())
def safe_node_execution(state: AgentState):
try:
# 节点逻辑
return result
except Exception as e:
return {"error": str(e), "retry_count": state.get('retry_count', 0) + 1}
2. 流式输出
for event in app.stream(inputs, config, stream_mode="values"):
for node, value in event.items():
print(f"节点 {node} 输出:{value}")
3. 超时控制
from langgraph.pregel import Pregel
app = team_workflow.compile(
checkpointer=memory,
interrupt_after=["reviewer"], # 在审核节点后暂停
)
# 设置超时
config = {"recursion_limit": 50} # 最大递归深度
与其他框架对比
| 特性 | LangGraph | CrewAI | AutoGen |
|---|---|---|---|
| 状态管理 | ✅ 完整状态图 | ⚠️ 简单链式 | ⚠️ 会话式 |
| 条件分支 | ✅ 原生支持 | ❌ 有限 | ⚠️ 需要自定义 |
| 循环执行 | ✅ 原生支持 | ❌ 不支持 | ✅ 支持 |
| 记忆系统 | ✅ 检查点 | ⚠️ 基础 | ✅ 完整 |
| 学习曲线 | 中等 | 低 | 高 |
| 生产就绪 | ✅ 高 | 中 | 中 |
实际应用场景
内容创作流水线
研究 → 大纲 → 初稿 → 审核 → 修改 → 发布
代码开发助手
需求分析 → 架构设计 → 代码生成 → 测试 → 代码审查 → 修复
数据分析管道
数据收集 → 清洗 → 分析 → 可视化 → 报告生成 → 审核
总结
LangGraph 为 2026 年的多智能体系统提供了最灵活且最可靠的编排方案。它的状态图模型让复杂流程变得可预测、可调试,而检查点系统确保了长对话的连续性。
如果你正在构建需要多轮迭代、条件分支或多人协作的 AI 应用,LangGraph 是当前的最佳选择。
参考资源
作者: Kevin Peng
发布日期: 2026-03-31
分类: AI 助手 / 多智能体系统
阅读时间: 约 8 分钟