05 · 子 Agent 的成本账

05 · 子 Agent 的成本账

隔离不是甩活。五要素 brief 是生命线。

开场比喻

对前端开发者,子 Agent 最贴切的类比是 Web Worker

Web Worker子 Agent
独立 thread,不共享主线程内存独立会话,看不到主对话历史
启动有开销(Worker 冷启动)启动有开销(context 冷加载)
只能 postMessage 通信只能通过最终 return 一条结果
适合 CPU-intensive 或隔离任务适合大搜索、独立分析、并行任务
滥用反而更慢滥用反而更贵更慢

Web Worker 的黄金法则同样适用:只在"真能回本"时才开。

Claude Code 的子 Agent 种类

你环境里常见几种:

Agent用途
Explore快速扫全仓库(搜关键词、找模式)
Plan独立出方案(和 04 的 Plan 阶段互补)
general-purpose通用任务、多步探索
claude-code-guide查 Claude Code 自身用法

每个 agent 都是独立冷启动的,不继承主对话的 context。

成本账:开一个子 Agent 的真实代价

每开一个子 Agent,你付五项成本:

成本项含义
Brief 成本要写自包含 prompt(它看不到主对话)
冷启动成本整个 context 从 0 加载
Token 成本它读的所有文件都计费
时间成本启动 + 执行 + 等结果
验证成本结果回来你还得 verify 一遍

相比之下,主对话自己干:上下文已有,直接用 Read / Grep / Bash,即时反馈,可中断。

什么时候值得开

开子 Agent 的三个条件(满足其一就考虑):

条件典型场景推荐 agent
任务独立且可并行同时评审 + 依赖审计 + 安全扫描多个 general-purpose
要扫大量文件 / 目录(context 会炸)"整个 monorepo 里所有 API 端点在哪"Explore
需要独立视角方案评审、二次验证Plan / reviewer

什么时候

情况替代方案
知道确切路径 / 符号直接 Read / grep
1-2 步就能搞定自己干
需要高频来回交互自己干(子 Agent 没"记忆")
只为"省 context" 但任务本身很小不划算
需要用户反复介入调整自己干

并行 vs 串行

规则:一条消息里发多个 Agent 工具调用 = 并行;要等前一个结果再起下一个 = 串行。

并行的好场景

完全独立的任务同时跑:

并行发出:
  - Agent(Explore): 找所有用了 useEffect 的组件
  - Agent(Explore): 找所有 API route handler
  - Agent(general-purpose): 检查依赖是否有 deprecated 的

三个 agent 同时干活,总耗时 ≈ 最慢的那个。

串行的好场景

后一步要前一步的结果:

串行:
  1. Agent(general-purpose): 调研这个库的 API 设计
  2. [读完结果] → Agent(Plan): 基于调研出方案
  3. [读完方案] → 自己实现

常见误用:能并行的硬串行(慢 2-3 倍),或依赖关系的强行并行(后一个拿不到前一个的结果,白跑)。

Brief 的艺术

子 Agent 冷启动,它看到的 prompt 就是它的全部世界。Brief 好不好,直接决定结果有没有用。

五要素公式

[背景] + [具体位置] + [明确任务] + [输出形式] + [长度限制]

对比

太笼统

帮我看看 checkout 流程有什么问题

子 Agent:什么流程?什么问题?看哪些文件?多长的回答?…… 乱猜一通,交付模糊。

完备 Brief

检查 src/app/checkout 下的提交流程是否有重复提交保护。

背景:QA 报告用户双击 Pay 按钮会重复扣款,我怀疑 handleSubmit 没 debounce。

具体位置:src/app/checkout/page.tsx 的 CheckoutForm 组件,
        和 src/actions/payment.action.ts 的 submitPayment。

任务:
  1. 确认 handleSubmit 是否做了 debounce 或 loading 锁
  2. 确认 server action 是否有幂等检查

输出:
  - 问题确认 ✓ / ✗
  - 根本原因 1-2 句
  - 建议修复方向 3 条以内
  - 不要改代码

长度:300 字以内

子 Agent 有路径、有关键函数、有边界("不要改代码"),不会跑偏。

常见 Brief 错误

错误后果
"按刚才说的改一下"它不知道"刚才"
"你觉得呢?"没约束,交付天马行空
没给文件路径它要自己 grep 半天
没设输出长度给你写 3000 字报告
没说"改 / 不改代码"可能自作主张提交

信任但验证

子 Agent 回来的总结是它认为自己做了什么,不等于实际做了什么

特别要警惕:

  • 子 Agent 说"已修改 5 处" → 你自己 git diff
  • 子 Agent 说"全部测试通过" → 你自己跑一遍 pnpm test
  • 子 Agent 说"没有相关代码" → 它可能搜错关键词,自己 grep 一次确认

反模式六连

反模式症状修正
事事开子 Agent每个小任务都 spawn 一个小任务自己干
Brief 太短"帮我看看 X" → 回来啥也没说清五要素公式补齐
引用"刚才""按上面说的办" → 子 Agent 懵prompt 自包含
盲信总结"它说都改好了" → 合并后翻车自己看 diff
交互探索用子 Agent反复 spawn 多次 agent 问同一仓库第一次就问清楚
能并行的串行发一个接一个 spawn 独立任务一条消息多个 Agent

一句话总结

子 Agent 是"隔离 + 扩展",不是"甩活"。

开销在那里,Brief 不写到位就是浪费;真正用得好,一条消息里并行三个 agent,能把你从 15 分钟干到 5 分钟。

判断速查

任务来了

能在主对话 1-2 步搞定?      ── 是 → 自己干
  ↓ 否
要大范围搜索、独立视角、或 2+ 独立任务?
  ↓ 是

2+ 独立任务?                 ── 是 → 一条消息并行多 agent
  ↓ 否

能写完 5 要素 brief?         ── 否 → 先想清楚再开
  ↓ 是
开!

结果回来,看 diff / 跑验证(不看总结)

← 04 · Plan → Execute → Review 的协作节奏 | 目录 | 06 · Hook 与自动化 →