# 策展 · X (Twitter) 🔥🔥🔥

> 作者：Philipp Schmid (@_philschmid) · 平台：X (Twitter) · 日期：2026-05-06

> 原始來源：https://x.com/_philschmid/status/2051674663965606052

## 中文摘要

# Agent 如何管理其他 Agent：2026 年的四種 Subagent 模式

去年我探討了為何將任務拆解給專注的 Agent 可以提升可靠性。從那時起，更完善的規劃與工具使用能力，讓過去因過於脆弱而無法實現的模式變得可行：持久化的工作池（persistent worker pools）與 Agent 間的直接訊息傳遞。

以下是四種模式，按主 Agent 對 Subagent 生命週期的控制程度排序。

## 1. Inline Tool：將 Subagent 作為函式呼叫

![](https://pub-75d4fe1e4e80421b9ecb1245a7ae0d1a.r2.dev/curated/1778030427871-iaHHjw34EXwAki0qQjpg.jpg)

主 Agent 呼叫一個工具（例如 `call_agent`），該工具會產生一個 Subagent 並回傳結果。對呼叫者來說，這就像 `read_file` 一樣只是另一個工具。Subagent 在其自身的 context 中執行，主 Agent 從不管理其生命週期。

```json
[
  { "role": "user", "content": "Review PR #42 for security issues" },
  { "role": "assistant", "tool_calls": [
    { "name": "call_agent", "arguments": { "task": "Review PR #42 for security issues. Focus on auth changes.", "agent": "security-reviewer", "tools": ["read_file", "search_code"] } }
  ]},
  { "role": "tool", "name": "call_agent", "content": "Found 2 issues: 1) Auth token not validated in /api/users endpoint. 2) Session cookie missing HttpOnly flag in login handler." },
  { "role": "assistant", "content": "The review found 2 security issues..." }
]
```

此模式支援兩種模式：

- 同步 (Sync)：工具會阻塞直到 Subagent 完成，並直接回傳結果。

- 非同步 (Async)：工具會立即回傳一個 ID。結果稍後會以通知形式注入，讓主 Agent 可以繼續執行其他工作。

```json
[
  { "role": "user", "content": "Review PR #42 and also check the CI logs" },
  { "role": "assistant", "tool_calls": [
    { "name": "call_agent", "arguments": { "task": "Review PR #42 for security issues", "agent": "security-reviewer", "background": true } },
    { "name": "read_file", "arguments": { "path": "ci/logs/latest.txt" } }
  ]},
  { "role": "tool", "name": "call_agent", "content": "agent_id: agent-x1. Running in background." },
  { "role": "tool", "name": "read_file", "content": "Build passed. 142 tests green." },
  { "role": "assistant", "content": "CI looks clean. Waiting for the security review..." },
  { "role": "user", "content": "<notification agent_id='agent-x1' status='completed'>Found 2 issues: ...</notification>" },
  { "role": "assistant", "content": "The security review found 2 issues..." }
]
```

在同步模式下，工具的回應包含結果。在非同步模式下，工具的回應包含一個 ID，結果稍後會作為注入的使用者訊息送達。

使用時機：獨立的工作。例如研究搜尋、程式碼審查、文件分析、測試生成。大多數 Subagent 的使用案例都從這裡開始，也停留在此。

限制：適用於任何支援工具使用的模型，包括較小且較便宜的模型。結果以單一工具回應（同步）或注入的通知訊息（非同步）送達。無法發送後續指令、檢查進度或提前取消。如果 Subagent 誤解了任務，你只有在結果回傳時才會發現。

## 2. Fan-Out：產生 Agent 並等待結果

![](https://pub-75d4fe1e4e80421b9ecb1245a7ae0d1a.r2.dev/curated/1778030427864-iaHHjxSAXXAAMcC5Zjpg.jpg)

產生與收集是分開的。`spawn_agent` 會立即回傳一個 ID，`wait_agent` 則會阻塞直到結果準備好。這讓模型可以交錯執行任務，或在等待前產生多個 Agent。

兩個工具：`spawn_agent` 分派工作並立即回傳一個 ID。`wait_agent` 阻塞直到一個或多個 Agent 完成。模型控制順序。它可以產生 Agent 後立即呼叫 `wait_agent`（實際上是同步的），或者先執行自己的工作：

```json
[
  { "role": "user", "content": "Refactor the auth module and update all related tests" },
  { "role": "assistant", "tool_calls": [
    { "name": "spawn_agent", "arguments": { "task": "Refactor the auth module to use JWT tokens", "agent": "backend-engineer" } },
    { "name": "spawn_agent", "arguments": { "task": "Update all auth-related tests for the new JWT flow", "agent": "test-writer" } },
    { "name": "read_file", "arguments": { "path": "docs/auth-spec.md" } }
  ]},
  { "role": "tool", "name": "spawn_agent", "content": "Spawned agent-a (backend-engineer). Running." },
  { "role": "tool", "name": "spawn_agent", "content": "Spawned agent-b (test-writer). Running." },
  { "role": "tool", "name": "read_file", "content": "# Auth Spec\nJWT tokens with RS256..." },
  { "role": "assistant", "content": "I've kicked off both tasks. The auth spec confirms we should use RS256." },
  { "role": "assistant", "tool_calls": [{ "name": "wait_agent", "arguments": { "timeout": 300 } }]},
  { "role": "tool", "name": "wait_agent", "content": "2 agents completed:\n- agent-a: Refactored 3 files (auth.ts, middleware.ts, config.ts)\n- agent-b: Updated 12 tests, all passing" },
  { "role": "assistant", "content": "Both tasks are done. The auth module now uses JWT..." }
]
```

模型決定交錯執行的順序。它可以產生多個 Agent，執行其他工具呼叫，然後使用 `wait_agent` 作為全域信箱來收集所有可用的結果。

使用時機：多個可以並行執行的獨立任務。主 Agent 不需要從一個 Subagent 取得中間結果來啟動另一個。

限制：模型需要正確判斷何時等待。如果模型在每次產生後都立即呼叫 `wait_agent`，則與模式 1 沒有區別。其價值取決於模型在產生與等待之間交錯執行自身工作的能力。結果透過 `wait_agent` 批次收集，該工具會回傳自上次呼叫以來所有已完成的 Agent 輸出。這仍然是「發送後即忘」(fire-and-forget)：無法發送後續指令或在任務中途修正 Subagent 的方向。

## 3. Agent Pool：具備訊息傳遞功能的持久化 Agent

![](https://pub-75d4fe1e4e80421b9ecb1245a7ae0d1a.r2.dev/curated/1778030427562-iaHHjxdv3XcAIw158jpg.jpg)

主 Agent 透過訊息傳遞管理長生命週期、具備狀態的 Subagent。這支援多步驟的協調，主 Agent 在保留對話歷史的專家之間路由資訊。

工具：`spawn_agent`、`send_message`、`wait_agent`、`list_agents`、`kill_agent`。

與模式 2 不同，這裡的 Agent 是具備狀態且可互動的。主 Agent 發送訊息、取得回應，然後再發送另一條訊息給同一個 Agent。Agent 保留其完整的對話歷史。這支援主 Agent 在專家之間進行協調的多步驟工作流程。

模型控制它是每次與一個 Agent 互動（序列化），還是等待期間與多個 Agent 傳遞訊息（並行）。它可以同時發送給研究員和撰稿人，或者先等待研究員：

```json
[
  { "role": "user", "content": "Write a blog post about WebAssembly performance" },

  { "role": "assistant", "tool_calls": [
    { "name": "spawn_agent", "arguments": { "role": "researcher", "tools": ["web_search", "read_url"] }},
    { "name": "spawn_agent", "arguments": { "role": "writer", "tools": ["write_file", "read_file"] }}
  ]},
  { "role": "tool", "name": "spawn_agent", "content": "Spawned agent-r (researcher)" },
  { "role": "tool", "name": "spawn_agent", "content": "Spawned agent-w (writer)" },

  { "role": "assistant", "tool_calls": [
    { "name": "send_message", "arguments": { "to": "agent-r", "message": "Research WebAssembly performance benchmarks. Find 5 sources with concrete numbers." } },
    { "name": "send_message", "arguments": { "to": "agent-w", "message": "Outline a blog post structure about WebAssembly performance. 4 sections." } }
  ]},
  { "role": "tool", "name": "send_message", "content": "Delivered to agent-r" },
  { "role": "tool", "name": "send_message", "content": "Delivered to agent-w" },

  { "role": "assistant", "tool_calls": [{ "name": "wait_agent", "arguments": {} }]},
  { "role": "tool", "name": "wait_agent", "content": "agent-w responded: Outline ready: intro, benchmarks, real-world, conclusion" },

  { "role": "assistant", "tool_calls": [{ "name": "wait_agent", "arguments": {} }]},
  { "role": "tool", "name": "wait_agent", "content": "agent-r responded: Found 5 sources: 1) Chrome benchmark shows 1.2x native speed..." },

  { "role": "assistant", "tool_calls": [{ "name": "send_message", "arguments": { "to": "agent-w", "message": "Fill in your outline using these sources: 1) Chrome benchmark shows 1.2x native speed..." } }]},
  { "role": "tool", "name": "send_message", "content": "Delivered to agent-w" },

  { "role": "assistant", "tool_calls": [{ "name": "wait_agent", "arguments": {} }]},
  { "role": "tool", "name": "wait_agent", "content": "agent-w responded: Draft complete. Title: 'WebAssembly Is Faster Than You Think'..." },

  { "role": "assistant", "tool_calls": [{ "name": "send_message", "arguments": { "to": "agent-r", "message": "Fact-check this draft against your sources: 'WebAssembly Is Faster Than You Think'..." } }]},
  { "role": "tool", "name": "send_message", "content": "Delivered to agent-r" },

  { "role": "assistant", "tool_calls": [{ "name": "wait_agent", "arguments": {} }]},
  { "role": "wait_agent", "content": "agent-r responded: 2 corrections: paragraph 3 cites 2x speed but source says 1.5x..." },

  { "role": "assistant", "tool_calls": [
    { "name": "send_message", "arguments": { "to": "agent-w", "message": "Apply these corrections: paragraph 3 should say 1.5x not 2x..." } },
    { "name": "kill_agent", "arguments": { "agent_id": "agent-r" }}
  ]},
  { "role": "tool", "name": "send_message", "content": "Delivered to agent-w" },
  { "role": "kill_agent", "content": "agent-r terminated" },

  { "role": "assistant", "content": "Here is the final post..." }
]
```

模型控制協調流程。結果透過 `wait_agent` 逐條訊息送達，讓主 Agent 可以根據中間輸出調整其指令。

使用時機：需要 Agent 協作的多步驟工作流程。主 Agent 在專家之間路由資訊。

限制：主 Agent 必須追蹤多個 Agent 的狀態，決定何時發送後續訊息與何時等待，並正確路由資訊。較小的模型會搞混哪個 Agent 擁有哪個 context，或者忘記在完成時呼叫 `kill_agent`。頂尖模型可能勉強能處理 2-4 個 Agent。

## 4. Teams：Agent 之間互相對話

![](https://pub-75d4fe1e4e80421b9ecb1245a7ae0d1a.r2.dev/curated/1778030427564-iaHHjxqciXEAEj6g4jpg.jpg)

Agent 使用跨 Agent 訊息傳遞或共享信箱直接進行協調。主 Agent 建立團隊後退居幕後，僅等待最終報告或定期檢查狀態。

工具介面包含跨 Agent 定址。每個 Agent 在其工具集中都有 `send_message`，並可以按名稱或路徑定址其他 Agent。

從主 Agent 的角度來看，對話很短。它建立團隊、啟動規劃者，然後等待最終報告。模型可以選擇靜默等待，或使用 `list_agents` 定期檢查：

```json
[
  { "role": "user", "content": "Build feature X" },

  { "role": "assistant", "tool_calls": [
    { "name": "spawn_agent", "arguments": { "role": "planner", "tools": ["read_file", "search_code", "send_message"] } },
    { "name": "spawn_agent", "arguments": { "role": "implementer", "tools": ["read_file", "write_file", "run_command", "send_message"] } },
    { "name": "spawn_agent", "arguments": { "role": "reviewer", "tools": ["read_file", "search_code", "send_message"] } }
  ]},
  { "role": "tool", "name": "spawn_agent", "content": "Spawned agent-p (planner)" },
  { "role": "tool", "name": "spawn_agent", "content": "Spawned agent-i (implementer)" },
  { "role": "tool", "name": "spawn_agent", "content": "Spawned agent-v (reviewer)" },

  { "role": "assistant", "tool_calls": [{ "name": "send_message", "arguments": { "to": "agent-p", "message": "Plan and coordinate feature X. Your teammates: agent-i (implementer), agent-v (reviewer). Message them directly. Report back to me when done." } }]},
  { "role": "tool", "name": "send_message", "content": "Delivered to agent-p" },

  { "role": "assistant", "tool_calls": [{ "name": "wait_agent", "arguments": { "timeout": 60 } }]},
  { "role": "tool", "name": "wait_agent", "content": "Timed out. No agents responded." },

  { "role": "assistant", "tool_calls": [{ "name": "list_agents", "arguments": {} }]},
  { "role": "tool", "name": "list_agents", "content": "agent-p: running, agent-i: running, agent-v: idle" },

  { "role": "assistant", "tool_calls": [{ "name": "wait_agent", "arguments": { "timeout": 120 } }]},
  { "role": "tool", "name": "wait_agent", "content": "agent-p responded: Feature X complete. 3 files changed, all tests passing. Summary: ..." },

  { "role": "assistant", "content": "Feature X is built. Here's what was done..." }
]
```

Agent 間的協作完全發生在 Subagent 的 context 中。主 Agent 只看到明確回報的內容。定址可以使用階層路徑、信箱或 IPC。

使用時機：協調邏輯超過單一 Agent 逐步管理能力的大型任務。

限制：團隊中的每個 Agent 都需要頂尖模型的效能，而不僅僅是主 Agent。每個團隊成員必須獨立決定何時傳送訊息給隊友、包含什麼內容，以及何時回報。模型可能會傳送給錯誤的 Agent、忘記回報完成，或陷入迴圈。除了模型能力外，還有基礎設施挑戰：循環偵測（A 等待 B，B 等待 A）、衝突解決（兩個 Agent 編輯同一個檔案）以及關閉協調。除錯非常困難，因為 Agent 之間的訊息鏈很難追蹤，且故障會產生連鎖反應。

## 選擇模式

| 模式 | 工具 | 主 Agent 角色 | Agent 生命週期 |
| :--- | :--- | :--- | :--- |
| Inline | `call_agent` | 呼叫者 | 單一任務 |
| Fan-Out | `spawn_agent`, `wait_agent` | 分派者 | 單一任務 |
| Agent Pool | `spawn`, `send`, `wait`, `list`, `kill` | 協調者 | 多輪 |
| Teams | 以上全部 + 跨 Agent `send_message` | 監督者 | 持久化 |

從模式 1 開始；大多數任務不需要複雜的協調。僅在需要並行工作 (2)、多步驟協作 (3) 或複雜團隊協調 (4) 時才向上升級。

更高的模式需要更強大的模型。模式 1 適用範圍廣。模式 2 需要對等待時間進行推理。模式 3 需要多輪狀態追蹤。模式 4 要求所有參與者都具備頂尖模型能力。

原文發布於：https://www.philschmid.de/subagent-patterns-2026

## 標籤

Agent, 教學資源, 產業趨勢, Agent
