LangGraph 工作流

create_agent 无法满足 固定步骤 + 条件分支 + 并行工作者 时,使用 LangGraph 构建显式图。


核心概念

概念说明
StateGraph有状态的有向图
Node函数,读/写 State
Edge节点间转移(固定或条件)
START / END入口与出口
Checkpointer持久化与中断
from typing_extensions import TypedDict
from langgraph.graph import StateGraph, START, END

class State(TypedDict):
    topic: str
    draft: str
    final: str

def write_draft(state: State) -> dict:
    return {"draft": f"Draft about {state['topic']}"}

def polish(state: State) -> dict:
    return {"final": state["draft"] + " (polished)"}

graph = StateGraph(State)
graph.add_node("write", write_draft)
graph.add_node("polish", polish)
graph.add_edge(START, "write")
graph.add_edge("write", "polish")
graph.add_edge("polish", END)

app = graph.compile()
app.invoke({"topic": "LangChain"})

Prompt chaining

多步 LLM,上一步输出作为下一步输入(翻译 → 润色 → 质检)。每步一个节点,边固定顺序,可预测、易测


路由(Routing)

根据 State 或 LLM 结构化输出选下一节点:

def route(state: State) -> str:
    if "urgent" in state.get("priority", ""):
        return "fast_path"
    return "normal_path"

graph.add_conditional_edges("classify", route, {"fast_path": "...", "normal_path": "..."})

Orchestrator-Worker

主节点拆分任务,Send API 动态派生子 worker,各自独立 state,结果汇总:

  • 适合:多 section 报告、多文件分析、并行研究
  • LangGraph 内置 Send 支持 map-reduce 式编排

Agent 作为节点

from langchain.agents import create_agent

researcher = create_agent("openai:gpt-4.1-mini", tools=[search], name="researcher")

graph.add_node("research", researcher)  # 子图节点

LangChain Agent 可嵌入 LangGraph,组合而非二选一


ToolNode

自定义图执行工具时用预置 ToolNode

from langgraph.prebuilt import ToolNode

tool_node = ToolNode([multiply, search])
graph.add_node("tools", tool_node)

处理并行 tool_calls、错误注入 state 等细节。


工作流 vs Agent(再述)

  • 工作流:你定义路径 → 适合合规、可审计、成本可控
  • Agent:模型定义路径 → 适合开放任务

生产系统常见 混合:路由节点 + Agent 节点 + 确定性校验节点。


流式与调试

for event in app.stream({"topic": "AI"}, stream_mode="updates"):
    print(event)

配合 LangSmith 查看每节点输入输出。


部署

LangGraph Platform / 自托管 API 可将 compile() 后的图暴露为服务(见官方 Deployment 文档)。


下一步