LangGraph:用一张图,编排一群 AI 助手 一个 AI 帮手已经成了不少团队的标配问一句、答一句像跟个熟手聊天。可一旦想让好几个 AI 一起干活——一个查指标、一个翻日志、一个出结论——立刻就乱套了谁来接力能不能并行中途要不要停下来问你干到一半崩了前面算不算白干LangGraph 就是来回答这些问题的。它是 LangChain 开源的多智能体编排框架MIT 协议。但先把本质说在前头它首先是一个通用图执行引擎——节点、边、条件边、并行、存档、等人都是图的通用能力跟 AI 没有必然关系只不过节点恰好可以装 AI装上就是「编排调度多个 AI Agent」了。核心就是你画图它跑图。这篇文章只用一个案例——凌晨告警「订单服务错误率飙升」——把它从头到尾讲透先看图、再给代码然后深入执行机制与上下文传递最后和 Dify、Claude Code 动态工作流对比。一个案例凌晨两点订单服务错误率飙升值班手机响了。告警说订单服务错误率飙到 12%你的 AI 助手要自己走完整个排查流程。这张图就是它要执行的全部逻辑图 1 · 凌晨告警排查一个图里用遍节点、边、条件边、Send、interrupt、checkpoint一次跑完大概是这样的AI 先诊断发现确实严重就扇出 12 个并行子任务挨个查实例查完汇总出「哪 3 台有问题」然后停下来问你要不要重启——你批了它才执行修复最后复查 出报告。这张图里几乎用到了 LangGraph 的全部核心能力节点每个方框、边箭头、条件边严重、Send批量排查、interrupt等你批准、checkpoint每一步落盘。下面用代码把它画出来。怎么用代码画出这张图先建一张图把每个方框注册成节点、箭头连成边fromlanggraph.graphimportStateGraph,START,ENDdefdiagnose(state):# ① 诊断查错误率、拉 Trace返回严不严重error_ratequery_error_rate(state[service])return{abnormal:error_rate5}deffan_out(state):# ③ 批量排查Send 一次派 12 份子任务return[Send(check_host,{host:h})forhinstate[hosts]]defcheck_host(state):# ④ 查单台实例每份 Send 一个独立小任务return{results:[f{state[host]}: 正常]}defask_human(state):# ⑤ 等你批准decisioninterrupt(发现 3 台异常是否自动重启)return{decision:decision}deffix(state):# ⑥ 执行修复restart(state[hosts])return{}defreport(state):# ⑦ 出报告return{report:已处理}gStateGraph(dict)g.add_node(diagnose,diagnose)# 注册节点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)# 起点 → 诊断g.add_conditional_edges(diagnose,route)# ② 条件边严重→ 排查 or 出报告g.add_conditional_edges(fan_out,fan_out)# ③ Send fan-outg.add_edge(check_host,ask_human)# 查完 → 等批准g.add_edge(ask_human,fix)# 批准 → 修复g.add_edge(fix,report)# 修复 → 出报告g.add_edge(report,END)graphg.compile(checkpointerInMemorySaver())# 编译 开持久化逐个看几个关键点① 节点就是一个普通函数diagnose、check_host、fix都是普通 Python 函数。要不要用 LLM完全由函数内部决定——diagnose里可以调模型check_host可以是纯计算。② 条件边决定走哪条路route返回fan_out还是report图就自动走到对应节点defroute(state):returnfan_outifstate.get(abnormal)elsereport③ Send 批量派活fan_out返回 12 个Send(check_host, {...})同一超步并行执行结果自动合并deffan_out(state):return[Send(check_host,{host:h})forhinstate[hosts]]图 2 · Send 放大一次发 N 份独立子任务同一超步并行跑完再合并④ interrupt 停下来等人工节点里调interrupt()图就停住把问题抛给你你批准后带答案 resume图从 checkpoint 恢复接着跑decisioninterrupt(发现 3 台异常是否自动重启)# 你批准后graph.invoke(Command(resumeyes),{configurable:{thread_id:t1}})⑤ checkpoint 每一步落盘图每跑完一步就存一次进度thread_id当工单号。中途崩了用同一个thread_id重新调用从断点续跑——官方叫 durable execution。LangGraph 到底怎么执行这张图跑图不是一口气从头窜到尾而是一轮一轮往前走。官方叫超步一轮就干四件事图 3 · 一个超步算出谁跑 → 并行跑完 → 刷新白板 → 落盘节点之间不传话。大家都对着同一块白板本轮只读板上已有的字写下的更新先放一边这一轮全部跑完白板才刷新。源码注释就一句第 N 步写的第 N1 步才看得见。图 4 · 上下文怎么传不互相传话只读写同一块白板拿图 1 的值班案例走一遍就是这个节奏图 5 · 值班案例按超步摊开写的东西下一轮才进白板聊天记录也走同一套把 messages 放进白板下一步才看得见。和别的方案比差在哪Dify、Claude Code 都常被叫「多 Agent」但和 LangGraph 一比差别一张表就够。Dify可视化平台 vs 代码库Dify 是网页画布拖节点LangGraph 是 Python 代码画图。维度DifyLangGraph形态网页画布拖拽节点Python 代码画图谁适合非开发者 / 快速搭原型开发者 / 精细控制授权Apache 2.0 修改版商用有附加条件MIT可商用Claude Code 动态工作流AI 现写一份 LangGraph你只说要做什么它在后台自动拆任务、编几十到几百个 agent 并行跑。维度Claude Code 动态工作流LangGraph谁来编排AI 自己读需求动态拆你代码画死图结构编排产物内存里的 agent 树跑完即散可编译、可回放的图定义可预测性同样输入可能走出不同的图图固定行为可预期一句话记Dify 给你开好的车Claude Code 是 AI 帮你现写编排LangGraph 给你发动机和图纸——自由度最大也最费功夫。我们开源的 DataBuff多 Agent 怎么协同我们开源的 DataBuffAI 原生 APMGitHubgithub.com/databufflabs/databuff也做了多 Agent 协同。你只对一个入口说话AI 大脑把活派给问数、巡检、运维、答疑等专家并行去查再汇总成带证据链的结论图 6 · 你只对一个入口复杂协作在后台完成核心目的LangGraph 的核心目的不是「给你现成的多 Agent 方案」而是给「需要长期运行、有状态、要持久化、要人机回路的 Agent 流程」提供一个可控的运行时而定——它把「并行、存档、等人、恢复」这些底层脏活做成原语让你只操心业务流程本身。**Takeaway**把案例里那 6 个函数和图结构抄到本地跑一遍你就知道多智能体编排是怎么一回事了。DataBuff开源 AI Native OpenTelemetry APM · 指标、链路、日志与 AI 排障一体GitHubhttps://github.com/databufflabs/databuff在线 Demohttps://demo.databuff.ai