Skip to content

SubAgent ​

SubAgent 是被另一个 Agent 调用的后台 Agent。它不会直接接管聊天,也不会自己提交前台回复;它接收一个明确的子任务,在受限工作区中完成工作,然后把摘要、发现或产物引用返回给父 Agent。

可以把它理解成“临时请一个专门角色帮忙”。父 Agent 仍负责最终判断和聊天提交,SubAgent 只负责局部任务。

适合什么场景 ​

SubAgent 适合拆出边界清楚的小任务:

  • 整理一段长聊天中的相关线索。
  • 检查草稿是否符合角色、格式或禁忌。
  • 为主 Agent 准备摘要、提纲或候选方案。
  • 并行处理几个互不依赖的小问题。
  • 使用不同模型或不同预设完成专门工作。

不建议为了简单回复使用 SubAgent。委派会增加一次模型运行和时间线复杂度;如果主 Agent 自己能完成,通常直接完成更稳。

它如何工作 ​

一次委派大致是这样:

text
主 Agent 看到可调用的 SubAgent
  ↓
主 Agent 用 agent.delegate 发起子任务
  ↓
SubAgent 在后台创建自己的 invocation 和任务工作区
  ↓
SubAgent 阅读任务说明、必要摘要和允许访问的文件
  ↓
SubAgent 用 task.return 返回结果
  ↓
主 Agent 用 agent.await 等待或查看结果
  ↓
主 Agent 决定如何使用这些结果,并提交最终聊天内容

时间线会显示委派、等待、子任务开始、返回、失败或取消等事件。子任务的中间过程不会写成普通聊天楼层。

相关工具 ​

SubAgent 相关工具有四个:

工具谁使用作用
agent.list父 Agent查看当前可调用的 Agent
agent.delegate父 Agent向指定 Agent 发起子任务
agent.await父 Agent等待子任务完成,或查看当前状态
task.returnSubAgent返回任务结果并结束子任务

task.return 只在子任务运行时出现。普通主 Agent Profile 不应把它手动加入工具列表。

配置一个可用的 SubAgent ​

一个可被调用的 SubAgent Profile 通常需要这些设置:

设置建议
可作为 SubAgent开启
模型绑定选择可运行模型,不能停在“需要重新配置”
工具权限按任务需要开放读取、写入、Skill 或世界书工具
系统提示词说明它擅长什么、应返回什么、哪些事不要做

如果希望所有主 Agent 都能调用它,允许的调用者可以设为 *。如果它只服务某个主 Agent,则建议只允许那个 Profile 调用。

主 Agent 需要什么 ​

主 Agent 如果要委派任务,需要:

  • Profile 中允许生成子 Agent。
  • 有足够的最大工具调用数和最大轮数。
  • 系统提示词中说明什么时候应委派,什么时候应自己完成。

委派不是越多越好。比较稳妥的写法是告诉主 Agent:只有当任务可以清楚拆分,并且 SubAgent 的结果会帮助最终回复时,才发起委派。

子任务说明应该怎么写 ​

好的子任务说明应包含结果目标,而不是只列步骤。

建议包括:

  • 任务目标:需要完成什么。
  • 上下文:相关角色、片段、文件路径或限制。
  • 期望输出:需要摘要、检查结果、草稿,还是结构化发现。
  • 预算意识:如果只需要简单结论,不要要求长篇分析。

不建议让 SubAgent 猜父 Agent 的意图。父 Agent 应把需要的背景写清楚。

工作区和结果 ​

SubAgent 会看到经过限制的任务工作区。常见路径包括:

路径含义
summaries/parent/父 Agent 提供给子任务的只读摘要
summaries/agents/其它子任务返回的摘要
summaries/当前子任务可写的摘要区域
scratch/当前子任务的临时草稿

SubAgent 返回结果时,可以附带 artifacts。父 Agent 会看到这些引用,再决定是否读取、采纳或忽略。最终进入聊天的内容仍由父 Agent 提交。

并发和预算 ​

委派受 Profile 限制:

  • 最大并发子任务限制同一时间运行几个 SubAgent。
  • 每次运行最多子任务限制本轮最多发起多少个子任务。
  • 每个子任务还可以被分配更小的最大轮数和工具调用数。
  • 子任务结果有预算限制,过长结果不适合直接返回给父 Agent。

如果任务经常超时或没有返回结果,通常应先收窄任务说明,而不是简单提高预算。

当前边界 ​

当前已经支持 return-mode SubAgent,但仍有明确边界:

  • 还没有用户可用的 agent.handoff。
  • 还没有模型可见的任务取消工具。
  • SubAgent 不能直接提交聊天消息。
  • 子任务失败不会自动让父 Agent 成功;父 Agent 需要根据返回状态决定下一步。
  • 群聊场景下的 Agent 运行仍未作为稳定能力开放。

这些边界是为了让父 Agent 始终保留最终责任。SubAgent 应该帮助主流程,而不是让任务变成不可控的后台展开。

常见问题 ​

为什么我看不到某个 SubAgent?
通常是目标 Profile 没有开启“可作为 SubAgent”,或者它限制了允许调用者。

为什么委派时提示模型需要配置?
导入或分享来的 Profile 不会携带本机模型连接。进入那个 Profile,重新选择可用模型后再运行。

为什么 SubAgent 做完了,聊天里没有直接出现它的回复?
这是正常行为。SubAgent 返回结果给父 Agent,父 Agent 再决定最终聊天内容。

什么时候不该用 SubAgent?
如果任务可以在一次普通 Agent 运行里清楚完成,不必拆分。少一层委派,通常也少一层不确定性。

Released under AGPL-3.0.