教程 / Codex 与 AI 编程

Codex 子代理:并行委派的正确配法

子代理主要不是让任务变快,而是把噪音挡在主线程之外。这篇讲清楚什么时候值得分身、委派时要说清哪三件事,以及配置里那些必须写对的字段。

更新于 2026-10-24由 GPTHubs 团队 整理约 9 分钟读完Codex 与 AI 编程

子代理解决的真正问题是上下文污染

一个长会话最贵的资源不是 token,是主线程的上下文。它会先被日志、grep 结果、失败的测试输出塞满,然后开始忘掉你二十分钟前定的规则。官方文档把这两种现象叫 context pollution(上下文污染)和 context rot(上下文腐烂)。子代理的思路很直接:把产生海量中间输出的事情丢出去,主线程只收结论。

  • Subagent workflow:父代理拆任务、分派、等待、合并的整体流程。
  • Subagent:单独跑的一个代理,有自己的一套模型与工具调用。
  • Agent thread:子代理对应的 thread,可以单独查看、单独 steer、单独停。
任务形状适合并行吗原因
读多:探索代码库、追调用链、跑测试、triage 报错、总结长文档适合彼此只读,中间产物多,天然该被隔离掉
写多:同时改多个文件的业务逻辑谨慎几个代理会在同一批文件上互相覆盖,协调成本可能高于收益
互相依赖的多步任务不适合后一步要等前一步结论,并行只会制造返工

怎么让它真的去分身

多代理在当前版本的 CLI、App、IDE 里默认是开着的。但它不会读心:除了最高档的智能档位会主动委派,多数情况下你得明说要并行。三句话以内的指令就够用。

三句能直接触发的说法,中英文都认
Spawn two agents: one reviews the migration scripts, one checks the rollback path.
Delegate this work in parallel, one agent per failing test file.
Use one agent per section of the spec, then merge the summaries into one list.
  • 直接下指令:spawn two agents、delegate this work in parallel、use one agent per point。
  • 写进 AGENTS.md 或一个 skill:让「这类任务必须拆成并行子代理」变成默认行为,不用每次重复。
  • 靠智能档位:ChatGPT Work 侧多数档位仍要显式要求,最高档会自己判断并主动委派。

委派提示词要说清三件事

官方给的建议可以浓缩成三条:怎么分工、要不要等全部完成、每个子代理回什么样的摘要。缺哪一条,协调工作就会掉回你身上。

  1. 01

    写清切法

    按风险类别切、按目录切、按失败用例切都可以,但要明确边界,避免两个子代理扫同一片区域。

  2. 02

    写清等待策略

    是等全部结果齐了再统一汇总,还是先回来一个就先处理一个。前者适合出报告,后者适合抢时间。

  3. 03

    写清交付格式

    要多少条、要不要文件路径和行号、要不要区分「确认的问题」和「可疑但没验证」。

  4. 04

    写清只读还是可写

    只做分析的子代理明确写不要改文件,否则它可能顺手「修好」你正要自己改的地方。

改写自官方示例:一个分支审查的委派指令
用并行子代理审查这个分支,一共三个:
1) 安全风险,2) 测试缺口,3) 可维护性。
三个都只读,不要改文件。
各自最多返回 8 条,带文件路径与行号。
三个都跑完再汇总,按类别组织,不要按子代理组织。
差的委派好的委派
「帮我全面检查一下」「三个子代理,分别看安全、测试、可维护性」
「看看有什么问题」「每条带路径和行号,最多 8 条,没验证的单独标出来」
「你们先弄着」「三个都跑完再一起汇总,中途不要给结论」

内置代理与自定义代理

不配置也能用,因为有三个内置代理兜底。想做稳定的分工,就写自定义 agent:每个文件一个 TOML,放在项目里的 .codex/agents/ 或个人的 ~/.codex/agents/。

内置代理用途
default通用兜底,没有更合适的就用它
worker执行类:改代码、修失败用例
explorer读多的代码库探索,产出的中间结果最占上下文
.codex/agents/pr-explorer.toml:只读探索型子代理
name = "pr_explorer"
description = "只读探索:定位改动范围、相关测试与历史提交"
model = "gpt-6-luna"
model_reasoning_effort = "high"
developer_instructions = """
Stay in exploration mode. Do not edit files.
Report file paths, line numbers, and the tests that cover them.
If something is uncertain, say so instead of guessing.
"""
  • 必填三字段:name、description、developer_instructions。名字是唯一标识,文件名不要求和它同名。
  • 可选字段:model、model_reasoning_effort、model_reasoning_summary、model_verbosity。
  • 自定义代理和内置代理重名时,自定义的优先。
  • 这些字段不能覆盖:sandbox_mode、approval_policy、model_provider、mcp_servers、service tier。安全边界在父会话手里,不在 agent 文件里。

