Subagent 是 Claude Code 中最强大却最被低估的特性。 本文从原理到实战,带你掌握这个让 AI 实现任务分治、并行加速、上下文隔离的核心机制。

Subagent 的本质是把 “一个 AI 做所有事” 变成 “专业团队分工协作”。 合理设计 Subagent 体系,是构建生产级 AI Agent 系统的关键。

什么是 Subagent?一个形象的比喻

想象你是一位项目总监,手头有一个复杂任务:对整个工程做全面 Code Review。 如果你亲自一行行读代码,同时要分析安全漏洞、检查测试覆盖率、审查性能问题…… 你的脑子很快就会混乱,而且做完一项再做另一项,效率极低。

聪明的做法是:召集三位专家分头行动——安全专家、测试专家、性能专家各自独立工作, 最后向你汇报结论。这就是 Subagent 的核心思想。

screenshot-20260318-234921

📖 官方定义

Subagents(子智能体)是主 Agent 可以生成的独立 Agent 实例,用于处理专注的子任务。 每个 Subagent 运行在自己独立的 Context Window 中,拥有自定义的 System Prompt、特定的工具访问权限和独立的执行权限。

screenshot-20260318-235015

为什么需要 Subagent?核心问题

💡 一句话总结

Subagent 解决的核心问题是:上下文管理(避免污染主对话)、 并行加速(多任务同步执行)、专业分工(专属指令提升质量)。

在理解 Subagent 的价值之前,我们先看看没有 Subagent 时会遇到什么问题:

问题一:Context Window 污染

Claude 的 Context Window 是有限的。当你让主 Agent 去探索一个大型代码库时, 它读取的数十个文件、搜索结果、中间过程会塞满上下文,导致后续任务质量下降, 甚至触发 Context Limit 强制压缩。

问题二:串行执行效率低

复杂任务往往包含多个独立的子任务。如果全部串行执行,时间是各任务之和; 而并行执行可以让时间接近最慢的那个任务,效率提升数倍

问题三:角色混乱、专注度不足

让一个 Agent 同时扮演安全专家、性能优化师、文档编写者…… 它的注意力会被分散,而专门设计的 Subagent 可以通过精心编写的 System Prompt 达到更高质量的专业化输出

如何定义一个 Subagent(两种方式)

Claude Code 提供了两种定义 Subagent 的方式,各有适用场景:

方式 适用场景 优先级 持久化
📁 文件系统方式(Markdown 文件) 团队共享、跨项目复用、Claude Code 交互式使用 低(可被覆盖)  持久
💻 编程方式(agents 参数) SDK 开发、CI/CD、动态生成、自动化流水线 高(优先级最高)  仅当次运行

方式一:文件系统方式(推荐新手)

在 .claude/agents/ 目录下创建 Markdown 文件,文件格式为带 YAML frontmatter 的 Markdown。

.claude/agents/security-reviewer.md

⚠️ 关键字段说明

description 是最重要的字段——Claude 依据此字段决定何时自动调用这个 Subagent,写得越清晰,调用越准确。 tools 限制可用工具(省略则继承父 Agent 所有工具)。 model 可指定不同模型(如用 Haiku 降低成本)。

方式二:编程方式(SDK 开发)

在代码中通过 agents 参数直接定义,适合构建自动化 Pipeline:

review-pipeline.ts

 

存储位置与优先级

存储位置 作用范围 优先级
.claude/agents/ 当前项目(可提交到 Git 团队共享) ★★★ 最高
~/.claude/agents/ 当前用户所有项目 ★★ 中
SDK agents 参数 当次运行(可动态生成) ★★★ 最高(覆盖同名文件)

典型应用场景全景

Subagent 适合哪些场景?核心判断标准只有两个:

  • 任务是否上下文密集(会产生大量中间数据)?
  • 或者任务是否可以并行分解(子任务相互独立)?

场景一:代码审查流水线

同时启动安全、性能、可维护性三个专家 Subagent,并行分析后汇总报告。

场景二:文档调研与总结

让专属 Subagent 去爬取大量文档页面,在子上下文中消化信息,只返回精炼摘要给主对话,避免文档噪音污染你的 Context。

场景三:多语言本地化

为每种目标语言创建一个翻译 Subagent,10 种语言同步翻译,时间从串行的 10x 缩短到接近 1x。

场景四:大型重构任务

主 Agent 制定重构计划,派发不同模块给不同 Subagent 独立执行。各模块互不干扰,完成后合并。

场景五:CI/CD 自动化

在 PR 流程中自动触发代码审查 Subagent、测试运行 Subagent、文档更新 Subagent,形成完整的自动化质检流水线。

