Codex Multi-Agent V2 实战:怎样拆任务、分模型、控成本
OpenAI Codex DX 团队的 Eric Provencher 分享了一套多 Agent 编排方法:先判断任务能否独立拆分,再配置模型、推理强度、通信与上下文,最后算清时间和 Token 两本账。
- 多 Agent 的价值是让独立工作重叠进行;高度耦合、必须串行或共同修改核心区域的任务通常不该拆。
- 先用独立完成、独立验收、低写入冲突三项判断能否并行,再按难度给 Scout、Worker、Smart worker 分配推理强度。
- 主 Agent 保留所有权与最终验收,依赖消息可以点对点直达;上下文按任务依赖裁剪,平台安全边界仍然存在。
- 多 Agent 可能缩短墙钟时间,但总 Token 和协调成本通常上升;必须用真实任务同时核对时间、重复、冲突与返工。
OpenAI Codex DX 团队的 Eric Provencher 最近发布了一篇多 Agent 实践说明,详细分享在 Codex 的 Multi-Agent V2 下,怎样把一个复杂任务拆给不同 Agent,又不让团队陷入重复调查、上下文膨胀和互相覆盖。
这份方法真正有价值的地方,不是教人“多开几个 Agent”,而是给出一套配置顺序:先判断工作能不能拆,再决定谁来做、用多少推理、带多少上下文,最后把有效规则固化成 Skill。核心原则也不是“换模型才省钱”,而是先减少不必要的推理,再用并行缩短必须等待的时间。
Codex 的 Ultra 模式会把 Agent 协调变成默认行为,适合歧义大、上下文分散或风险高的工作;普通任务不必一上来就用 Ultra。Eric 给出的另一条路,是留在 Sol Medium,用一段短 Prompt 或 Skill 明确编排规则:主 Agent 继续和用户沟通,把后台工作拆出去,只有真正困难的部分才提高推理强度。
- 1为什么需要多 Agent
- 2什么任务能拆
- 3分给什么模型
- 4Agent 怎样协调
- 5给它多少上下文
- 6怎样固化成 Skill
- 7省了什么、付出什么
为什么需要多 Agent
单个 Agent 完成一项复杂任务,通常要依次读代码、查测试、确认边界、实现、再验证。问题不在于每一步都慢,而在于很多本来可以同时进行的调查,被迫排成一条队。
时间结构
每一步并没有变快,能重叠的等待被叠在了一起
多 Agent 的第一项收益,是把互不依赖的等待重叠起来:一个 Scout 追调用链,另一个检查权限和测试缺口,主 Agent 仍能和用户确认范围。等证据回来,后续实现少走一次弯路。
但只要工作高度耦合,增加 Agent 就没有意义。下一步必须依赖上一步的结果、所有人都要修改同一段核心代码,或者最终答案只能整体判断时,单 Agent 往往更快。是否并行,取决于任务结构,不取决于工具栏里能开多少 Agent。
什么任务能拆
一个任务值得拆,至少要同时满足三项:子任务能独立推进,结果能独立验收,写入范围不会彼此打架。
拆分实验
点掉任一条件,看看并行建议怎样变化
三项同时成立,才是相对干净的并行边界。点击下方条件,查看并行建议如何变化。
给每个 Agent 明确所有权、交付物和验收条件。
适合并行给每个 Agent 明确所有权、交付物和验收条件。
先补边界,再拆缺少独立性或验收条件时,先由主 Agent 把契约说清楚。
保留单 Agent写入面高度重叠时,并行通常只会提前制造冲突。
例如给现有产品增加“导出 CSV”:查现有数据流、核对权限规则、寻找测试位置可以并行;但字段定义和权限契约必须先定下来。契约稳定后,后端接口、前端入口和测试才适合分别实现。若三个 Agent 同时修改共享类型和同一核心函数,并行带来的只是更早发生的冲突。
这里真正要导出的不是一句“去做导出功能”,而是每个子任务的目标、范围、交付物和验收条件。任务单写不清,说明边界还没画出来;此时继续拆,只会把模糊复制给更多 Agent。
分给什么模型
Eric Provencher 给出的最简单配置,是先保持同一模型家族,只调整 reasoning_effort。这样先把“任务难度”这一项变量调清楚,不必一开始就同时比较多个模型的能力、价格和输出习惯。
| 角色 | 建议配置 | 负责什么 | 怎样交付 |
|---|---|---|---|
| Scout侦察兵 | Sol · Light | 只读定位文件、调用链、测试和风险入口 | 证据、路径、结论;不改代码 |
| Worker普通工人 | Sol · Medium | 范围明确的实现、检查和辅助工作 | 局部改动、测试与结果 |
| Smart worker攻坚手 | Sol · High | 困难实现、歧义消解与高风险协调 | 关键判断、方案与验证 |
Light 并不等于能力差,它只是少花推理在狭窄发现任务上;High 也不等于更适合所有工作,它应该留给歧义、风险和系统耦合真正更高的部分。把每个定位文件的任务都交给 High,会把便宜的查找变成昂贵的深思;把架构冲突交给 Light,省下的推理又会在返工中补回来。
这张角色表是实用默认值,不是平台白名单。当前 GPT-5.6 家族还有 Terra、Luna 等可用选择,多 Agent 也可以委派给其他受支持模型。稳妥的做法是先用同一基线跑通,再拿真实任务比较不同模型与推理强度;不要把“配置最多”误当成“优化最好”。
Agent 怎样协调
任务拆开后,主 Agent 仍然是协调者:它负责避免重复调查、明确文件所有权、追踪依赖、整合结果,并继续与用户沟通。分出去的是具体工作,不是最终责任。
协作路径
信息可以直达,所有权仍留在主 Agent
切换路径,观察消息转发与责任归属是两件不同的事。点击两种路径,比较消息怎样抵达依赖方。
信息却不必层层上报。Scout 找到某个权限检查入口后,可以直接把文件路径和结论发给真正依赖它的 Worker;主 Agent只需知道依赖已经解除。这样能少一次转述,也避免协调者的上下文被每条中间消息塞满。
并发预算可以按线程配置。Eric 分享这套方法时,默认是四个 Agent,且包含协调者。最直接的组合是“一个协调者+三个并行 Scout”,分别调查不同问题;也可以让一个 Smart worker 带一个 Scout 和一个 Worker,形成一支处理复杂子问题的小队。四个是当时的默认值,不是永久上限,更不是每次都应该用满的配额。
直接通信不等于去中心化失控。谁能改哪个文件、共享契约由谁决定、什么时候合并、最终由谁验收,仍然需要一个清楚的任务图。通信可以走最短路径,所有权不能含糊。
给它多少上下文
子 Agent 是否继承父对话,应该由它对既有决策的依赖决定。狭窄的只读调查往往适合 fork_turns: "none":只给它当前问题、允许读取的范围、输出格式和验收标准。需要延续架构决定、兼容约束或用户偏好的 Worker,则应继承相关历史。
上下文分层
裁剪聊天历史,不裁剪完成任务所需的边界
两种方式改变的是任务上下文;平台安全层是共同底板。fork_turns: none干净上下文目标、范围、交付物、验收和限制必须重写
不带父对话里的无关讨论和编排指令
fork_turns: all / N继承相关历史仍需明确当前所有权与停止条件
保留总目标、既有决定和兼容约束
没有聊天历史,不等于没有系统限制。
干净上下文不是空白任务单。此前对话里的工具范围、业务限制和“不要改什么”不会自动成为这次任务的说明,必须重新写进派发内容。反过来,继承太多历史也会带入无关讨论,甚至让叶子 Agent 误以为自己还应继续派生团队;这时要明确告诉它直接完成任务,不再委派。
Eric 给叶子 Agent 的边界提示很短,实际可以直接复用:
直接完成这项任务,不要再创建其他 Agent;你父级收到的委派规则只适用于父级。
还有一个常见误解:fork_turns: "none" 隔离的是聊天历史,不会取消平台的 sandbox 或 permission mode。任务上下文可以裁剪,系统安全边界仍然生效。
怎样固化成 Skill
一套分工只有反复有效,才值得写进 Skill。适合固化的不是“每次都创建三个 Agent”,而是那些容易被忘掉、又能跨任务复用的纪律:什么工作优先交给 Scout,什么时候升级推理,怎样避免重叠写入,叶子 Agent 能否继续委派,以及哪些动作必须由用户批准。
- 1写下默认规则角色、边界与停止条件
- 2放进真实任务观察通信与并行是否有效
- 3统一验收时间、冲突、返工与质量
- 4修正规则保留复现的经验,删除模板噪声
- 谁负责:Scout / Worker / 主 Agent
- 能做什么、不能改什么
- 交付物、证据与验收标准
- 哪些扩域或外部动作留给用户批准
Skill 让协调者下次不必从零重述团队约定,但它不能替项目预先画好任务边界。代码结构、风险和模型能力发生变化后,默认值也要跟着真实结果调整。最好的 Skill 更像可修订的操作手册,而不是一段永远正确的自动化咒语。
Eric 已把这套约定整理成开源仓库 provencher/codex-skills,其中的 orchestrate/SKILL.md 就是一个很短的可运行版本。安装时把 orchestrate 目录复制到 ~/.codex/skills/,随后用 $orchestrate 调用。它最值得借鉴的不是某一句提示词,而是把“角色、推理强度、上下文、所有权和批准边界”一起写进可复用规则。
到底省了什么、付出什么
多 Agent 最容易被误解成“既更快又更省 Token”。实际是两本不同的账:独立工作重叠后,墙钟时间可能下降;但每个 Agent 都要读取材料、推理、调用工具和检查结果,总 Token 往往上升,还会增加协调、冲突与返工成本。
两本账
时间账可能变好,工作量账可能同时变大
不要把墙钟时间、Token 和最终质量合并成一个模糊的“效率”。从开始到完成
独立工作重叠 → 可能下降- 少等串行调查
- 更早暴露风险和依赖
所有 Agent 的总消耗
多份读取与推理 → 通常上升- 更多 Token、工具调用和检查
- 协调、冲突与返工成本
因此,多 Agent 优化的第一目标通常是缩短等待、提高探索覆盖或降低一次做错的风险,而不是减少总 Token。它也可能让主 Agent 的上下文更干净,但那只是把工作分散到了别处,并不等于系统总消耗变少。
评估时至少同时看四项:完成时间、重复调查、写入冲突和返工次数。先记录单 Agent 基线,再一次只改一个变量。Eric 建议重点实验四个旋钮:推理强度、上下文继承、委派权限、Agent 之间的协作方式。例如先只并行两个只读调查,或只把一个高歧义任务从 Medium 升到 High;没有真实对照,就不存在“最佳编排”。
最后可以把选择压缩成一句话:紧密耦合的工作留给一个 Agent;能独立推进、独立验收、低冲突的工作,才值得组成团队。 多 Agent 真正节省的是无效等待,而它付出的,是更多模型工作和更严格的协调纪律。
- 角色与推理强度速查表
- 任务拆分三道门
- 可直接复用的委派任务单
- 多 Agent 效果核对表
- 开源 Skill 与原始入口
多 Agent 怎样真正缩短等待
Eric Provencher 分享的重点不是多开几个 Agent,而是一套有顺序的编排方法:先确认任务能拆,再分配推理和上下文,最后收回所有权与验收。
先看问题:很多调查能同时做,却被排成一条队
多 Agent 把互不依赖的等待重叠起来;高度耦合的工作仍留在一条线上。
三道门全部通过,任务才从单线分流
独立推进不等别的子任务结论。
独立验收能用文件、测试或复现单独证明。
低写入冲突所有权清楚,不抢共享契约。
字段、权限等共享契约先定;有一项不过,就先保持单线。
先用同一模型家族,把推理强度跟风险对齐
Scout · Light只读定位、追调用链、找测试。
Worker · Medium边界明确、可独立验收的局部实现。
Smart worker · High架构冲突、模糊需求和高代价判断。
证据走短路,责任留在主 Agent;上下文只带需要的部分
所有权集中主 Agent 管任务图、文件边界和总体验收。
证据直达Scout 直接交给需要证据的 Worker。
上下文按需狭窄调查用干净上下文;依赖旧决定才继承历史。
边界重申工具、安全、禁止改动与叶子不再委派都写清。
先跑通,再把反复有效的纪律写进 Skill
运行真实任务测试拆分、交接和验收。
观察记录重复、冲突和返工。
固化写下角色、推理、上下文与边界。
复用与修订再次调用,再按结果改默认值。
Eric 已把约定整理到 provencher/codex-skills 的 orchestrate/SKILL.md。
最后结账:墙钟可能更短,总 Token 往往更多
可能省下无效等待、调查盲区和一次做错的风险。
通常增加总工作、上下文读取、协调、冲突和返工。
紧密耦合留给一个 Agent;能独立推进、独立验收、低冲突,才值得组成团队。
三个 Agent 一起改,怎么反而更慢?
用户今天把 CSV 导出做完。
协调者三个 Agent 一起上,会更快。
任务还没拆,人数先加了。
Worker你也改了权限?
协调者停。我们只是把模糊复制了三份。
没有边界的并发,只会让冲突更早发生。
先定共享契约,再并行独立工作。
Light 做狭窄发现,High 留给高歧义与高代价。
Scout入口和测试位置,直接给你。
协调者信息走短路,责任留在我这里。
分出去的是工作,不是最终责任。
用户交付更快了。
协调者但 Token 更多。跑通的纪律,写进 Skill。
省的是无效等待;独立、可验收、低冲突的工作才值得组队。
