大家好,我是bytezhou,这次更新拖的有点久,本篇介绍Claude Code的另一个强大能力,“智能分身”——SubAgent。
当一个任务越发复杂时,CC就有点"力不从心"了,举个例子,你让CC帮你重构订单模块,既想做性能优化(响应与耗时尽可能低)、又想做安全校验(各种输入校验/边界检查等)。
对CC来说,这是两个"冲突"的改造,性能优化时,可能绕过了某些安全机制,直接调用内核方法;安全校验时,又禁止使用"unsafe"的方式。CC这么一执行,直接就"裂开"了,最终的任务结果也混乱不堪。
在同时扮演多个角色的场景下,CC需要从"单Agent"走向"多Agent",从"一个全才"变成"多个专家",这就是SubAgent机制。
1. 多Agent模式的"现实意义" 现实中,一个团队接了一个开发任务后,一般是如何处理的?他们会拆解任务、然后并行处理,UI同事做UI设计、前端同事做页面开发、后端同事做后端业务逻辑开发,各自完成后,再汇总进行集成测试。
多Agent模式(Multi-Agent)正是借鉴了"团队分工"的思想:
上下文隔离:主Agent把一个"大任务"拆分成多个"子任务",然后唤起多个子Agent去处理每个子任务,每个子Agent均拥有独立干净的上下文窗口,互不影响。 并行处理:多个子Agent可以根据"子任务"的依赖关系,并行的处理不同的"子任务",然后将各自的处理结果 返给主Agent。 注意力隔离:每个子Agent都有自己独特的角色定义、Skill、历史记忆等,每个子Agent都是一个"专家"。 上述的多Agent模式,正是CC的SubAgent机制的理论基础。
2. SubAgent:“专家分身” 总的来说,SubAgent就是在Claude Code的主会话中"临时克隆"出的、拥有独立上下文窗口的、专有技能的"专家"。可以这样理解:
Claude Code的主会话是公司的"CEO",SubAgent就是下面的技术总监、市场总监、运营总监、人事总监等。当公司遇到了某方面的问题,“CEO"先判断一下,这个问题归谁管,然后就把问题指派给相应的"总监”,这个"总监"带着自己的团队(专有的Skill、工具、记忆等)把问题处理了,最后把处理结果汇报给"CEO"。
SubAgent的主要特性:
独立的上下文:有自己的上下文窗口,与主会话的上下文隔离,避免"上下文污染"。 专属的定义:每个SubAgent有自己专属的定义,包括角色、执行流程、Skill、工具等。 2.1 定义一个SubAgent 跟前面介绍的Slash Command、Skill类似,定义一个SubAgent,也是通过带YAML Frontmatter的Markdown文件。
同理,SubAgent也分为项目级和用户级:
存放位置 作用域 使用场景 项目级SubAgent ./.claude/agents/ 只能用于当前项目 定义与当前项目强相关的SubAgent,团队共享,提交到git 用户级SubAgent ~/.claude/agents/ 当前用户本地的所有项目均可使用 定义该用户私人专用的SubAgent,对本地的所用项目均生效,无需提交到git 若出现同名SubAgent,CC在加载时,项目级会覆盖用户级。
2.2 SubAgent的Markdown文件详解 下面是一个代码检视器的SubAgent定义(来自everything-claude-code):
--- name: code-explorer description: Deeply analyzes existing codebase features by tracing execution paths, mapping architecture layers, and documenting dependencies to inform new development. model: sonnet tools: [Read, Grep, Glob, Bash] --- # Code Explorer Agent You deeply analyze codebases to understand how existing features work before new work begins. ## Analysis Process ### 1. Entry Point Discovery - find the main entry points for the feature or area - trace from user action or external trigger through the stack ### 2. Execution Path Tracing - follow the call chain from entry to completion - note branching logic and async boundaries - map data transformations and error paths ...... 我们来看一下元数据和正文:
...