详解Claude Code子代理功能,用AI打造私人专业团队

214 阅读9分钟

❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会跟你分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!也非常欢迎你通过公众号发消息加入我们!

❤️ 微信公众号|搜一搜:蚝油菜花


在AI编程工具的发展历程中,我们经常遇到这样的困扰:一个通用的AI大模型或编程助手虽然功能强大,但在处理特定领域的复杂任务时,往往显得"样样通,样样松"。就像一个全科医生虽然知识面广,但在处理心脏手术时,我们更希望有专业的心脏外科医生来操刀。

Claude Code 的子代理(Sub Agent)功能正是为了解决这一痛点而生,它允许我们创建专门的AI助手来处理特定类型的任务,实现了从"万金油"到"专家团队"的华丽转身。

🌟 如果你还不知道什么是 Claude Code,或者你还想知道怎么安装和快速上手,可以阅读前文:

什么是子代理(Sub Agent)?

在 Claude Code 中,子代理是可以委托任务的个性化AI智能体。想象一下,你是一家软件公司的项目经理,手下有不同专业背景的工程师:前端开发专家、后端架构师、数据库优化师、安全审计员等。当遇到不同类型的问题时,你会将任务分配给最合适的专家来处理,而不是让一个人包揽所有工作。

当Claude Code遇到与某个子代理专业知识匹配的任务时,它可以将该任务委托给专门的子代理,该子代理独立工作并返回结果。

子代理的核心特征

子代理的核心特征包括:

  • 专业化定位:每个子代理都有特定的目的和专业领域。通过为特定任务创建专门的子代理,我们可以获得更精准、更专业的解决方案。
  • 独立上下文:每个子代理都有自己独立的上下文窗口,避免了主对话被过多的细节信息污染。
  • 工具权限管理:可以为不同的子代理分配不同的工具权限,既保证了功能的完整性,又提高了安全性。
  • 可复用性:创建的子代理可以在多个项目中重复使用。

子代理的存储位置

子代理存储为带有YAML前言的Markdown文件,可以存放在两个位置:

类型位置范围优先级
项目子代理.claude/agents/在当前项目中可用最高
用户子代理~/.claude/agents/在所有项目中可用较低

当子代理名称冲突时,项目级子代理优先于用户级子代理。这种设计允许你为特定项目创建定制化的子代理,同时保持全局子代理的通用性。

子代理的文件格式

每个子代理文件都遵循统一的结构格式:

---
name: code-reviewer
description: 专业的代码审查专家,专注于代码质量、安全性和最佳实践
tools: search_codebase,view_files,update_file
---

# 代码审查专家

你是一位经验丰富的代码审查专家...

配置字段详解

字段必需描述
name子代理的名称由小写字母和连字符组成,是子代理的唯一标识符
description对子代理“角色和目的”的自然语言描述
tools配置子代理能够使用的特定工具,列表用逗号分隔。默认从主线程继承所有工具

配置子代理的工具访问权限

有两种配置子代理工具访问权限的方式:

  1. 继承模式:省略tools字段,子代理将从主线程继承所有工具(包括MCP工具)
  2. 精确控制:指定具体的工具列表,限制子代理能够使用的工具范围,实现更精细的权限管理

最佳实践:只授予子代理实现目的所必需的工具。这不仅提高了安全性,更能使子代理专注于与其目的相关的操作。

创建和管理子代理

方式一:使用 /agents 命令

/agents命令为子代理提供了一个全面的管理方式。通过这个命令,你可以:

  • 查看所有可用的子代理(包括内置、用户和项目子代理)
  • 通过引导设置创建新的子代理
  • 编辑现有的自定义子代理,包括它们的工具访问权限
  • 删除自定义子代理
  • 当存在重复项时,查看哪些子代理处于活动状态
  • 轻松管理工具权限,提供可用工具的完整列表

方式二:直接文件管理

