跳到主要内容

1 篇博文 含有标签「Multi-Agent」

查看所有标签

LangGraph.js Supervisor-Worker 架构解析:把它拆成四件事,并实测两个成本旋钮

· 阅读需 22 分钟

Supervisor-Worker 是中心化调度最典型的形态:一个调度者负责「派活」,若干专家负责「干活」。听起来像个新概念,但把它拆开只有四件事——而且我用大约 40 行手写代码复现了官方库完全相同的执行轨迹,这就是「它内部到底做了什么」最直接的证据。

更值得一看的是后半篇:这套架构有两个成本旋钮,实测能把共享上下文从 16 条消息压到 4 条(字符数 -71%),而执行轨迹一字不变。

但请先看下面那段更正:这套架构依然有效,官方的推荐实现却换了——从 createSupervisor(worker 是图节点)换成了 subagents pattern(子 agent 包成 tool)。我在 §五 把新写法实现并实测了,结论对新写法有利。

环境:Node v24.14.1 / @langchain/langgraph@1.4.16 / @langchain/langgraph-supervisor@1.1.2。为了让执行轨迹完全确定、可复现,我用脚本化模型(按调用次序返回预置响应的自定义 BaseChatModel)替代真实 LLM——无需 API Key,全部输出都是本机真实运行结果。脚本留档在 source/langgraph-supervisor/。

⚠️ 更正说明(2026-09-20 追加)​

本文初版把 createSupervisor 当作 Supervisor-Worker 的标准做法来推荐,这一点需要更正:官方已经改了推荐路径。

  • LangChain 官方文档已把新代码导向 subagents pattern——把子 agent 包成一个 tool,交给一个普通的 createAgent 调度;Python 侧另有专门的迁移文档 Migrate from langgraph-supervisor,给出了逐项映射(output_mode → 在工具包装层里自己格式化输出、create_handoff_tool → 自己写一个调用 subagent.invoke() 的 tool)。
  • 同时,createReactAgent → createAgent 也是 JS v1 的既定迁移方向(见 JavaScript v1 迁移指南)。本文初版的示例两个都用上了,等于踩在两条旧路径上。

一个精确措辞上的澄清(核实依据分两层):官方文档的原话是「no longer actively maintained」(不再积极维护)——注意它说的是「不积极维护」,不是「已废弃」。工程上的旁证是我自己核对的 npm 元数据:该包没有 deprecated 标记,最近一次发版是 2026-09-12 的 1.1.2(本文写作前 8 天),仍由 LangChain 官方维护者发布。所以:

  • 存量代码不必惊慌,它不是"弃用炸弹";
  • 但新代码确实不该再用——这不是"选哪个都行"的偏好问题,官方已明确表态推荐变了。

我把 subagents pattern 也实现并实测了,结论对它有利:同一个任务、路由用的 LLM 调用次数完全相同(都是 3 次),但共享上下文只有 6 条消息,不到库版本默认值(12 条)的一半,而且不需要调任何参数。完整实现与对比见下文「五、官方已改推荐:subagents pattern」。

本文仍然值得读的部分:§三 把 supervisor「拆成四件事」的机制分析依然成立——理解机制才能看懂两种实现的关系;§四 的两个成本旋钮实测也依然有效,但请注意它的定位变了:在新范式里,这件事由「你的工具包装层返回什么」直接决定,比调库参数更自由。读的时候请把 §二/§三 当作"存量代码的长什么样",把 §五 当作"新代码该怎么写"。