第 01 模块 · 2 节

复杂任务的拆解与编排

《Claude Code 进阶实战》01 子 Agent 协作 · 本节时长 36 分钟

拆解,是子 Agent 的灵魂

上一节讲了子 Agent 是什么。这一节解决更关键的问题:怎么把一个复杂任务拆成合适的子任务。拆得好,一切顺利;拆得烂,比不拆还糟。

对 codex-review 来说尤其如此:评审任务的拆解,决定了评审的质量。 拆得清楚,每个评审子 Agent 都有明确的「审查范围」和「验收标准」;拆得含糊,三个子 Agent 会互相踩脚、漏审、重复审。

贯穿项目codex-review 的核心是把一次评审拆成可独立完成的子任务。本节学到的拆解和编排方法,正是我们给评审任务定「谁来审、审什么、怎么算审完」的依据。拆解能力直接影响 codex-review 评审报告的质量。

拆解的两个判断标准

拆出去之前,先问两个问题:

  1. 边界清晰吗?这个子任务有明确的目标和范围吗?
  2. 能独立验证吗?做完后,能清楚判断它做对没有吗?

两个都「是」,才值得拆。都「否」,别拆,直接让主会话做。

对评审场景,这两个标准要格外较真:

  • 边界清晰:不只说「审逻辑」,要说清「审哪些文件、重点查什么(业务正确性 / 边界情况 / 异常处理)」。范围越具体,越不容易和别的子 Agent 抢。
  • 可独立验证:不是「看一遍」,而是「能输出一份可勾选的结论清单」。比如「这个文件第 42 行的空值判断有遗漏」——这就叫可验证。笼统的「整体还行」不可验证。

一个正确的拆解示例

目标是「给项目加登录功能」。错误的拆法:

❌ 子任务A:写登录、子任务B:写注册、子任务C:写权限……

太碎、互相耦合,调度起来一团糟。

正确的拆法(按「数据库 / 后端 / 前端」横向分工,各自独立可验证):

主会话:加登录功能
  ├─ Agent A:设计并建好用户表(数据库)
  │     可验证:建表脚本能跑,表结构符合设计
  ├─ Agent B:实现登录/注册后端接口(API)
  │     可验证:接口按接口文档返回正确结果
  └─ Agent C:写前端登录页并接上接口(前端)
        可验证:页面能调用接口、提示成功/失败

每个子任务都有「可验证」的产出,互相之间只有接口约定,没有纠缠。

把同一套思路套到 codex-review 的评审拆解上,正确的拆法不是「按文件」而是「按关注点」:

主会话:评审这次 30 个文件的改动
  ├─ Agent A:逻辑评审
  │     范围:src/ 下业务逻辑改动
  │     重点:分支逻辑、边界情况、异常处理、数据一致性
  │     可验证:输出「位置 + 问题 + 建议」,按三档归类
  ├─ Agent B:安全评审
  │     范围:所有涉及输入、权限、敏感信息的文件
  │     重点:SQL 注入、越权、硬编码密钥、日志泄密
  │     可验证:对每个疑似风险,给出触发路径和修复建议
  └─ Agent C:风格与可维护性评审
        范围:全部改动文件
        重点:命名、格式、重复代码、注释
        可验证:输出规范一致性问题清单

注意这里的关键:逻辑 / 安全 / 风格 是按「关注点」拆,不是按「文件」拆。 因为一个文件往往同时有逻辑、安全、风格三类问题,按文件拆会让每个子 Agent 都得通读全文,等于没拆。按关注点拆,每个子 Agent 带着专业视角扫全部改动,各审各的维度,才互不干扰。


拆解的维度

常见的有用拆分维度:

维度 例子
按模块 前端 / 后端 / 数据库
按阶段 分析 → 实现 → 测试
按对象 这个服务 / 那个服务
按横切 安全审查 / 性能检查(并行的旁路任务)

同一任务可以按不同维度拆,选「子任务之间最独立」的那个。

对 codex-review 这类评审任务,最有用的两个维度是:

  • 按关注点(横切):逻辑 / 安全 / 风格。适合「跨文件、每个文件都可能有多种问题」的评审,是 codex-review 的主拆法。
  • 按模块:审 A 模块 / 审 B 模块。适合「模块之间边界清晰、几乎没有交叉引用」的仓库。

