想象你是一家婚宴餐厅的主厨。五十桌客人同时开席,你不可能一个人从凉菜炒到甜品——你会把整张菜单拆成冷菜、热菜、汤品和甜品,分给各灶台的师傅;每道菜出锅前,还有一位试菜员先尝一口,咸了打回、淡了加盐,合格了才端出厨房。这间后厨的运转逻辑,正是 AI 领域多 Agent 系统的经典范式:Orchestrator(编排器)是拆菜单的主厨,Worker(工作器)是各守灶台的师傅,Critic(评论器)是把守出菜口的试菜员。 这套“拆、做、评”的三层协作,让复杂的 AI 任务不再依赖单个大模型硬扛,而是拆成若干可并行、可复查的子任务,既提升了速度,又保证了质量。本文将用这间后厨贯穿全程,带你拆解每个角色的职责、它们协作的机制,以及如何在真实工程中落地这套架构。
掌握这套编排范式,你就能像主厨管理后厨一样,把复杂的 AI 任务拆给多个智能体并行处理,并用质量门禁兜底——这是多 Agent 系统真正落地的核心能力,也是 AI 应用工程师从“调接口”走向“设计系统”的分水岭。
目录
可视化演示
动态展示Orchestrator-Worker-Critic三层编排架构:编排器分解任务分发给工作器并行执行,评论器评估输出质量,编排器聚合最终结果。
本节配有交互动效(进入视口后自动加载,约 3KB)。
Orchestrator-Worker-Critic编排 编排器 工作器 评论器 聚合结果 Task→Decompose→Execute→Evaluate→Aggregate 三层职责分离提升可靠性
架构总览:一间分工明确的厨房
想象一家承办婚宴的餐厅后厨。客人订下五十桌流水席,主厨不会一个人从头炒到尾,而是把整张菜单拆成冷菜、热菜、汤品、甜品,交给不同灶台的师傅;每道菜出锅前,还有一位试菜员先尝一口——太咸打回重做,合格才允许出菜。主厨、灶台师傅、试菜员各干各的活,又紧紧咬合成一条流水线。
当我们要用大模型完成一项复杂任务时,同样的事正在发生。看似简单的问题背后往往藏着十几个步骤,比如“写一份行业研究报告”就涉及资料检索、数据分析、观点提炼、格式排版。与其让一个 Agent 用超长提示词包揽全部,不如派三个角色分工协作——这就是 Agent 编排模式中的 Orchestrator(编排器)、Worker(工作器)与 Critic(评论器)。
在这套架构中,编排器是“主厨”,负责把主任务拆解成子任务、分配给工作器并收集结果;工作器是“各灶师傅”,每个只负责自己的子任务、在自己的上下文里独立执行;评论器是“试菜员”,对照质量标准评估聚合后的结果,不合格就打回重做。三者通过结构化消息形成闭环:拆分 → 执行 → 聚合 → 评审 → 反馈 → 再执行。
就像婚宴上每道菜无论出自哪个灶台,最终都要被摆上统一规格的餐盘,汇聚成一桌完整的席面——编排器聚合所有工作器的产物,再由试菜员把关,才敢端到客人面前。
- 主任务与子任务主任务被拆解为 n 个互不干扰的子任务,交给不同的工作器处理。
- 工作器执行第 i 个工作器只在自己的上下文内执行第 i 个子任务,不共享中间状态。
- 结果聚合编排器把 n 个执行结果按任务逻辑组织、校验后合并为系统输出。
编排器职责:拆菜单的主厨
婚宴主厨接到订单后,第一步不是点火下锅,而是对着菜单想清楚:哪些菜可以提前备料、哪些必须现炒、哪几道菜共用一口锅需要错开时间。这份“拆单”的功力,直接决定后厨是否手忙脚乱。
在 Agent 系统中,Orchestrator 承担同样的“拆单”职责。它接收用户的高层级任务描述,将其分解为粒度合适的子任务,明确每个子任务的输入输出,再按依赖关系安排顺序——能并行处理的绝不串行,有依赖的排好先后。整体上,编排器做的是全局规划而非具体执行。
编排器的第二重职责是调度与聚合:把子任务分发给最合适的工作器,收集结果后按任务逻辑组织成完整答案,而不是简单拼接。实现上,编排器通常维护一个任务列表与执行状态表,支持失败重试与动态调整。
就像好主厨会把“红烧肉”分给炖菜师傅、把“糖醋鱼”分给案板师傅,编排器的价值不在亲自动手,而在于分得清、派得准、收得齐。
- 任务集合主任务用集合形式表示,n 取决于任务复杂度与拆分粒度。
- 分配给工作器每个子任务 tᵢ 指派给专项工作器 wᵢ,保证“专业的人做专业的事”。
工作器职责:各守灶台的师傅
婚宴后厨里,冷菜师傅只碰凉菜,炖菜师傅守着砂锅,甜品师傅看管烤箱。每位师傅案板上的工具、火候习惯都不相同,但互不串台,把自己的菜做好就是全部职责。
Worker 角色正是如此。每个工作器在独立的上下文窗口中运行,拥有自己的提示词、工具集与知识范围,只处理编排器发来的那一个子任务。独立上下文带来最大的好处是:彼此不污染、相互不阻塞,可以真正并行推进,这也是该层被设计成多个而非一个的原因。
并行的时间收益可以直接量化。如果 n 个子任务彼此独立,串行执行总耗时是各子任务耗时之和,而并行执行的总耗时只取决于最慢的那个工作器。子任务拆得越均衡,加速效果越明显——前提是任务真能被拆开。
当然,后厨并非只有并行——炖汤要时间、摆盘要顺序,工作器执行完也会把成品端回传菜口,交给主厨统一安排。工作器只管做好自己的菜,这是它的本分,也是它高效的原因。
- 单个子任务耗时Tᵢ 表示第 i 个工作器完成子任务所需的时间。
- 并行总耗时并行模式下以最慢者为准,即取所有耗时的最大值。
- 串行总耗时串行模式下逐个累加,因此远大于并行耗时。
评论器职责:把守出菜口的试菜员
婚宴出菜口站着的那位试菜员,不是随便尝一口就放行的。他心里有一本账:这道菜咸淡如何、摆盘是否齐整、温度是否达标。一旦不合标准,他会把菜退回灶台,并附上一句具体的话:“少放半勺盐,回锅三十秒!”
在多 Agent 系统中,Critic 承担的就是这个“把门”角色。它接收聚合后的结果,对照预定义的评估标准进行质量评估——答案是否完整、格式是否符合要求、逻辑是否自洽、数据是否准确,然后将判定结果与改进意见一并返回。
评论器的关键价值在于反馈的“可操作性”。泛泛的“写得不好”无法指导工作器改进;而“第三章缺少数据来源、结论与论据脱节”这样的反馈,才能让下一轮迭代真正变好。逐轮改进的过程可以建模为质量迭代方程:每轮结果在吸收反馈后向目标质量靠近。
试菜员从不亲自炒菜,但整场婚宴的出品质量由他把控。评论器同样不产出内容,却是让系统从“大概率可用”走向“稳定达标”的那道闸门。
- 当前质量Qₖ 表示第 k 轮迭代后聚合结果的质量分数。
- 目标质量Q* 表示评论器参照的满分标准。
- 修正步长α 是反馈的吸收率,介于 0 到 1 之间,控制每轮改进幅度。
协作机制:后厨的铃声与传菜口
后厨能有序运转,靠的不只是各人埋头干活:出菜口有传菜铃,主厨根据上菜节奏喊“三号桌冷菜先上”;哪口锅糊了,师傅喊一嗓子,主厨马上重新安排。消息、状态、异常——这些看不见的协作细节,才是流水线的心脏。
在技术上,编排器、工作器、评论器之间的协作依赖清晰的消息传递与状态管理。子任务、执行结果、评审意见都以结构化消息(如 JSON 或函数调用)在角色间流转;编排器维护一张全局状态表,记录每个子任务的“待执行 / 执行中 / 已完成 / 失败”状态,这是全局调度与结果聚合的基础。
异常处理与终止条件是这个环节最容易忽视的部分。工作器超时或返回错误时,编排器要能重新调度或更换策略;评论器连续打回时,系统必须有最大迭代轮次与质量达标阈值来兜底,避免无限循环烧掉大量 Token。
就像婚宴上菜讲究节奏,传菜铃一响就要有人响应——这套协作机制决定了系统在真实负载下是行云流水还是一团乱麻。
- 质量达标Q(yₖ) 表示第 k 轮输出的质量分,大于等于阈值 θ 即放行。
- 轮次上限k 达到 K_max 时强制收尾,防止成本失控。
架构价值:为什么后厨要分工
有人会问:主厨一个人把五十桌菜全做了不行吗?不行。一个人连轴转,速度快不了,出错也没人兜底,一旦某道菜失手整场宴席就毁了。分工的后厨,反而更可靠、更耐折腾。
这一逻辑映射到 Agent 系统就是架构价值的核心:可靠性、可调试性、可扩展性与成本控制。职责分离让每个角色的行为边界清晰,出错时能快速定位是“拆单错了、做菜错了、还是把关错了”;新增一个工作器就像给后厨加一个专做川菜的灶台,不必改动其他环节。
成本控制值得展开:与其让一个满身“技能”的超级 Agent 处理超大上下文,不如让多个专精工作器各自用小上下文干活,再让评论器把关重做。小模型单次调用便宜、上下文短,组合起来的整体成本往往低于一次“大而全”的调用,而迭代轮次 K 是成本的主要变量。
宴席办完,主厨最得意的事不是哪道菜惊艳,而是整场零失误;一套编排合理的 Agent 系统也是如此——不追求单次输出的侥幸,而是用体系保证“每次都还行”。
- 拆解成本C_拆解 表示编排器分析主任务并生成子任务清单的一次性调用开销。
- 执行成本合计ΣCᵢ 是 n 个工作器各自执行子任务的调用成本之和。
- 评审轮次成本K · C_评审 是评论器每轮评估的成本乘以实际迭代轮数。
应用案例:真实的宴席菜单
不同规模的宴席,主厨的排兵布阵完全不同:十人小桌,主厨顺手就做;百人流水席,就必须拆单、分派、试菜一条龙。Agent 编排模式也是同样的道理——任务越复杂、环节越多,这套三层分工的价值越明显。
在工业界,最常见的落地场景是复杂报告撰写。一个投研报告任务被编排器拆成行业调研、财务分析、合规审核三个子任务,三个工作器并行检索与生成,评论器检查每个论断是否有数据支撑,不合格的章节打回补充。类似的流水线也出现在代码生成与评审中:API 设计、数据库建模、前端页面由不同工作器产出,评论器按编码规范和安全隐患清单逐条审查。
工程上选择工作器时,通常会计算“子任务与工作器技能的匹配度”,选出最合适的那一位。这套匹配逻辑可以形式化为公式——匹配度越高,越可能被选中执行该子任务。
宴席越大,越需要标准化的流程;Agent 任务越复杂,越需要这套“拆、做、评”的编排范式。从投研报告到代码交付,这套模式正在成为多 Agent 系统最实用的“后厨手册”。
- 候选工作器集合W 表示当前可用的全部工作器。
- 技能匹配度SkillMatch 计算子任务与工作器能力的契合程度。
- 取最大值arg max 表示“让匹配度最大的工作器胜出”。
AI 应用场景
智能投研报告流水线
阶段:Agent 编排与执行
解决的问题:传统方式下,一名分析师写行业报告需要 2-3 天,资料检索、财务分析、合规审查串行进行且相互等待;若用单个 Agent 加超长提示词硬扛,又会上下文爆炸、出错难定位。用 OWC 模式把任务拆成子任务并行执行,再由评论器统一把关,交付时间可从两天压缩到半小时。
具体案例:某券商智能投研助手收到“生成新能源汽车 Q3 行业报告”任务后,编排器将其拆为行业调研、财报分析、政策合规三个子任务,三个工作器并行检索与生成;评论器检查每条数据是否附来源、结论是否有论据支撑,不达标的章节打回补充,经历两轮迭代后交付初稿。
代码生成与质量门禁
阶段:智能体协作与代码评审
解决的问题:让大模型一次写出完整登录模块,容易遗漏边界、风格不统一,人工 Review 又慢。OWC 把任务拆分给多个编码工作器并行产出,评论器按安全规范审查后再合入,相当于把“出菜口的试菜员”搬进了 DevOps 流水线。
具体案例:DevOps 流水线中,编排器将“实现用户登录模块”分解为 API 设计、数据表建模、前端表单三部分,三个编码工作器并行产出,评论器按编码规范与安全清单审查,发现 SQL 注入风险后打回修复,通过后才允许合并 MR。
客服工单多步处理
阶段:任务规划与反馈优化
解决的问题:售后工单常需查订单、查物流、查政策多个步骤,单 Agent 上下文混乱、出错难定位。OWC 让每层各管一段,出错能迅速定位到具体环节,回复质量也能在评论器把关下保持口径一致。
具体案例:电商售后 Agent 收到工单后,编排器按信息依赖排序子任务:先查订单状态、再查物流轨迹、最后查售后政策;三个工作器分别执行,评论器校验回复是否覆盖用户全部诉求且符合客服口径,不达标则重写,最终输出标准答复。
Python 演示
class Worker: def __init__(self, name, skill): self.name = name self.skill = skill def execute(self, subtask): return f"{self.name}({self.skill})完成[{subtask}]" class Critic: def evaluate(self, result): passed = "修订版" in result feedback = "质量达标,放行" if passed else "细节不足,退回修订" return passed, feedback class Orchestrator: def __init__(self, workers, critic, max_rounds=3): self.workers = workers self.critic = critic self.max_rounds = max_rounds def decompose(self, task): return [part.strip() for part in task.split(",")] def aggregate(self, results): return " | ".join(results) def run(self, task): subtasks = self.decompose(task) final = "" for round_no in range(1, self.max_rounds + 1): mark = "" if round_no == 1 else "修订版" results = [w.execute(mark + s) for w, s in zip(self.workers, subtasks)] final = self.aggregate(results) passed, feedback = self.critic.evaluate(final) print(f"第{round_no}轮交付: {final}") print(f"评论器反馈: {feedback}") if passed: break return final if __name__ == "__main__": workers = [ Worker("市场组", "行业调研"), Worker("财务组", "财报分析"), Worker("合规组", "政策审核"), ] critic = Critic() boss = Orchestrator(workers, critic, max_rounds=3) print("最终交付:", boss.run("行业调研,财报分析,政策审核"))
subtasks = self.decompose(task)编排器把主任务按逗号拆成子任务,相当于主厨拆单。results = [w.execute(mark + s) for w, s in zip(self.workers, subtasks)]循环让每个工作器并行执行自己的子任务。passed, feedback = self.critic.evaluate(final)评论器评估聚合后的结果并返回反馈。for round_no in range(1, self.max_rounds + 1):迭代直到通过或达到最大轮次,防止无限循环。boss = Orchestrator(workers, critic, max_rounds=3)把工作器与评论器组装进编排器,形成完整系统。
常见误区
误区我一直以为 Orchestrator 是那个最聪明的角色,所有复杂推理都应该由它来做,工作器只是跑腿工具,各自调一下接口而已。
正解编排器的核心是拆解、调度与聚合,不是执行者。真正的内容产出在工作器;如果编排器包办一切,系统就退化成单 Agent,并行与质量门禁全部失去意义。就像主厨不会亲自去切每一根葱——管理动作永远不等于执行动作。
为何常见:很多教程把编排器画在最顶层最醒目的位置,让人误以为它承担了所有智能。
误区评论器的输出不就是给个 0-100 的分数嘛,低于 60 分就打回,简单得很。
正解无效的反馈无法驱动下一轮改进。真正有效的评论器要指出具体问题并给出可执行的修改方向——“第三节缺少数据来源”远比“质量一般”有用。质量迭代方程里的 α 就是被反馈质量决定的:反馈越具体,修正越到位。
为何常见:演示 demo 为了省事常把评论器做成简单的打分函数,掩盖了它作为“专家评审”的复杂度。
误区并行执行嘛,那就多开几个工作器,子任务切得越细,跑得一定越快。
正解并行有代价:拆解开销、消息传递、聚合协调、Token 成本都会随子任务数量增长;切分过细还会让单个子任务上下文过小,丢失全局信息。只有当子任务真正无依赖、且单个子任务足够“重”时,并行才有正收益。
为何常见:“并行 = 快”的直觉让人忽略了调度开销,就像婚宴上派一百个人做一百盘凉菜,灶台都不够用。
误区评论器看过一遍就放行或者打回一次,不就行了吗?为什么要循环好几轮?
正解复杂任务首轮通过率往往不高,需要两三轮迭代收敛。但这种循环必须有终止条件——最大轮次与质量阈值,否则遇到总被打回的场景会无限烧钱。后厨里也不可能让试菜员无限次尝菜,宴席还得按时开席。
为何常见:简单 demo 一轮就过了,让人低估了真实任务的迭代需求与成本风险。
面试题
Q1. 在 OWC 模式中,负责将复杂任务拆解为子任务的角色是?
- A.编排器负责拆解与调度← 正确答案
- B.工作器负责执行子任务
- C.评论器负责质量评估
- D.三个角色共同拆解
答案:A。编排器对应“拆菜单的主厨”,负责任务分解、分配与聚合;工作器负责执行,评论器负责评估,三者职责分离,“共同拆解”违背了这一原则。
Q2. 三个工作器同时推进各自子任务,这体现了架构的哪一特性?
- A.任务串行逐项处理
- B.子任务并行执行← 正确答案
- C.结果由评论器生成
- D.编排器亲自执行
答案:B。工作器层最核心的特性是并行执行——像三个灶台同时开火,互不阻塞。串行、评论器生成结果、编排器亲自执行均与角色职责不符。
Q3. 评论器发现结果不达标时,系统下一步通常做什么?
- A.触发反馈并重新迭代← 正确答案
- B.直接终止整个流程
- C.增加新的工作器
- D.跳过评估继续交付
答案:A。评论器的职责是给出可操作反馈并驱动下一轮迭代,直到质量达标或达到轮次上限。直接终止、加工作器、跳过评估都会让质量门禁失去意义。
Q4. 关于编排器的结果聚合,正确的做法是?
- A.将子结果简单拼接
- B.按逻辑组织并校验← 正确答案
- C.交由评论器合并
- D.丢弃低质量片段
答案:B。聚合不是拼接,而是按任务逻辑组织并做一致性校验,类似把各灶台的菜摆上统一规格的餐盘。直接拼接会导致内容割裂,评论器不负责合并。
Q5. 并行分解提升整体效率的根本原因是?
- A.总体任务量减少了
- B.无依赖子任务同时推进← 正确答案
- C.模型推理速度变快了
- D.评论器评分变高了
答案:B。并行的收益来自“无依赖子任务同时推进”,让总耗时从累加变成取最大值。任务总量没有减少,模型速度也没变快,评论器评分与效率无关。
Q6. 要让评论器反馈真正驱动改进,反馈应当?
- A.给出具体可操作的修改建议← 正确答案
- B.只给分数不给任何理由
- C.总是正面鼓励避免打击
- D.与任务内容无关的通用建议
答案:A。有效反馈必须具体可操作,像试菜员说“少放半勺盐,回锅三十秒”。只给分数无法指导修改,无脑鼓励与无关建议都不会让迭代向目标质量收敛。
Q7. 为防止系统无限循环打回重做,必须配置?
- A.最大迭代轮次与质量达标阈值← 正确答案
- B.只依赖评论器的直觉判断
- C.撤销评论器否决权保证进度
- D.让工作器自行决定结果质量
答案:A。协作机制要求“质量达标或达到轮次上限”即终止,这是控制成本的关键。靠直觉、撤销否决权、让工作器自评都会破坏质量门禁或造成无限循环。
Q8. 以下属于编排器职责的有?
- A.任务分解与子任务分配← 正确答案
- B.协调工作器执行节奏← 正确答案
- C.聚合各子任务的结果← 正确答案
- D.对结果进行质量评分
答案:ABC。编排器做拆单、调度与聚合,对应 A、B、C;对结果评分是评论器(试菜员)的职责。
Q9. 关于角色与底层模型的关系,正确的说法是?
- A.三个角色必须是三个不同模型
- B.同一模型可承担多个不同角色← 正确答案
- C.角色是逻辑分工而非物理实体← 正确答案
- D.评论器必须使用最强的模型
答案:BC。OWC 中的角色是逻辑分工,可以由同一个模型通过不同提示词、不同上下文来扮演,不要求、也不一定需要三个物理模型。评论器的有效性取决于评估标准与提示词设计,而非模型最大最强。
Q10. Orchestrator-Worker-Critic 架构的典型价值包括?
- A.职责分离便于错误定位← 正确答案
- B.并行执行提升处理效率← 正确答案
- C.保证推理过程零成本
- D.新增工作器易于扩展← 正确答案
答案:ABD。职责分离让问题可定位、并行提升效率、新工作器即插即用,都是架构价值;但任何 LLM 调用都有成本,架构做的是控制而非归零,C 错误。