Jason Pan

Codex Subagent 使用实践

潘忠显 / 2026-07-15


这是系列文章的第5篇,本文借助 Codex subagent,介绍一下子智能体的常见概念和用法。

重点会放在主 Agent 如何委派一个或多个子智能体做事,再把结果汇总回来。而不会涉及另一类多 Agent 协作模式 —— Agent Team 相关的概念。两者的区别是:前者是主 Agent 掌控全局,进行信息分发和汇总,是星型拓扑;后者 SubAgent 之间可以通信,更像是网状拓扑。

subagents-vs-agent-teams

在文章的最后,我也会比较一下 OpenAI 和 Anthropic 在使用 SubAgent 上的设计哲学和使用差异。

一、为什么 subagent 有用

Codex 当前版本默认支持子智能体工作流。ChatGPT 桌面 App、Codex CLI 和 IDE 扩展都会展示子智能体的活动。

即使上下文窗口很大,模型仍然有极限。如果把探索笔记、测试日志、堆栈追踪和命令输出等带噪中间结果全部放进正在定义需求、约束与决策的主对话,会话会逐渐变得不可靠。

这通常称为:

子智能体工作流把带噪工作移出主对话线程:

当工作可以独立并行时,这种方式还能缩短时间,并把大任务拆成边界清晰的小块。例如,Codex 可以把数百万 token 的文档分析拆成多个较小问题,再把提炼结果交还主对话线程。

由于每个子智能体都会独立进行模型调用和工具调用,子智能体工作流会比同类单智能体任务消耗更多 token。

建议先把并行智能体用于探索、测试、分诊和总结等读操作较重的任务。并行写操作更容易产生代码冲突和协调开销,应谨慎使用。

二、如何使用多子Agent

你可以在 App 任务中直接要求 Codex 把互不依赖的工作委派给子智能体。当前本地 Codex 版本会在你明确提出要求,或适用的 AGENTS.md、skill 指令要求委派时启动子智能体。App 会展示每个子智能体对话线程,方便你检查其工作以及返回主任务的摘要。

这里有三个核心术语先要厘清:

如何触发

可以直接要求 Codex 使用子智能体或并行智能体。适用的项目指令或 skill 指令也可以要求委派。

手动触发时,应使用明确指令,例如 “spawn two agents(派生两个智能体)”、“delegate this work in parallel(并行处理这个任务)”等

Codex 负责所有编排工作,包括:

当多个智能体并行运行时,Codex 会等待所有要求的结果都返回后,再给出一份汇总答复。当前本地 Codex 版本会在直接请求,或适用的项目与 skill 指令要求时启动智能体。


说回来,好的提示词要说明如何拆分工作、是否等待全部智能体完成,以及最终需要返回什么摘要或产物。

请并行启动三个 subagent 审查当前分支:
1. 一个只看安全风险;
2. 一个只看测试缺口;
3. 一个只看可维护性。
等三个 subagent 都完成后,再由主线程汇总结果。

codex-subagent-review-prompt

结果也是会如我们预期的一样,汇总在一起:

codex-subagent-review-result

如何查看

subagent 不只是一个后台黑盒。它更像主任务下面的一条可追踪支线。

内建智能体

Codex 自带三种内建智能体:

上边我贴的例子中,就是用的 Codex 内建的 multi-agent/subagent 能力。

Codex 启动的是只读 review/explorer 类子智能体:它们在同一个仓库上下文里独立审查代码,然后把 findings 回传给主线程;最终由在主线程汇总、判断和执行修改。它们不是外部插件,也不是单独安装的第三方工具。

自定义智能体

如果你要定义自己的智能体,可以在下面两个目录之一中放置独立的 TOML 文件:

每个文件定义一个自定义智能体。Codex 会把它作为一个“额外配置层”应用到生成的会话中,所以自定义智能体能覆盖的键,基本与普通 config.toml 可覆盖项一致。

每个自定义智能体文件都必须定义:

nickname_candidatesmodelmodel_reasoning_effortsandbox_modemcp_serversskills.config 这样的字段都是可选的;如果省略,就继承父会话。

Codex 官方文档也给了一个 reviewer.toml 自定义 subagent 的例子:

name = "reviewer"
description = "PR reviewer focused on correctness, security, and missing tests."
model = "gpt-5.4"
model_reasoning_effort = "high"
sandbox_mode = "read-only"
developer_instructions = """
Review code like an owner.
Prioritize correctness, security, behavior regressions, and missing test coverage.
Lead with concrete findings, include reproduction steps when possible, and avoid style-only comments unless they hide a real bug.
"""

还有一些允许同时打开的智能体对话线程上限agents.max_threads 等参数可以配置在项目配置或者个人配置中:.codex/config.toml

[agents]
max_threads = 6
max_depth = 1

三、Subagent在Codex和Claude Code中的不同

在 Codex 和 Claude Code 中使用 Subagents,除了配置方式不同之外,还有一个明显差异:Codex 更偏显式编排,Claude Code 更偏自动匹配与显式调用结合

Codex 显式触发优先。通常需要你在提示词里明确说“spawn…”、“use one agent per…”、“并行启动三个 subagent”之类的指令,或者由 AGENTS.md、skill 指令要求委派。它更像一个主控台清晰的并行任务调度器:主线程负责拆任务、派发任务、等待结果和最终汇总;每个子智能体有自己的线程,可以点进去查看过程。

这种体验的好处是可控、可审计,特别适合安全审查、测试缺口分析、代码库探索、日志归因这类边界清晰的并行任务。代价是你需要更明确地告诉 Codex 怎么拆、怎么汇总。

Claude Code 则更偏自动匹配与显式调用结合。它可以根据任务和 subagent 的描述,自动选择内建或自定义 subagent;你也可以显式要求它使用某个 subagent。它更像一个主动的结对工程师:你交代目标后,它可能先安排探索和规划,把资料铺好,再回到主对话里给你结论。

需要注意的是,这里讨论的仍然是 subagent 工作流,不是完整的 Agent Team。无论 Codex 还是 Claude Code,subagent 的基本形态都是主 Agent 委派子 Agent,子 Agent 独立处理一段上下文,再把结果返回主对话。真正的多 Agent 网状通信、互相协商、共享任务板,是另一类更复杂的协作模式。

所以,这不是简单的谁更先进。产品往往会泄露一些公司气质:OpenAI 把“可控、可审计、可编排”放在更前面;Anthropic 把“自然、自动、少打扰”放在更优先的位置。

四、小结

Subagent 最容易被误解成“多叫几个 Agent 干活”。但真正有用的地方,其实是把主线程从脏活累活里摘出来。

很多任务不是模型不会做,而是中间过程太吵:日志太长、分支太多、尝试太碎。全塞进一个对话里,主线很快就会被淹没。让子 Agent 去跑这些支线,再把结论带回来,主 Agent 才能继续保持判断力。

当然,这也不是免费午餐。子 Agent 开多了,token 会涨,协调成本也会涨。尤其是大家一起改代码时,看起来是在并行,实际可能是在制造冲突。

我会把 Codex subagent 先看成一种“并行调查”工具:适合审查、定位、对比、梳理,不急着让它们一起下手改东西。真正需要多个 Agent 长时间协作、共享状态、互相讨论时,那已经是 Agent Team 的问题了,不是这篇文章要解决的范围。