先记住这个答案
Orchestrator-workers 是工作流的一种,其中 orchestrator(通常是一个 LLM)接收任务后,基于输入动态生成子任务列表,将每个子任务分派给 worker(LLM 或工具),并整合所有 worker 的输出来形成最终答案。其核心特征是任务分解不预先固定,而是由模型的推理决定。与之相对,工作流式编排(如 prompt chaining、routing)的子任务序列在代码中已提前定义,模型只负责在预定节点执行特定步骤,不控制整体流程走向。本质区别在于流程控制权:前者模型拥有动态规划权,后者开发者拥有静态定义权。
- orchestrator-workers 是特殊工作流,子任务由模型动态决定
- 预定义路径工作流的流程预定义,模型只执行具体步骤
- 无法预知子任务时选 orchestrator-workers,否则优先工作流
两种模式的机制对比
预定义路径的工作流将流程编码为图或链,每个节点对应一个 LLM 或工具调用。模型只在节点内部决策,比如 routing 中模型选择分类路径,但路径集合在编码时已完全列出。这保证了执行的可预测性和可调试性,但面对非预期任务会僵硬。
Orchestrator-workers 中,orchestrator 接收完整任务后,先自己规划:列出子任务清单、每个子任务需要的 worker 类型、甚至执行顺序。这个过程没有开发者预写决策树,每个子任务的产生都源自模型对当前输入的理解。之后 orchestrator 将子任务分派给 worker,收集结果再汇总。关键是不存在固定的子任务集合。
代码库修改任务的具体对比
假设任务:为仓库添加一个登录功能。工作流式编排也许预先定义三个步骤:写路由、写控制器、写测试。这些步骤固定,模型每一步照做。但若仓库已有自定义框架,规定所有路由需在中心配置注册,那么这个预定义流程会失效,因为没包含该概念。
Orchestrator-workers 中,orchestrator 模型会先探查仓库结构,发现路由需要在特定文件中注册,然后动态生成子任务:修改注册文件、添加控制器、创建视图等。worker 各自执行并返回结果,orchestrator 再检查依赖和合并。这体现了动态分解对不可预测需求的适应力。
适用边界与代价
Orchestrator-workers 的不利因素:orchestrator 的规划错误会直接导致子任务清单失真,而且一次糟糕规划可能引发一连串无效 worker 调用,代价高于工作流中单个节点失败。若任务子步骤基本固定,使用工作流能得到更低延迟、更低 token 消耗和更可控的失败。
另外,orchestrator 需要足够上下文才能做出高质量分解,否则遗漏关键步骤。实践中应给 orchestrator 提供充分的环境信息(如文件列表、约束),并允许它在执行中追加或调整子任务,而不是一旦生成清单就严格不变。若无法提供这种动态调整,则模式退化为性能较低的固定流程。
容易答错的地方
- 认为 orchestrator-workers 不是工作流
- Anthropic 将 orchestrator-workers 列为 workflow 类型之一,它属于工作流的变体,因为总体结构仍然由代码编排(orchestrator 循环调用 worker),只是子任务在运行时确定。混淆它和 agent 会造成架构选择失误。
- 以为动态就比静态高级
- 动态分解带来更高 token 成本和风险,只有当子任务不可预测时才划算。若能预定义步骤,强制使用 orchestrator-workers 只会增加复杂度和失败点。应优先选最简单可用的模式。
面试官还会怎么问?
orchestrator-workers 和 routing 工作流有什么区别?
Routing 只是根据输入选择一个预定分支,每个分支是完整流程。Orchestrator-workers 需要分解出多个子任务并组合,子任务本身不是预先定义的固定分支。Routing 解决输入类型分派,orchestrator-workers 解决动态任务规划。
什么时候该把 orchestrator-workers 升级为 autonomous agent?
当 orchestrator 需要基于中期结果调整计划,且调整深度和频度超过简单循环时,agent 更适合。Agent 完全自主控制步骤,直到任务完成或停止条件。但 agent 更难以预测,需要更强的环境和校验机制。
orchestrator 如何决定 worker 数量?
没有固定公式,orchestrator 根据任务类型估出子任务粒度。过多 worker 增加 token 和协调开销,过少则漏细节。可在 prompt 中要求先列出候选子任务再分组,或参考 token 预算和 worker 能力来限制数量。
参考资料
示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。