Subagents
了解 Bob 如何使用 subagents 在隔离的上下文中处理集中、自包含的任务,而不会污染主要对话。
什么是 subagents?
subagent 是 Bob 可以 spawn 的独立代理,用于处理集中、自包含的任务。它在自己的隔离 context window 中运行,执行分配的工作,并将结果摘要返回给主要对话。
subagents 适用于那些否则会在进行中的对话中添加大量无关内容的工作——例如,在 Bob 继续主要任务之前,深入探索代码库的某个部分以收集特定信息。
subagents 如何工作
当 Bob spawn 一个 subagent 时:
- 创建一个具有自己 context window 的新独立代理。
- Bob 向其传递需要执行的集中任务的描述。
- 在开始之前会提示你批准该 spawn。Bob 等待直到你确认。
- subagent 使用其可用的 tools 执行任务。
- subagent 将其发现的摘要返回给 Bob。
- Bob 使用该摘要继续主要对话。
subagent 与主要对话分开运行。它不与 Bob 共享状态、文件或 tool 结果,除非 Bob 在描述中明确传递了这些内容。
Subagent 类型
有两种 subagent 类型,各自适合不同的任务:
| 类型 | 描述 | 最适合 |
|---|---|---|
explore | 只读代码库探索,在更轻量的模型上运行 | 搜索和总结代码,查找相关文件,理解结构 |
general | 完整的 tool 访问权限,在默认模型上运行 | 任何需要读取、写入或命令的自包含任务 |
上下文与对话历史
默认情况下,subagent 看不到父对话历史。这使其上下文保持精简,专注于当前任务。
当 subagent 需要理解对话中早些时候表达的先前决定、约束或偏好时,Bob 可以设置 fork_context: true 将对话历史传递给 subagent。
模式限制
你正在使用的模式控制 Bob 被允许 spawn 的 subagent 类型。某些模式允许所有 subagent 类型;其他模式将 spawn 限制为特定类型或完全禁止。如果活动模式不允许 subagent spawn,Bob 将直接完成工作而不进行 spawn。
Bob 何时使用 subagents
Bob 谨慎使用 subagents。默认情况下始终直接完成工作而不 spawn subagent。只有在以下所有条件都成立时才会考虑 subagent:
- 任务明确是自包含的,只需要返回摘要。
- 它会向主要上下文添加大量无关内容。
- 无法通过一两次直接的 tool 调用完成。
Bob 不将 subagents 用于:
- 简单的文件读取或快速搜索。
- 单一 tool 操作。
- 相关上下文已经可用的任务。
Subagents 与 subtasks 比较
Subagents 和 subtasks 是相关但不同的概念:
| Subagent | Subtask | |
|---|---|---|
| 可见性 | 在后台静默运行 | 在 UI 中显示,带有自己的面包屑和对话 |
| 交互 | 非交互式——只返回摘要 | 完全交互式——可以跟踪进度并继续对话 |
| 目的 | 在不污染主要上下文的情况下收集信息或完成隔离工作 | 处理足够复杂、需要专用追踪和独立线程的工作 |
| 输出 | 返回给 Bob 的摘要 | 独立对话线程 |
将 subagents 用于后台信息收集。将 subtasks 用于受益于可见性和专用对话的复杂工作。
配置 subagent 行为
你可以通过在 .bob/agents/ 中创建 agent persona 文件来控制 subagent 的关注内容、输出格式以及可使用的 tool。Persona 文件为 subagent 提供定义好的角色和约束条件,例如,生成按严重程度排序的发现结果表,并明确指示不提供修复建议的代码审查员。
有关设置说明和示例,请参阅 agent persona。