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。