你可以通过直接编辑子代理的文件来管理它们。这种方式提供了更大的灵活性,但需要对子代理的定义和文件格式有深入的了解。

这里推荐一个由 wshobson 分享的子代理集合,目前在Github 上已经收获了 12.2K Star,只需要下面两条命令,你就能将 77+ 个负责不同专业领域的子代理拉取到 Claude Code 中随时调用:

cd ~/.claude
git clone https://github.com/wshobson/agents.git

agents

如何调用子代理

方式一:自动委托

Claude Code 会综合以下几个方面,主动委托合适的子代理完成任务:

  1. 你请求中的任务描述
  2. 子代理配置中的description字段
  3. 当前上下文和可用工具

如果你想让 Claude Code 更主动地调用子代理,可以在任务描述中包含“主动使用子代理”或“必须使用子代理”等提示。

方式二:显式调用

通过在指令中提及特定子代理(名称)来主动请求它,例如:

> 运行测试子代理修复失败的测试
> 让代码审查子代理评审一下最近的修改
> 请使用调试子代理调查这个错误的原因

如何创建一个优秀的子代理(最佳实践)

  1. 从Claude生成开始:强烈建议线用Claude生成你的初始子代理,然后对其进行针对性地迭代优化。这种方法可以根据特定需求构建一个具备坚实基础的子代理。
  2. 设计专注的子代理:确保创建具有单一目标、明确职责的子代理,而不是试图让一个子代理完成所有事情。这好比软件设计中的单一职责原则,专注的目标铸就专业的子代理。
  3. 编写详细的提示:在子代理的系统提示中要包含具体指令、示例和约束。你提供的提示越详细,子代理的表现就越好。就像给员工写一份工作说明书一样,内容越详细就越不容易出错。
  4. 合理限制工具访问:确保只授予子代理达成目的所必需的工具。这不仅提高了安全性,还能帮助子代理更专注于与目的相关的操作,避免子代理陷入"工具过多反而不知道用哪个"的困扰。
  5. 版本控制管理:将项目子代理纳入版本控制,以便你的团队可以共同受益和改进它们,这一点在团队协作中格外重要。

子代理的高级用法

链式调用子代理

对于复杂的工作流程,你可以通过指令链接多个子代理来处理不同阶段的任务。例如:

> 首先使用代码分析子代理查找性能问题,然后使用优化子代理修复它们。

这种链式调用可以充分发挥每个子代理的专长,实现更高质量的结果。

动态子代理选择

Claude Code 能够基于上下文智能选择子代理。为了获得最佳效果,你需要确保子代理的description字段内容是以行动为导向的具体描述,清楚地说明子代理的能力和适用场景。

子代理的运行性能

在使用子代理时,需要注意以下性能特点:

  • 会话效率降低:子代理独立上下文的特点能够帮助保护主上下文,但整体的会话时间会更长,在会话效率上会有明显降低。
  • 考虑额外延迟:子代理每次被调用时,都相当于与其新建了一个会话,在收集执行任务所需的有效上下文信息时可能会增加延迟。

写在最后

Claude Code 的子代理功能为我们提供了一种全新的AI协作模式,让每个AI助手都能在自己最擅长的领域发挥最大的价值

现在就开始创建你的第一个子代理吧!不要再单打独斗,而是团队作战!通过创建不同专业领域的智能体,为自己组建一支覆盖面更广的专业团队,每个成员都有自己的专长,它们协同工作、共同完成复杂的任务,实现更高质量的结果。

这篇文章将会收录到原创专栏《油菜花的Claude Code快速上手指南》,欢迎感兴趣的小伙伴关注,一起学习,一起进步!

记住,从最简单的子代理开始,逐步完善它们,构建一支属于你的 AI 军团!

❤️ 感谢阅读


❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会跟你分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!也非常欢迎你通过公众号发消息加入我们!

❤️ 微信公众号|搜一搜:蚝油菜花