全局开关:并发上限与默认模型

子代理的全局行为在 config.toml 的 [agents] 表里调。最常改的是并发上限和默认模型:并发太高会互相抢文件、也会把额度烧快。

config.toml:并发与默认档位
[agents]
enabled = true
max_concurrent_threads_per_session = 6
default_subagent_model = "gpt-6-luna"
default_subagent_reasoning_effort = "high"
字段作用默认
agents.enabled总开关,设 false 就退回单代理true
agents.max_concurrent_threads_per_session单次会话可并发的子代理 thread 上限(不含主线程)不设则 Codex 自行选择
agents.default_subagent_model没单独指定的子代理用哪个模型继承父代理
agents.default_subagent_reasoning_effort没单独指定的推理档位继承父代理
agents.interrupt_message中断消息是否进入子代理上下文true
  • 解析顺序:spawn 时显式指定的值 → [agents] 里的默认值 → 父代理的 model 与 effort。
  • 如果 spawn 或默认值只指定了模型、没给 effort,就用这个模型自己的默认 effort,不是父代理的。
  • 旧配置里可能见到 max_threads,那是 max_concurrent_threads_per_session 的旧别名。

权限继承、审批与四个常见坑

子代理继承父会话的 sandbox 与 approval 设置,包括你通过 /permissions 或 --yolo 做的改动。这既是保护也是坑:父会话放得开,子代理也一样放得开;反过来,父会话卡得死,子代理会一路卡在审批上。

  1. 并发写冲突:两个子代理改同一个文件时,后写的会覆盖前写的。写多的任务要么串行,要么给每个子代理划清目录。
  2. 成本失控:每个子代理都是独立调用,并行四个可能等于四倍多的 token。先在小任务上量一次,再放开。
  3. 等太久:把所有结果都等到齐,最慢的那个会拖住全部。可以让快的先返回、慢的单独收。
  4. 看不见在跑什么:CLI 里用 /subagents 查看和切换 thread,App 看活动面板,IDE 看 background-agent 面板,别靠猜。

顺手还能做的事:直接让 Codex 去 steer 或停掉某个子代理,不用自己切过去操作。写任务时把「什么情况下停下来问我」也写进去,比事后发现它跑偏要省。

从单线程走到三代理的路径

别一上来就配五个代理。按下面顺序走,每一步都能验证收益是不是真的存在。

  1. 01

    第一步:先量基线

    同一类任务用单代理跑一遍,记下耗时、你要介入几次、主线程上下文被吃掉多少。这是后面判断「并行值不值」的参照。

  2. 02

    第二步:只并行读任务

    从代码库探索、测试 triage、文档总结这类只读任务开始,冲突风险最低,收益也最容易看见。

  3. 03

    第三步:固化成自定义 agent

    某类子任务重复出现三次以上,就把它写成 .codex/agents/ 里的 TOML,把提示词固定下来。

  4. 04

    第四步:再碰写任务

    写任务并行前先划清目录边界,并把并发上限压低一档,宁可慢一点也别处理合并冲突。

验收项合格线
主线程上下文一轮结束后还有余量继续问细节,不用重开会话
回传内容子代理只回摘要,不把日志和原始输出倒进主线程
权限没有出现「因为等待审批而卡住」的回合
成本并行带来的额外消耗,能说出换回了什么

子代理和分支、worktree 常常一起用:并行改代码时给每个子代理一个独立工作目录,冲突就从「文件级」降到「合并级」。这部分见分支那篇。

常见问题

子代理要单独付费吗?

不单独计费,但它会真实消耗额度:每个子代理都自己做模型调用,并行越多消耗越大。Codex 与 ChatGPT Work 共用同一份额度,具体规则与额度以官方页面为准。

为什么我说了并行,它还是只开了一个?

多数智能档位需要你明确要求并行,只有最高档会主动委派。把分工说得更具体一些,比如「三个子代理,一个看安全、一个看测试、一个看可维护性」,比只说「并行审查」有效。

子代理能改代码吗?

能,只要它的 agent 配置和父会话的权限允许。但写任务并行容易冲突,建议先只让探索型子代理并行,改代码的部分留在主线程或串行执行。

CLI 里怎么知道子代理在干什么?

用 /subagents 查看和切换各个 agent thread;App 有活动面板,IDE 有 background-agent 面板。也可以直接让 Codex 汇报进度或停掉某个子代理。

官方文档与参考

本文依据上述官方文档整理;价格、额度与功能会随官方更新变化,第三方中转站的行为以其自身说明为准。