LangGraph 是 LangChain 开源的多智能体编排框架,本质是一个通用图执行引擎,节点可挂载 AI 模型、工具或人机交互,边描述流转逻辑;文章以凌晨告警排查为案例,从图设计、代码实现、执行模型到上下文传递完整演示,并对比 Dify 与 Claude Code 的动态工作流。
一个 AI 助手在很多团队中已经是标配:提一个问题,得到一个答案,就像在和一个资深工程师聊天。但一旦你想让多个 AI 协同工作——一个查指标,一个翻日志,一个得出结论——局面就崩溃了:谁交接给谁?它们能并行运行吗?中间要不要停下来问你?如果中途崩溃了,前面的工作是不是都白费了?
LangGraph 就是为了回答这些问题而生的。它是 LangChain 的开源多智能体编排框架(MIT 协议)。但本质要先说清楚:它首先是一个通用的图执行引擎——节点、边、条件边、并行执行、检查点、等待人工介入,这些都是通用的图能力,和 AI 本身没有固有联系;只不过恰好一个节点可以塞进去一个 AI,而一旦塞进去了,你就成了"编排多个 AI 智能体"。核心简单说就是:你画出图,它执行图。
本文用一个具体案例——凌晨 2 点的告警:"order-service 错误率飙升"——来从头到尾解释它:先看图,再看代码,再看执行模型和上下文传递,最后和 Dify 以及 Claude Code 的动态工作流做个对比。
值班手机响了。告警显示 order-service 错误率刚刚达到 12%,你的 AI 助手需要自主完成整个调查流程。下面这张图就是它将执行的完整逻辑:

图 1 · 深夜调查:一张图调度节点、边、条件边、Send、interrupt 和 checkpoint。
一次完整运行大致是这样的:AI 先诊断,发现情况严重,于是分发 12 个并行子任务逐一检查实例;检查完成后,总结"这 3 个有问题";然后停下来问你是否要重启——你批准后,它才执行修复,最后复查并报告。
这张图几乎用到了 LangGraph 的每一个核心能力:节点(每个方框)、边(箭头)、条件边(serious?)、Send(批量检查)、interrupt(等待你的审批)、checkpoint(持久化每一步)。下面用代码来画它。
构建一个图,把每个方框注册为节点,把箭头连成边:
from langgraph.graph import StateGraph, START, END
def diagnose(state): # 1 diagnose: check error rate, pull Trace, return severity
error_rate = query_error_rate(state["service"])
return {"abnormal": error_rate > 5}
def fan_out(state): # 3 batch check: Send dispatches 12 subtasks at once
return [Send("check_host", {"host": h}) for h in state["hosts"]]
def check_host(state): # 4 check one instance (each Send is its own small task)
return {"results": [f"{state['host']}: ok"]}
def ask_human(state): # 5 await your approval
decision = interrupt("3 bad instances found — auto-restart?")
return {"decision": decision}
def fix(state): # 6 execute the fix
restart(state["hosts"])
return {}
def report(state): # 7 produce the report
return {"report": "handled"}
g = StateGraph(dict)
g.add_node("diagnose", diagnose) # register nodes
g.add_node("fan_out", fan_out)
g.add_node("check_host", check_host)
g.add_node("ask_human", ask_human)
g.add_node("fix", fix)
g.add_node("report", report)
g.add_edge(START, "diagnose") # start -> diagnose
g.add_conditional_edges("diagnose", route)# 2 conditional edge: serious? -> fan_out or report
g.add_conditional_edges("fan_out", fan_out) # 3 Send fan-out
g.add_edge("check_host", "ask_human") # checked -> await approval
g.add_edge("ask_human", "fix") # approved -> fix
g.add_edge("fix", "report") # fixed -> report
g.add_edge("report", END)
graph = g.compile(checkpointer=InMemorySaver()) # compile + enable persistence
几个关键点,逐一说清楚:
1 · 节点就是一个普通函数。 diagnose、check_host、fix 都是普通的 Python 函数。是否调用 LLM 完全由函数体决定——diagnose 可以调模型,check_host 也可以是纯计算。
2 · 条件边决定走哪条路。 route 返回 "fan_out" 或 "report",图就走到对应的节点:
def route(state):
return "fan_out" if state.get("abnormal") else "report"
3 · Send = 批量分发。 fan_out 返回 12 个 Send("check_host", {...}),在同一个 superstep 内并行执行,结果自动合并:
def fan_out(state):
return [Send("check_host", {"host": h}) for h in state["hosts"]]

图 2 · Send 放大:一个 superstep 内分发 N 个独立子任务,然后合并。
4 · interrupt = 停下来等人工。 在节点内调用 interrupt(),图就会暂停,把问题呈现给你;你批准并携带答案恢复后,图从检查点继续执行:
decision = interrupt("3 bad instances found — auto-restart?")
# after you approve:
graph.invoke(Command(resume="yes"),
{"configurable": {"thread_id": "t1"}})
5 · checkpoint = 持久化每一步。 图在每一步之后存储进度(thread_id 充当工单号)。如果中途崩溃了,用同一个 thread_id 重新调用,它会从断点恢复——官方称之为持久化执行(durable execution)。
运行图不是从头到尾一路狂奔,而是逐轮向前推进。官方术语叫 superstep,每一轮做四件事:

图 3 · 一个 superstep:确定谁跑 → 并行跑 → 刷新白板 → 持久化。
节点之间不互相传递消息。大家面对的是同一块白板:每一轮只读取白板上已有的内容,写操作暂时搁起——只有等整轮完成后,白板才刷新。源码里有一句注释一行说明:第 N 步写的东西,第 N+1 步才能看到。

图 4 · 上下文如何传递:节点之间不说话,只读写同一块白板。
用图 1 的值班案例走一遍,节奏是这样的:

图 5 · 值班案例按 superstep 展开:写操作在下一轮才落到白板上。
聊天历史也是同样的原理:把消息放到白板上,下一步就能看到它们。
Dify 和 Claude Code 都常被称为"多智能体",但和 LangGraph 并排摆在一起,各用一张表说清楚就够了。
Dify:可视化平台 vs 代码库。Dify 是一个拖拽节点的网页画布;LangGraph 是一个用 Python 代码画的图。
Claude Code 动态工作流:AI 现场写一张 LangGraph。你只管说要做啥;后台自动分解任务,并行调起数十甚至数百个智能体。
记住一句话:Dify 给你一辆现成的车,Claude Code 让 AI 现场写编排逻辑,LangGraph 给你发动机和蓝图——自由度最大,工作量也最大。
我们的开源 DataBuff(AI 原生的 APM,GitHub: https://github.com/databufflabs/databuff)也是多智能体协作。你面对一个入口;AI 大脑把工作并行分发给各个专家——查询、检查、运维、问答——然后把他们的发现汇总成结论,附带证据链:

图 6 · 你只面对一个入口;复杂的协作发生在背后。
LangGraph 的核心目的不是"给你一个现成的多智能体解决方案",而是为那些需要长时间运行、保持状态、持久化、以及在人工介入时循环的智能体流提供可控的运行时。它把底层脏活——并行执行、检查点、等待、恢复——封装成原子能力,让你只需关注业务流本身。
复制案例中的 6 个函数和图结构,在本地跑一遍,你就明白多智能体编排是怎么回事了。
开源 AI 原生 OpenTelemetry APM——指标、链路、日志、AI 排障,一站搞定。
GitHub: https://github.com/databufflabs/databuff
在线演示: https://demo.databuff.ai