Sub-Agent Spawning
Nikola Balic (@nibzard)· validated-in-production
问题
大型多文件任务会超出主Agent的上下文窗口,并耗尽其推理预算。你需要一种方法,将工作委派给具备独立上下文和工具的专用Agent。
方案
让主Agent生成专注型子Agent,每个子Agent拥有独立的全新context,并行处理可拆分的子任务,完成后汇总结果。
核心要求:调用每个子Agent时必须指定清晰、明确的任务主题,确保可追溯性。空泛或模糊的主题会导致并行工作无法追溯,且难以汇总结果。详情请参考《主题规范》(Subject Hygiene)。
实现方案:
1. 声明式YAML配置
在配置文件中定义子Agent类型,为其指定专属的系统提示词、允许使用的工具以及context窗口:
# subagents/planning.yaml
name: planning
system_prompt: "将复杂任务拆解为步骤..."
tools:
- list_files
- read_file
# 或设置为inherit: all(继承主Agent的所有工具)
# subagents/think.yaml
name: think
system_prompt: "分析并优化推理逻辑..."
tools:
- read_file
- search
主Agent通过专用工具调用子Agent:
subagent(agent_name, prompt, files)
该方案支持:
- 虚拟文件隔离:子Agent仅能访问显式传入的文件
- 工具范围控制:子Agent可继承主Agent的全部工具,或仅使用指定子集
- 专属系统提示词:每种类型的子Agent都有预定义的行为模式
2. 动态生成
根据任务需求动态生成子Agent,用于并行任务执行:
# 主Agent创建待办事项列表
files = glob("**/*.md")
batches = chunk(files, 9)
# 为每个批次**并行**生成子Agent
for batch in batches:
spawn_subagent(
task="更新Markdown文件的YAML前置元数据", # 清晰、明确的主题
files=batch,
context=instructions
)
# 所有子Agent并发运行,而非串行
并行委托最佳实践:
- 同时启动独立任务:不要按顺序依次处理A、B、C,需同时启动
- 使用清晰的任务主题:每个子Agent需要具备可追溯的身份标识(参考《主题规范》Subject Hygiene)
- 提前规划汇总逻辑:明确主Agent将如何整合子Agent的输出结果
- 控制子Agent数量在2-4个:从实际有效场景来看,这是最优上限;数量过多会增加协调成本
近期研究进展显示,Agent的状态外部化能力得到提升后,可帮助Agent更准确地识别适合委托的任务,以及如何向子Agent传递必要的context,从而让子Agent委托机制更具实用性。
如何使用
子代理的应用场景
-
上下文窗口管理:在子代理中处理大文件,避免污染主上下文
- 向子代理上传文件
- 提取特定数据
- 向主代理返回摘要
-
并发工作:并行运行多个子代理,完成后汇总结果
- 减少I/O密集型工作流的耗时
- 可同时发起网络API调用
-
代码驱动的LLM调用:将控制权移交LLM进行特定决策
- 代码工作流调用子代理
- 子代理基于LLM做出决策
- 控制权携结果返回至代码
-
安全隔离:在相互隔离的子代理中分离工具/上下文
- 外部资源检索与内部访问相互隔离
- 缩小敏感操作的影响范围
声明式子代理配置
# agents.yaml
subagents:
planning:
file: subagents/planning.yaml
allowed_in:
- main_agent
- research_agent
think:
file: subagents/think.yaml
allowed_in:
- main_agent
虚拟文件传递
# 主代理
result = subagent(
agent_name="planning",
prompt="分析这些文件并制定迁移计划",
files=["file1.ts", "file2.ts", "file3.ts"]
)
# 仅这3个文件对planning子代理可见
递归架构要点
部分实现方案将所有代理都视为子代理,以此实现灵活的组合逻辑,并确保系统内行为的一致性。
权衡
优点:
- 上下文隔离:每个子Agent拥有独立干净的上下文窗口(context window)
- 并行执行:通过并发执行降低工作流延迟
- 专业化分工:针对不同任务(规划、思考、分析)设置不同类型的子Agent
- 虚拟文件:精准控制每个子Agent可见的内容范围
- 工具权限范围限定:为保障安全或简化架构,限制子Agent的工具调用能力
- 声明式配置:通过YAML实现可复用的子Agent定义
缺点:
- 额外开销:创建与协调子Agent会增加系统复杂度
- 成本上升:同时运行多个Agent会提升Token消耗
- 协调成本高:主Agent必须跟踪并汇总所有子Agent的执行结果
- 并非必需方案:作者提到“我们常常一开始觉得需要子Agent,后来却发现了更贴合场景的替代方案”
- 延迟可见性差:面向用户的延迟属于“隐性特性”,只有当它引发问题时才会被察觉
子Agent的核心适用场景:
- 上下文窗口管理(如大文件处理场景)
- I/O密集型工作流(如网络API调用场景)
- 需要LLM任务委派的代码驱动型工作流
- 大规模并行需求(如10个及以上并发Agent的场景)
参考文献
关键词:
聚焦智能代理(子代理)的实践案例、技术研究与工程化实现,涵盖Claude系列模型落地应用、并行委托模式、代理集群迁移、虚拟文件隔离等核心内容。
直译:
- SKILLS-AGENTIC-LESSONS.md - 基于88个会话的分析,重点关注清晰的任务主题与并行委托模式
- 《培养智能代理:第6集》:Claude 4 Sonnet通过四个子代理完成36篇博客文章的编辑工作
- Anthropic公司的Boris Cherny 分享面向框架变更与代码规范检查规则的代理集群迁移方案
- 《AI & 我》播客:如何像开发者一样使用Claude Code
- Cognition AI:Devin与Claude Sonnet 4.5 - 探讨模型状态外化判断能力的提升,如何让子代理委托具备更高可行性
- 用Claude Code打造企业 - Ambral公司的“稳健研究引擎”采用针对不同数据类型的专用子代理,可实现跨系统领域的并行研究
- 构建内部代理:子代理支持 - Will Larson介绍基于YAML配置、具备虚拟文件隔离特性且由代码驱动大语言模型调用的子代理实现方案
来源摘要
正在获取来源并生成中文摘要…