Planner 如何拆分 Subagent

6 阅读10分钟

Subagent 的意义是隔离性

Subagent 的价值不是“多找几个 agent 干活”,而是隔离。

  • 并行、分工、提速都是隔离带来的二级收益;如果任务不可隔离,即使并行启动多个 agent,也容易制造冲突、重复和整合成本。
  • Planner 拆 subagent 的核心问题不是“能不能拆”,而是“拆出去之后,是否形成了更干净的上下文、更清楚的局部目标、更安全的权限边界、更合适的模型选择和更可验证的输出”。
  • 因此,subagent 不是组织管理上的“岗位分工”类比,而是 agent harness 里的边界设计。
  • 在真实 AI 应用里,subagent 还承担模型路由的作用:把探索、长思考、审美判断、代码修复、QA 验收等不同需求,交给最适合的模型和运行策略。

Subagent有五种隔离

无论隔离的是上下文、目标函数、权限、责任,还是为局部任务选择模型,底层逻辑都是一样的:把一个可能污染主循环的局部过程,封装成可输入、可执行、可验证、可回收的单元。

一个 subagent 隔离单元通常包括:

  • 独立 context:它可以读取大量局部材料,但只把压缩结论带回主 agent。
  • 独立 instruction:它有自己的局部目标和判断标准,不必共享主 agent 的全部推理轨道。
  • 独立 tool boundary:它只能使用完成局部任务所需的工具和权限。
  • 独立 model / runtime profile:它可以绑定更适合当前局部任务的模型、推理深度、并发策略和成本预算。
  • 独立 output contract:它必须交回结构化 artifact,例如文件列表、风险清单、测试报告、失败复现步骤。

各方向的不同点在于“隔离对象”不同:

隔离方向隔离的对象主要解决的问题常见 subagent
上下文隔离信息量和噪音主上下文被搜索、日志、调研结果撑爆explorer、scout、log analyst
目标函数隔离局部优化目标实现者自评过度乐观,或不同立场互相干扰evaluator、reviewer、security reviewer
权限隔离工具和操作边界高风险动作、敏感数据、写权限不应被所有 agent 共享read-only checker、DB reader、browser evaluator
责任隔离决策归属subagent 不应替 planner 做最终产品取舍implementer、test writer、risk analyst
模型匹配模型能力、速度、成本和风格不同局部任务需要不同模型特长fast explorer、deep reasoner、aesthetic reviewer

一、上下文隔离:把高噪音过程放进独立 Context

上下文隔离解决的是“信息太多、太吵、太局部”的问题。主 agent 真正需要的是结论和证据,不需要吃下所有原始材料。

适合上下文隔离的信号:

  • 需要搜索很多文件,例如找出所有调用点、权限校验点、数据流入口。
  • 需要读长日志、CI 输出、trace、benchmark 结果。
  • 需要比较多种方案、调研外部文档或 GitHub issue。
  • 需要跨模块理解,例如前端、API、数据库、权限、异步任务同时相关。
  • 需要跑测试并解释失败,尤其测试输出可能反复很长。
  • 需要生成中间地图,例如调用链、依赖图、风险面、API surface。
  • 用户请求中出现“所有”“全部”“全局”“影响范围”“梳理”“排查”“调研”“审计”等词。

Context Probe

  • Context Probe 是正式执行前的低成本探测动作,用来判断当前任务需要读取多少上下文、涉及哪些模块、信息噪音有多大,以及是否值得拆 subagent。
  • 它不是让 agent 开始解决问题,而是先回答“这个问题有多大、从哪里入手、需要哪些上下文”。
  • 对刚入门的读者,可以把它理解为工程里的“先探路”:不急着修路或开车,而是先看地图范围、路口数量、可能堵点和风险区域。
  • 常见探测方式包括:rg 看命中数量、find / ls 看目录规模、查看测试日志大小、看相关模块数量、检查是否跨服务 / 跨语言 / 跨层。
  • 如果命中 3 个文件,主 agent 自己读通常更快。
  • 如果命中几十个文件,适合先派 explorer / scout subagent 做归纳。
  • Scout subagent 的任务不是解决问题,而是估算问题:找涉及模块、文件数量、风险点和建议拆分方式,最后只输出短摘要。

适合 subagent 的上下文形态:

  • 原始上下文很大,但最终可以压缩成小摘要。
  • 例如:读 2000 行日志,输出 5 个失败原因;搜索 50 个文件,输出 8 个关键调用点;读多篇官方文档,输出一个迁移 checklist。
  • 如果原始上下文本身就是主 agent 后续每一步都要依赖的核心决策依据,则不适合外包;主 agent 应该自己读。

二、目标函数隔离:让不同立场分开推理

目标函数隔离解决的是“不同局部目标混在一起后互相污染”的问题。

  • Generator 倾向于完成实现。
  • Evaluator 倾向于寻找失败证据。
  • Security reviewer 倾向于默认存在风险。
  • Performance reviewer 倾向于默认存在瓶颈。
  • Planner 倾向于做全局取舍和最终收口。

这些目标都服务于同一个用户目标,但局部优化方向不同。如果让同一个 agent 既实现又验收,它很容易因为理解了自己的实现路径而变得宽容。

