
LangGraph 深度解析:基于图的工作流引擎如何重塑 Agent 开发
为什么需要 LangGraph 传统 Agent 框架(如 LangChain Agent)采用线性的 ReAct 循环:思考 → 行动 → 观察 → 重复。这种模式简单但局限明显: 无法表达复杂控制流:条件分支、并行执行、人工审批等场景难以优雅实现 状态管理粗糙:所有上下文堆在对话历史里,难以精细控制 不可暂停/恢复:长流程任务无法中间暂停等待外部输入 LangGraph 用有状态图解决了这些问题。 核心概念 State Graph(状态图) LangGraph 的核心是 StateGraph,每个节点接收状态、修改状态、返回新状态: from langgraph.graph import StateGraph, END from typing import TypedDict, Annotated from operator import add class AgentState(TypedDict): messages: Annotated[list, add] # 消息列表自动追加 tool_results: list iteration: int def call_model(state: AgentState): response = llm.invoke(state["messages"]) return {"messages": [response], "iteration": state["iteration"] + 1} def should_continue(state: AgentState): if state["iteration"] > 5: return END return "tools" # 构建图 graph = StateGraph(AgentState) graph.add_node("agent", call_model) graph.add_node("tools", tool_node) graph.set_entry_point("agent") graph.add_conditional_edges("agent", should_continue) graph.add_edge("tools", "agent") app = graph.compile() 关键设计决策 设计点 LangChain LangGraph 控制流 线性循环 DAG + 条件边 状态管理 隐式(对话历史) 显式(TypedDict) 可暂停 ❌ ✅ 人工介入 难 内置 interrupt 流式输出 部分 全面支持 实战:多步骤研究 Agent 以下是一个实际的研究 Agent 示例,展示 LangGraph 的核心能力: ...