Claude Code的Agent设计理念
核心设计:主Agent + 有限子Agent + 丰富工具生态
Claude Code采用有意简化的Agent架构,主要通过单一主Agent处理所有编码任务,配合有限的子Agent来处理特定类型的独立任务,有效避免了复杂多Agent系统的协调问题。
可以参考Cognition AI的研究结果进行理解:Don’t Build Multi-Agents
传统多Agent vs Claude Code 架构设计对比
为什么需要多Agent?
LLM的上下文长度受限是根本动机
传统多Agent解决方案的思路
将用户需求分解成子任务,多个子Agent分别处理子任务,然后由核心Agent将这些贡献综合成连贯的最终输出。
比较常见的多Agent解决思路举例
用户请求
↓
┌─────────────────────────────────────────────────────────┐
│ 协调Agent (Coordinator) │
│ • 任务分解 │
│ • Agent调度 │
│ • 结果汇总 │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────┼─────────────────────┐
↓ ↓ ↓
┌─────────────┐ ┌─────────────────┐ ┌─────────── ───┐
│ 文件选择Agent │ │ 代码生成Agent │ │结果验证Agent │
│ FileSelector │ │ CodeGenerator │ │ Validator │
└─────────────┘ └─────────────────┘ └──────────────┘
其中的每个子Agent所执行的任务,都是基于用户需求进行思考所做出的决策。
多Agent架构的实际问题
形象理解:现实生活中多Agent架构的工作场景
一个项目需求,产品-后端-前端-测试 合作完成。
1. 信息丢失,上下文传递断层
子Agent中间也可能有层层输入输出,这其中可能对后续推理有价值,只输出结果可能造成效果不理想或者后续重复推理
形象理解
合作完成需求时,需求层层传达,信息传递总是递减的。
2. 并行工作时错误定位困难
合并执行结果后,当主Agent发现执行结果不符合预期时,这个问题是哪个子Agent执行出现问题导致的?
形象理解
三个研发共同合作完成开发后交付QA进行测试。三个研发各自需求的单测都没有问题,但是合并起来有问题,那么应该是谁的问题,应该谁改?
3. 不同Agent决策不一致时的协调问题
上图中的FileSelector所选择了需要修改的文件,但是可能CodeGenerator真实写代码时需要修改的文件会更多
形象理解
假设方案探讨的场景,部分需求的实现路径,在没有经过实践检验、经历事物的发展变化之前,是讨论不出完美意义上的最佳方案的,很多时候没有唯一选项。假设存在两个可实现路径A和B,多个Agent参与决策容易出现一人选了正确A,一人选了B的情况。
Claude Code的的解决方案
概述
Claude Code的设计中,虽然存在子Agent,但是可以将其理解为单Agent
架构。Claude Code的子Agent其实只是一个工具Agent
。
单一Agent架构的形象理解
一个全栈工程师B独立完成一个需求B,在需求完成过程中,对于此次需求依赖的某个A服务自己不熟悉,问了A服务的owner A一个问题。这个问题不包含任何A服务以外的背景知识,且与此次的需求完全解耦。
-
owner A
虽然是一个人(Agent),但是在此场景中起到的只是A服务的相关文档
(Tool)的作用,只是全栈工程师B
的工具人
-
owner A
不需要关注需求B
的任何内容,仅仅接收以服务A
作为知识背景的问题,且只会从服务A
的角度做出回应
这就是Claude Code中的工具Agent
,与需求的实现流程高度解耦,只处理完全不被需求是什么所影响的明确任务。
1. 主Agent承担所有编码任务
- 所有代码编写、文件编辑、架构决策都由主Agent完成
- 保持完整的项目上下文和决策连贯性
- 避免多Agent间的信息传递损失
2. 子Agent仅处理特定独立任务
根据调研发现,Claude Code的子Agent使用原则:
- 任务类型限制:子Agent通常只被分配回答明确定义的问题,而不是编写代码
- 独立上下文:每个子Agent有自己的上下文窗口,用于处理独立的探索任务
具体子Agent任务类型:
- 代码库探索:并行探索大型代码库的不同目录,每个Agent有独立上下文
- 验证 和调研:验证实现细节,调查特定技术问题
- 独立分析:回答关于代码架构和逻辑的明确问题
子Agent的举例:
- 分析当前项目的中间件使用
- 研究当前项目中某个插件的使用方法
- 检查当前项目测试用例的覆盖范围和测试工具
3. Task Tool的并行处理能力
- 支持最多10个并行子任务
- 主要用于独立的、不需要代码修改的任务
- 队列管理:任务完成后自动启动下一个任务
4. /compact 命令 - 智能上下文压缩
当上下文接近限制时,Claude Code不是分割任务给多个Agent,而是智能总结:
- 智能总结:不是简单截断历史,而是总结对话中的关键点
- 上下文保持:维护项目结构和需求的关键细节
- 选择性记忆:优先保留代码片段和实现细节,而非一般讨论
- 单命令执行:无需手动决定保留或丢弃什么,一个命令处理所有事情
- 会话连续性:可以继续处理同一问题而无需重新开始