判断目标是否适合隔离,可以看五个维度:

  • 成功标准是否不同:planner 要交付可用功能,explorer 只需列出调用点,reviewer 只需找风险。
  • 立场是否不同:generator 要完成实现,evaluator 要找失败证据,security reviewer 要默认存在风险,performance reviewer 要默认存在瓶颈。
  • 工具权限是否不同:只读 explorer、可写 implementer、只读 SQL checker、浏览器 evaluator 的权限边界不同,通常也意味着目标不同。
  • 输出物是否不同:文件列表、风险清单、API spec、测试报告、方案对比、失败复现步骤、review finding 都可以作为独立 artifact。
  • 是否需要全局取舍:如果子任务必须理解所有产品权衡、用户偏好、技术债和排期才能做决定,就不适合独立;如果只需完成局部问题并带回证据,就适合拆。

三、权限隔离:不同任务只给必要工具

权限隔离解决的是“所有 agent 共享同一组工具会放大风险”的问题。

典型做法:

  • Explorer 只读代码和文档,不改文件。
  • Implementer 只允许修改指定模块,不扩展写集。
  • DB checker 只能执行只读查询,不允许写数据库。
  • Browser evaluator 可以操作页面和截图,但不改源码。
  • Security reviewer 可以读配置和权限规则,但不能执行高风险命令。

权限隔离的价值是把 prompt 里的“请不要做”变成系统层的“不能做”。这比依赖模型自觉更稳。

四、责任隔离:Subagent 只完成局部 Contract

责任隔离解决的是“谁对最终取舍负责”的问题。

  • Planner 的目标是全局的:理解用户意图、定义成功标准、控制范围、安排顺序、分配任务、整合结果、判断取舍、对最终交付负责。
  • Subagent 的目标应是局部的:找信息、做一个模块、审查风险、验证行为、写测试、比较方案、找 bug、总结文档。
  • Subagent 不负责最终产品取舍,只负责完成一个局部 contract,并把证据交回 planner。

这能防止 subagent 擅自扩大范围、替用户做产品判断,或者在缺少全局上下文时做不可逆决策。

Subagent Contract

Planner 拆 subagent 时,本质是在设计局部 contract。一个清晰 contract 至少包括:

  • 你是谁:只读 explorer、实现者、evaluator、reviewer。
  • 你的目标:找调用点、改某模块、验证用户路径、找风险。
  • 你的输入:相关 spec、路径、限制。
  • 你的权限:只读、可写某些文件、可跑测试。
  • 你的模型 / 运行策略:快速探索模型、长思考模型、审美模型、低成本并发模型,或指定推理深度和预算。
  • 你的非目标:不要改无关文件、不要做产品取舍、不要扩展范围。
  • 你的输出:文件列表、结论、证据、下一步建议。

五、模型匹配:为局部任务挑选最合适的模型

模型匹配解决的是“所有任务都用同一个模型,会在速度、成本、质量和能力上失衡”的问题。

拆出 subagent 后,planner 可以为不同局部需求选择不同模型和运行策略:

  • 探索类需求:优先选择快速、擅长搜索和并发扫描的模型或工具型 agent,例如用户提到的 Context 1swe grep 这类探索 / 检索取向能力。
  • 长思考需求:优先选择推理更强、能处理复杂取舍和多步规划的模型。
  • 审美 / 体验判断:优先选择在视觉、文案、产品直觉或创意表达上更强的模型。
  • 代码修复需求:优先选择熟悉代码修改、测试反馈和 repo 工具链的 coding model。
  • 验收 / QA 需求:优先选择稳定、保守、能严格按 checklist 找失败证据的模型或配置。

这里的关键不是“哪个模型整体最强”,而是“哪个模型最适合这个局部 contract”。探索型 subagent 要的是速度、覆盖率和并发能力;审美型 subagent 要的是品味和表达判断;复杂规划型 subagent 要的是长思考和全局取舍能力。

这也是 subagent 相比单一主 agent 的额外价值:它让模型选择从“全局固定”变成“按任务局部路由”。

工程实践

Planner 拆 subagent 的实现来自四层共同作用。

  • 模型预训练提供通用语义先验:模型通常知道“审计”“全局”“排查”“调研”“所有调用点”意味着范围可能较大。
  • Prompt / policy / skill 提供显式启发式规则:例如命中超过 20 个文件先派 scout、日志超过 500 行先做日志归纳、实现者不能自评高风险任务。
  • 运行时 probe 提供当前任务的真实规模:搜索命中数量、目录规模、日志行数、涉及模块数、是否跨服务 / 跨语言 / 跨层。
  • 数据库 / memory / traces 提供历史经验:过去哪类任务经常上下文爆炸、哪个 repo 的哪些目录复杂、哪类任务派 scout 后成功率更高。
  • 最稳的 planner 不应只靠其中一层,而应按顺序综合:先用模型理解任务语义,再用规则触发 probe,再用 probe 拿到实时规模,最后参考历史 traces 决定是否拆 subagent。
分层内容例子
模型预训练通用语言和任务先验“审计”“全局”“排查”通常意味着范围大
Prompt / policy明确启发式规则命中超过 20 个文件先派 scout
运行时 probe当前任务实时数据rg 命中 63 个文件,CI 日志 1200 行
数据库 / traces历史经验和统计过去权限任务平均涉及 40 个文件,安全 review 必须独立

总结

  • 只要 subagent contract 写不清,就先不要拆。
  • 能写清 contract,并且拆分能节省上下文、带来独立视角、并行收益、权限隔离或更好的模型匹配,才值得拆。
  • Planner 拆 subagent 的关键不是预测子 agent 是否聪明,而是判断局部任务是否可隔离、可验收、可交接。