前言

前面对Claude Code CLI有了基本了解,今天继续深度探索Claude Code CLI Subagent的使用方式。对往期内容感兴趣的小伙伴也可以看往期内容:

当前版本

1.0.128 (Claude Code)

主要优势

  • Context preservation(上下文保留):每个子代理都在自己的环境中运行,防止主要对话受到污染,并使其专注于高级目标。

  • Specialized expertise(专业知识):子代理可以通过针对特定域的详细说明进行微调,从而提高指定任务的成功率。

  • Reusability(可重用):创建后,子代理可以在不同的项目中使用,并与您的团队共享,以实现一致的工作流程。

  • Flexible permissions(灵活的权限):每个子代理可以具有不同的工具访问级别,允许您将强大的工具限制为特定的子代理类型。

Subagent配置

当子代理名称冲突时,项目级子代理优先于用户级子代理

在Claude Code CLI中Subagent提供 Project subagents(项目子代理) 和 User subagents(用户子代理) 2种配置:

  • 项目子代理:针对特定项目生效,路径:项目根目录/.claude/agents/,优先级最高

  • 用户子代理:针对所有项目生效,路径:~/.claude/agents/,优先级较低

Subagent与主Agent交互形式

通过Claude Code CLI官方文档我们可以了解到,主Agent和子Agent环境是隔离的,每个子Agent都有自己独立的运行环境,大致交互流程如下:

图片

由此我们也可以理解为子代理的上下文不会受主Agent上下文的影响,也不会影响主Agent的上下文大小,对于复杂和庞大上下文的任务,我们可以将任务拆分为多个子Agent协同完成,变相的对上下文进行拆分。

Subagent格式

每个子代理都定义在具有以下结构的 Markdown 文件中:

<span leaf="">---

Frontmatter属性:

  • name:子代理名称

  • description:描述子代理功能及何时应该调用此子代理

  • tools:可使用工具列表,如果省略,则允许使用所有工具

  • model:子代理使用的模型

  • color:子代理展示的背景色

Subagent提示词内容一般可以按照下面几个方面来写:

  • 角色定位:说明子代理的角色、擅长领域,比如“你是一个软件测试工程师,非常擅长发现代码中的隐藏问题”

  • 工作方式与标准:描述技能要求、最佳实践、风格指南或限制。

  • 示例(可选):若任务复杂,可在正文里放几个输入输出示例,帮助 Claude 更准确理解。

基本使用

Claude Code CLI提供了创建Subagent的交互式命令,对交互式命令创建Hooks流程还不了解的小伙伴可以看往期内容:Claude Code CLI初体验

在使用示例中我们主要以使用手动配置为主,对于不会写Agent提示词的小伙伴来说可能有些手足无措,但是不用担心,网上有很多大佬整理的提示词可以供我们借鉴,例如我们可以到Github上检索Subagent提示词,可以有很多人整理了subagent提示词,我们可以直接复制并稍作修改,调整的更符合我们项目要求。

图片

显/隐式调用

在Claude Code CLI中有 隐式调用 和 显示调用 2种使用子代理的方式,用白话讲就是 模型推理 和 指定代理名称 调用。

我们代码审查子代理为例,在项目工作区创建 .claude/agents/code-reviewer.md 文件

图片

重启Claude Code CLI,隐式调用我们可以这么用:

<span leaf="">帮我审查最近修改的改动

或者这么用,表明需要进行代码审查

<span leaf="">使用代码审查员来审查所有代码更改

图片

显示调用,就是明确告诉AI使用指定的子代理

<span leaf="">使用code-reviewer子代理review我最近的修改

图片

多子代理

在Claude Code CLI中支持创建和使用多个子代理,我们可以在项目工作区 .claude/agents/ 目录下创建 code-reviewer.md、test-runner.md、debuger.md 3个子代理

图片

图片

图片

重启Claude Code CLI,在交互式命令输入 /agents 可以看到已创建的3个子代理

图片

串并行子代理

在Claude Code CLI中多子代理可以串行调用也可以并行调用,例如我们在代码中写一段错误代码

图片

我们可以要求AI先对代码使用 code-reviewer子代理 进行审查,然后使用 debugger子代理 找到错误原因

<span leaf="">@index.py 首先使用 code-reviewer 子代理查看我最近的修改,然后使用 debugger 子代理检查错误原因 

可以看到Claude Code CLI先是调用了 code-reviewer子代理,接着又调用了 debugger子代理

图片

除了串行调用,我们也可以并行调用多个子代理进行任务处理,我们前面创建的 debugger子代理 和 test-runner子代理 中都有分析错误的提示词,可以让他们并行检查错误,最终汇总错误。

<span leaf="">使用 debugger 子代理和 test-runner 子代理并行检查 @index.py 中错误,最后汇总输出错误原因 

可以看到Claude Code CLI先是同时调用了 debugger子代理 和 test-runner子代理,并不是等debugger子代理调用结束再调用test-runner子代理

图片

自定义命令搭建agent工作流

在Claude Code CLI中可以通过自定义命令调用子代理,借助这一特性,我们可以在自定义命令中使用结构化提示词的方式指定调用不同的子代理完成不同的任务。

依次在项目工作区 .claude/agents/ 目录下创建 code-reviewer.md、security-auditor.md、performance-engineer.md、test-automator.md 子代理

code-reviewer.md

<span leaf="">---

security-auditor.md

<span leaf="">---

performance-engineer.md

<span leaf="">---

test-automator.md

<span leaf="">---

在项目工作区 .claude/commands/ 目录 full-review.md 自定义命令,提示词启发来自:https://zhuanlan.zhihu.com/p/1943813633428689089

<span leaf="">---

重启Claude Code CLI,执行 /full-review 命令,可以看到Claude Code CLI同时调用了4个子代理

图片

最后给出了一个完整的分析报告

图片


点击关注,及时接收最新消息