花了两天,用 LangGraph 搭了一个多 Agent 文档分析流水线。
出发点很简单:我的体系里一直是用 delegate_task 做多 Agent 编排的(Supervisor 拆任务 → 派给 Worker → 聚合结果)。LangGraph 的 StateGraph 是另一种路子——你画一张图,Agent 按图走。我想知道:这两种方式,什么时候该用哪个?
两天实践下来,答案比我想象的清晰。
一个 5 节点的 StateGraph:
Supervisor → Retriever → Analyst → Quality → End 每个节点做什么:
整个流程跑在阿里云 1.6GB 的小机器上,后端 FastAPI,前端是 entos.top 上的一个交互页面。你可以在这里体验:
在 delegate_task 方案里,条件判断是写在 Supervisor 的代码里的。在 LangGraph 里,条件边是一等公民——你看一眼图结构就知道整个流程怎么走的,不需要读代码逻辑。这在复杂流程时价值很大。
delegate_task 要自己管理状态——Supervisor 记住每个 Worker 返回了什么、当前进度到哪里了。LangGraph 的 State 是图级别的,每个节点读写同一份。这对重试循环场景特别好用。
LangGraph 内置了 LangSmith 集成。每个节点的输入输出、条件边的决策、耗时——开箱即有。我自己搭的方案要手动加日志。
StateGraph 要求在编译时把结构定死。部署后就不能改了。而 delegate_task 是运行时动态决定的——Supervisor 可以根据当前对话的上下文实时决定下一步派给谁。动态决策场景不适合静态图。
LangGraph 的图是黑盒推理——你得理解图引擎的执行逻辑才能搞清楚状态怎么流转。delegate_task 的调试思路更直接——就是函数调用链。
3 个节点以下的流程,delegate_task 20 行搞定。LangGraph 要装包、定义 State、注册节点、配置条件边——门槛高得多。
| 对比维度 | LangGraph | delegate_task |
|---|---|---|
| 流程确定性 | ✅ 预先画好的图 | ⚠️ 运行时动态决定 |
| 状态管理 | ✅ 图级 State 内置 | ❌ 需要自己管理 |
| 条件路由 | ✅ 声明式 | ⚠️ 散落在代码里 |
| 动态决策 | ❌ 编译后不可改 | ✅ 随时决定下一步 |
| 调试门槛 | ⚠️ 需要理解图引擎 | ✅ 函数调用链 |
| 小项目(≤3节点) | ❌ 太重 | ✅ 20 行搞定 |
| 复杂流程(≥6节点) | ✅ 图结构清晰 | ⚠️ 代码膨胀 |
| 入门成本 | 2-3 天 | 0(已在用) |
不是替代关系,是互补关系。 在我的体系里,Supervisor 先用 delegate_task 做动态决策——"这个问题该走哪个流程?"决策完之后,如果确定是一个预先可知的固定流程图,就交给 LangGraph 按图执行。
LangGraph 的位置: 一个可选的编排引擎,在需要严格按图执行的场景下按需启用。不替代 delegate_task,不替代 Harness,不替代记忆系统。
目前我的系统里大多数流程是动态决策型的。所以 delegate_task 仍然是我的主力编排方式。
但我给 LangGraph 留了一个位置:对于固定的、已知的多步操作流程,以后用 LangGraph 替代手写 if/else。
换句话说:
最后说一句:最好的框架决策,不是"用一个替代另一个",而是"知道什么时候该用哪个"。
💬 评论