场景 核心收益 推荐工具权限
代码审查 并行 + 专业化 Read, Grep, Glob(只读)
文档调研 上下文隔离 Read, WebFetch, Grep
多语言翻译 并行加速 Read, Write
大型重构 模块隔离 Read, Write, Edit, Bash
CI/CD 审查 自动化 + 专业化 Read, Bash, Glob

完整 Demo:代码库全面审查系统

下面是一个完整的、可直接运行的 Demo,展示如何用三个并行 Subagent 对代码库进行安全审查、测试覆盖分析和性能检查。

项目结构

Step 1:定义三个 Subagent 文件

.claude/agents/security-reviewer.md

.claude/agents/test-analyzer.md

Step 2:编写主入口(SDK 方式)

review.ts

Step 3:运行 Demo

 

预期输出

 

💡 交互式模式快捷调用

在 Claude Code 交互式会话中,可以用 @subagent-name 任务描述 手动调用特定 Subagent, 也可以让 Claude 根据任务自动判断并调用合适的 Subagent(这正是 description 字段的作用)。

执行原理深度解析

理解 Subagent 的执行机制,能帮你写出更高效的配置。

调用机制:Agent Tool

Subagent 通过一个名为 Agent Tool(旧版叫 Task Tool)来触发。 当主 Agent 决定调用 Subagent 时,它会生成一个 tool_use 消息块, 名称为 Agent,参数包含目标 Subagent 名称和任务描述。

Context 隔离原理

每个 Subagent 的工作过程如下:

screenshot-20260319-000159

并行执行原理

主 Agent 可以在一次响应中发出多个 Agent Tool 调用,Claude Code Runtime 会并发执行这些 Subagent。 这正是为什么三个审查任务可以同时进行,总耗时接近单个最慢任务的时间,而非三者之和。

⚠️ 兼容性提示

Tool 名称在 v2.1.63 从 "Task" 改为 "Agent"。 system:init 工具列表和 permission_denials[].tool_name 中仍使用 "Task"。 为了向前兼容,检测时应同时检查两个名称:block.name === 'Agent' || block.name === 'Task'

Subagent 的限制

限制项 说明
不能递归调用 Subagent 的工具列表中不能包含 Task/Agent,即 Subagent 不能再生成 Subagent
工具继承 不指定 tools 字段则继承父 Agent 所有工具;建议明确限制权限
上下文单向传递 主 Agent → Subagent 单向,Subagent 间无法直接通信
计费独立 每个 Subagent 的 Token 消耗独立计算,记得设置 maxBudgetUsd

最佳实践与常见陷阱

✅ 最佳实践

Best Practice 1 — Description 要像搜索引擎关键词

Description 是 Claude 决定何时调用你的 Subagent 的唯一依据。 写清楚触发条件(何时调用)比描述功能更重要。 例如:“当需要检查 SQL 注入、XSS、认证漏洞时调用” 比 “安全代码检查工具” 更有效。

Best Practice 2 — 只读任务明确限制工具权限

分析类 Subagent 只需要 Read, Grep, Glob, 绝不要给它 Write, Bash。最小权限原则既防止误操作,也让 Claude 更聚焦。

Best Practice 3 — 让 Subagent 输出结构化 JSON

在 System Prompt 中要求 Subagent 返回 JSON 格式,便于主 Agent 解析和整合多个 Subagent 的结果。 同时要求“不要包含中间过程,只返回最终结论”

Best Practice 4 — 用廉价模型处理简单子任务

model: 'haiku' 适合格式转换、简单搜索等任务,成本仅为 Sonnet 的约 1/5。 把 Sonnet 留给需要深度推理的核心任务,分配给安全审查等高难度 Subagent。

❌ 常见陷阱

Trap 1 — 忘记把 Task 加入 allowedTools

最常见的错误! 如果 allowedTools 中没有 "Task"(SDK 方式), 主 Agent 根本无法调用任何 Subagent,且不会报错,只是静默地不生成子任务。

Trap 2 — 在 Subagent tools 中包含 Task

Subagent 不支持递归调用。如果你在 Subagent 的 tools 中包含了 "Task", 它要么被忽略,要么引发意外行为。

Trap 3 — Subagent 返回过多中间信息

如果不在 System Prompt 中明确要求”只返回最终结论”,Subagent 可能会把读取的大量文件内容 作为结果返回,反而污染了主 Agent 的上下文——这和不用 Subagent 没有区别。

Trap 4 — 没有设置预算上限

多个并行 Subagent 同时消耗 Token,在复杂任务中费用可能快速累积。 在 SDK 中始终设置 maxBudgetUsd 参数作为保险。

参考

📚 Claude Code Subagents 官方文档
code.claude.com/docs/en/sub-agents  — 完整 API 参考和配置选项
🛠️Claude Agent SDK 指南
🌟100+ Subagent 示例库 http://github.com/VoltAgent/awesome-claude-code-subagents — 社区贡献的最佳实践

分类&标签