实际项目里常常组合用:先按模块分,每个模块内部再按关注点分。拆出来的子 Agent 数不要贪多,一般 3~5 个就够,再多调度成本就上来了。


给子任务写清「交付要求」

拆出来后,每个子任务要附上明确的交付要求,否则子 Agent 不知道做到什么算完:

Agent B:实现登录接口
要求:POST /api/login,输入 {email,password},
成功返回 {token, user},失败返回 401;
遵循项目里已有的错误处理规范;完成后跑一遍接口测试。

范围 + 输入输出 + 规范 + 验收,缺一不可。

对评审子 Agent,交付要求要明确「输出什么格式、覆盖哪些范围、达到什么算合格」:

Agent A:逻辑评审
范围:src/ 下本次改动涉及的业务逻辑
要求:对每个改动点,输出「位置 + 问题 + 建议」;
按「必须改 / 建议改 / 可不改」三档归类;
必须覆盖:分支逻辑、边界情况、异常处理、数据一致性;
不必覆盖:命名格式(那是风格评审的活)。

注意最后一句「不必覆盖」很关键——它主动给子 Agent 划清了边界,避免它越界去管别的小 Agent 的事。


编排的顺序

子任务之间往往有依赖。常见的编排方式:

  • 并行:互不依赖的,同时进行(最快)
  • 串行:有依赖的,等前一个完成(A 建好表,B 才能写接口)
  • 混合:先并行的部分 + 最后汇总

你在指令里把「哪个先、哪个后、最后怎么汇总」说清楚,主会话就按这个编排。

对 codex-review,评审的三个关注点(逻辑 / 安全 / 风格)通常互相独立、可以完全并行,最后汇总成一份报告即可。这是最省事的编排。但如果它们之间有关系(比如「安全子 Agent 发现的问题,会改变逻辑子 Agent 的结论」),就要考虑先并行的部分 + 一次汇总对账。

编排心法默认让互相独立的子任务并行;只有存在明确依赖时(A 的输出是 B 的输入),才改成串行。codex-review 里逻辑 / 安全 / 风格三路默认并行,最后汇总报告即可。

落地练习

练习① 三步走:第 1 步,选一个至少 20 个文件的真实项目,把「评审一次完整改动」作为目标;第 2 步,按「关注点」把它拆成 3 个评审子任务(逻辑 / 安全 / 风格),每个都写清「范围 + 重点 + 可验证产出 + 不必覆盖」;第 3 步,让 Claude 按你的拆法执行,并把结果汇总。

② 怎么判断做对了:三个子 Agent 各有明确范围、没有互相抢同一类问题;每个都能输出「位置 + 问题 + 建议」的可勾选清单;汇总报告里没有「这个子 Agent 也在说那个子 Agent 该说的」的重复。

③ 卡住了怎么办:如果两个子 Agent 结论重复,说明「范围」写得不清楚,回去把「不必覆盖」写具体;如果某个子 Agent 审得太泛,就把它的「重点」从一项拆成几项更细的检查点。

常见坑:按「文件」拆评审,等于没拆

评审任务最大的拆解误区,就是按文件拆:「子 Agent A 审 a.js、B 审 b.js、C 审 c.js」。听起来分工明确,其实每个子 Agent 都得把文件从头读到尾、在脑子里同时处理逻辑 + 安全 + 风格三类问题——这跟让一个 Claude 审全部没本质区别,只是把工作切开堆给了三个 Claude。

为什么按关注点拆更对?因为同一段代码可能同时有逻辑、安全、风格三种问题,按文件拆会让这三个问题被塞进同一个子 Agent 的上下文里,它照样会「顾此失彼」;按关注点拆,每个子 Agent 只专注一种判断维度,上下文干净、判断更专业。

提醒下一次拆评审任务,先问自己:我是按「文件」拆,还是按「关注点」拆?只有按关注点拆,子 Agent 的「专家视角」才成立。这也是 codex-review 工作台的设计原则。

小结

  1. 拆解标准:边界清晰 + 可独立验证
  2. 按模块/阶段/对象等维度拆,选最独立的
  3. 评审任务建议按「关注点」拆(逻辑 / 安全 / 风格),并写清「不必覆盖」
  4. 每个子任务写清交付要求(范围+输入输出+规范+验收)
  5. 按依赖关系定编排顺序(并行/串行/混合)

下一节,动手练多 Agent 并行协作——把拆好的子任务真正同时跑起来。