agents 参数在 SDK 中定义和使用子代理。
概述
在使用 SDK 时,子代理可以通过两种方式定义:- 编程方式 - 在
query()选项中使用agents参数(推荐用于 SDK 应用程序) - 基于文件系统 - 将带有 YAML 前置内容的 markdown 文件放置在指定目录中(
.claude/agents/)
agents 参数的编程方式,这为 SDK 应用程序提供了更集成的开发体验。
使用子代理的好处
上下文管理
子代理与主代理保持独立的上下文,防止信息过载并保持交互的专注性。这种隔离确保专门化任务不会用无关细节污染主对话上下文。 示例:research-assistant 子代理可以探索数十个文件和文档页面,而不会用所有中间搜索结果混乱主对话 - 只返回相关发现。
并行化
多个子代理可以并发运行,显著加速复杂工作流程。 示例:在代码审查期间,您可以同时运行style-checker、security-scanner 和 test-coverage 子代理,将审查时间从几分钟缩短到几秒钟。
专门化指令和知识
每个子代理都可以有定制的系统提示,具有特定的专业知识、最佳实践和约束。 示例:database-migration 子代理可以拥有关于 SQL 最佳实践、回滚策略和数据完整性检查的详细知识,这些在主代理的指令中会是不必要的噪音。
工具限制
子代理可以限制为特定工具,减少意外操作的风险。 示例:doc-reviewer 子代理可能只能访问 Read 和 Grep 工具,确保它可以分析但永远不会意外修改您的文档文件。
创建子代理
编程定义(推荐)
使用agents 参数直接在代码中定义子代理:
AgentDefinition 配置
| 字段 | 类型 | 必需 | 描述 |
|---|---|---|---|
description | string | 是 | 何时使用此代理的自然语言描述 |
prompt | string | 是 | 代理的系统提示,定义其角色和行为 |
tools | string[] | 否 | 允许的工具名称数组。如果省略,继承所有工具 |
model | 'sonnet' | 'opus' | 'haiku' | 'inherit' | 否 | 此代理的模型覆盖。如果省略,默认为主模型 |
基于文件系统的定义(替代方案)
您也可以将子代理定义为特定目录中的 markdown 文件:- 项目级别:
.claude/agents/*.md- 仅在当前项目中可用 - 用户级别:
~/.claude/agents/*.md- 在所有项目中可用
agents 参数)优先于同名的基于文件系统的代理。
SDK 如何使用子代理
使用 Claude Agent SDK 时,子代理可以通过编程方式定义或从文件系统加载。Claude 将:- 加载编程代理 从选项中的
agents参数 - 自动检测文件系统代理 从
.claude/agents/目录(如果未被覆盖) - 自动调用它们 基于任务匹配和代理的
description - 使用它们的专门化提示 和工具限制
- 为每个子代理调用维护独立上下文
agents 参数)优先于同名的基于文件系统的代理。
示例子代理
有关子代理的全面示例,包括代码审查器、测试运行器、调试器和安全审计器,请参阅主要子代理指南。该指南包括详细的配置和创建有效子代理的最佳实践。SDK 集成模式
自动调用
SDK 将根据任务上下文自动调用适当的子代理。确保您的代理的description 字段清楚地指示何时应该使用它:
显式调用
用户可以在提示中请求特定的子代理:动态代理配置
您可以根据应用程序的需要动态配置代理:工具限制
子代理可以通过tools 字段限制工具访问:
- 省略该字段 - 代理继承所有可用工具(默认)
- 指定工具 - 代理只能使用列出的工具