Aller au contenu

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 分钟