Spring AI 智能体 5 : 子智能体编排

一个能够包办所有任务的大而全的通用智能体并不讨好,不如将任务委派给专业化的子智能体。这能让上下文窗口保持聚焦,避免因信息杂乱而降低执行效果。

Task 工具(任务工具)是 spring-ai-agent-utils 工具集的一部分,是一个可移植、与模型无关的 Spring AI 实现,其设计灵感来自 Claude Code 的子智能体(subagents)。它支持构建分层式智能体架构,由专业化的子智能体在独立的上下文窗口中处理聚焦型任务,并仅将核心结果返回给父智能体。

除了支持 Claude 基于 Markdown 的格式外,该架构还具备可扩展能力 —— 支持 A2A 及其他智能体协议,用于实现异构智能体的编排。

工作原理

主智能体通过 Task 工具将任务委派给专业化的子智能体,每个子智能体都在独立隔离的上下文窗口中运行。

整个子智能体架构包含三个核心组件:

1. 主智能体(调度器) 与用户直接交互的顶层智能体。其大语言模型可调用 Task 工具,并通过智能体注册中心感知所有可用的子智能体 —— 注册中心会在启动时加载所有子智能体的名称与描述。主智能体会根据每个子智能体的**描述(description)**字段,自动判断何时进行任务委派。

2. 智能体配置文件 子智能体以 Markdown 文件形式定义(如 agent-x.mdagent-y.md),存放于 agents/ 目录下。每个文件指定子智能体的名称、描述、允许调用的工具、偏好模型与系统提示词。这些配置会在启动时加载到智能体注册中心与 Task 工具中。

3. 子智能体 独立运行的智能体实例,在隔离的上下文窗口中执行任务。每个子智能体可以使用不同的大语言模型(LLM‑X、LLM‑Y、LLM‑Z),拥有独立的系统提示词、工具与技能 —— 支持根据任务复杂度实现多模型路由。

执行流程如下:

  1. 加载: 启动时,Task 工具加载配置好的子智能体引用,解析名称与描述,并填充到智能体注册中心。
  2. 用户向主智能体发送复杂问题。
  3. 主智能体的大语言模型评估请求,并查询注册中心中可用的子智能体。
  4. 大语言模型决策: 调用 Task 工具,传入子智能体名称与任务描述,执行委派。
  5. Task 工具 根据智能体配置,创建并启动对应的子智能体。
  6. 子智能体 在独立的上下文窗口中自主执行任务。
  7. 结果 回流至主智能体(仅返回核心结论,不包含中间步骤)。
  8. 主智能体 整合结果,并向用户返回最终答案。

每个子智能体都具备以下特性:

  • 独立上下文窗口: 与主对话完全隔离,避免信息冗余
  • 自定义系统提示词: 针对特定领域的专业化指令
  • 可配置工具权限: 仅开放必要的能力
  • 多模型路由: 简单任务使用轻量低成本模型,复杂分析使用高性能模型
  • 并行执行: 可同时启动多个子智能体
  • 后台任务: 耗时较长的操作可异步执行

内置子智能体

Spring AI Agent Utils 提供四个内置子智能体,在配置 TaskTool 时会自动注册:

子智能体 用途 可用工具
Explore 快速、只读的代码库探索 —— 查找文件、搜索代码、分析内容 Read、Grep、Glob
General‑Purpose 多步骤研究与执行,具备完整读写权限 所有工具
Plan 软件架构设计,用于制定实现策略与识别权衡方案 只读 + 搜索
Bash 命令执行专家,用于 Git 操作、构建与终端任务 仅 Bash

多个子智能体可同时并行运行 —— 例如在代码审查时,可同时运行 style‑checkersecurity‑scannertest‑coverage

快速上手

1. 添加依赖

2. 配置智能体

主智能体会根据子智能体的描述字段,自动判断何时进行委派。

3. 多模型路由(可选)

根据任务复杂度,将子智能体路由到不同模型:

子智能体在定义中指定其偏好模型,Task 工具会自动路由。

创建自定义子智能体

自定义子智能体以 Markdown + YAML 前置元数据 形式定义,通常存放于 .claude/agents/ 目录:

子智能体文件格式

配置字段说明

字段 必填 描述
name 唯一标识(小写字母 + 连字符)
description 自然语言描述,说明何时使用该子智能体
tools 允许调用的工具(省略则继承所有)
disallowedTools 明确禁止的工具
model 偏好模型:haikusonnetopus

重要: 子智能体不能创建自己的子智能体。不要在子智能体的工具列表中包含 Task

加载自定义子智能体

后台执行

耗时较长的子智能体可异步执行。主智能体继续处理其他任务,后台子智能体异步运行。使用 TaskOutputTool 在需要时获取结果。

如需跨实例持久化任务存储,可参考 TaskRepository 文档。

总结

Task 工具为 Spring AI 带来了分层子智能体架构,实现了上下文隔离、专业化指令与高效的多模型路由。通过将复杂任务委派给聚焦型子智能体,主智能体将保持轻量与高效。

原文:Subagent Orchestration