$ cat ~/writing/2026-04-26-multi-agent-patterns.md

Multi-Agent 架構模式詳解:Supervisor、Handoff、Router、Skills 四種模式比較

DATE2026·04·26
TAGSAI · Agents
READING7 min

Multi-Agent 不是「找 N 個 LLM 一起跑」的單一概念。常見的分類整理出四種模式,各自合適不同問題。本文拆解 Supervisor、Handoffs、Router、Skills 四種模式的核心特徵、運作流程、優缺點與 Token 成本,並提供選擇決策框架。

快速概覽:四種模式 + 選擇決策

模式適合什麼不適合什麼
Subagents (Supervisor)任務可分解 + 子任務獨立(報告生成、研究)需要 agent 間長時序記憶
Handoffs流程中切換專精角色(客服 → 技術支援)任務無明確接力點
Router純分派(問題分類後分發)需要彙整跨 agent 結果
Skills動態工具加載(Claude Code 模式)多角色協作

真實系統常常混合使用:一個 Supervisor 底下,每個 Subagent 本身可能又是 Skills 模式。對應到 Claude Code,就是 Subagents(用 Agent tool 指定 subagent_type)和 Skills(用 Skill tool 動態載入 .md)兩種模式並存。

從核心特徵來看,四種模式在狀態管理與執行方式上有明顯差異:

模式核心特徵狀態管理執行方式
Subagents (Supervisor)中心化編排主 Agent 有狀態,Subagents 無狀態可並行
Handoffs對等轉移狀態跨 Agent 持久化序列
Router並行分派無狀態並行
Skills動態加載單一 Agent 累積上下文序列/並行

模式一:Subagents (Supervisor 模式)

也稱:Hierarchical、Orchestrator-Workers、Manager-Worker。

架構圖

flowchart TD
  U[用戶] --> S[Supervisor]
  S --> A[Sub A] & B[Sub B] & C[Sub C]
  A & B & C -.彙整.-> S

中心化編排:所有請求經過 Supervisor 分派給 Sub Agents,Sub Agents 各自獨立執行後將結果回報,由 Supervisor 彙整成最終結果。

核心特徵

特徵說明
中心化控制所有請求經過 Supervisor 路由
上下文隔離每個 Sub Agent 獨立上下文窗口
狀態管理Supervisor 維護對話狀態,Sub Agents 無狀態
執行方式可並行調用多個 Sub Agents
結果彙整Supervisor 負責合成最終結果

運作流程

def subagents_architecture(task):
    # 1. Supervisor 接收任務
    supervisor_context = {"task": task, "history": []}

    # 2. Supervisor 分解任務並分派
    subtasks = supervisor_agent.plan(task)

    results = []
    for subtask in subtasks:
        # 3. 調用 Sub Agent(可並行)
        result = subagent.execute(
            task=subtask,
            context={}  # 無狀態,每次新鮮開始
        )
        results.append(result)

    # 4. Supervisor 彙整結果
    final = supervisor_agent.synthesize(results)
    return final

優缺點

優點缺點
上下文隔離,Sub Agents 不累積 token bloat每次互動 +1 次 model call(經過 Supervisor)
可平行執行多個 Sub AgentsSub Agents 無記憶,無法記住過往互動
不同團隊可獨立開發 Sub AgentsSupervisor 可能成為效能瓶頸
所有路由決策統一管理

效能數據

場景Model CallsToken 用量說明
單次請求4 次基準+1 次 Supervisor 開銷
重複請求4 次/次基準無累積節省
多領域查詢5 次~9KToken 效率最佳(vs Skills 15K)

適用場景

  • 個人助理(協調日曆、郵件、CRM)
  • 研究系統(分派給領域專家)
  • 複雜編碼任務(多文件修改)
  • 需要平行執行的多領域查詢

實作範例

from langchain.agents import create_supervisor_agent, create_subagent

# Supervisor
supervisor = create_supervisor_agent(
    model="claude-sonnet-4",
    subagents=["researcher", "coder", "reviewer"]
)

# Sub Agents(無狀態)
researcher = create_subagent(
    model="claude-haiku",
    system_prompt="You are a research specialist...",
    tools=[search_tool]
)

# 執行
response = supervisor.invoke({
    "input": "Research quantum computing and write a summary"
})

模式二:Handoffs (對等轉移模式)

也稱:Peer-to-Peer、State-Driven Transitions、Relay。

架構圖

flowchart TD
  U[用戶] --> A[Agent A]
  A -->|handoff| B[Agent B]
  B -->|handoff| C[Agent C]
  B --> U2[用戶]
  C --> U3[用戶]

對等架構:所有 Agents 地位平等,當下只有一位 Agent 活躍。Handoff 時將累積的上下文狀態傳遞給下一位 Agent,活躍的 Agent 可直接與用戶對話。

核心特徵

特徵說明
對等架構所有 Agents 地位平等
狀態轉移Handoff 時傳遞上下文狀態
單一活躍當下只有一位 Agent 活躍
序列執行必須按順序轉移

運作流程

def handoffs_architecture(task):
    # 1. 初始 Agent 接收
    state = {
        "current_agent": "agent_a",
        "context": {"task": task, "history": []},
        "preconditions": {}
    }

    while not is_complete(state):
        # 2. 當前 Agent 處理
        current_agent = get_agent(state["current_agent"])
        result = current_agent.process(state["context"])

        # 3. 決定是否 Handoff
        if result.needs_handoff:
            # 4. 狀態轉移(關鍵:context 保留)
            state["current_agent"] = result.next_agent
            state["context"]["history"].append(result.summary)
            state["preconditions"].update(result.preconditions)
        else:
            state["context"]["history"].append(result)

    return state["context"]["history"]

優缺點

優點缺點
自然對話流,用戶感覺在跟單一系統對話序列執行,無法平行處理多領域查詢
跨 Agent 保留上下文(重複請求節省 40% calls)需要仔細設計狀態持久化
可強制執行前置條件上下文可能越來越大(Token 累積)
Agent 可直接與用戶對話

效能數據

場景Model CallsToken 用量說明
單次請求3 次基準無 Supervisor 開銷
重複請求2 次基準節省 40%(狀態保留)
多領域查詢7+ 次~14K+必須序列執行,效率較低

適用場景

  • 客服流程(分段收集資訊)
  • 多階段對話體驗
  • 需要前置條件的工作流
  • 諮詢→執行→驗證的序列任務

模式三:Router (並行分派模式)

也稱:Parallel Dispatch、Query Decomposition。

架構圖

flowchart TD
  U[用戶] --> R[Router]
  R --> A[Agent A] & B[Agent B] & C[Agent C]
  A & B & C --> SY[Synthesizer]
  SY --> U2[用戶]

查詢分解:Router 將任務拆成多個子查詢,並行分派給專精的 Agents,最後由獨立的 Synthesizer 組件負責彙整結果。每次請求獨立處理,無狀態。

核心特徵

特徵說明
查詢分解Router 將任務分解為子查詢
並行執行多個 Agents 同時處理
結果合成獨立組件負責彙整
無狀態每次請求獨立處理

運作流程

def router_architecture(task):
    # 1. Router 分類/分解查詢
    sub_queries = router.decompose(task)
    # 輸出:[{"domain": "python", "query": "..."}, ...]

    # 2. 並行調用 specialized agents
    results = parallel_map(
        lambda q: get_agent(q["domain"]).execute(q["query"]),
        sub_queries
    )

    # 3. Synthesizer 彙整
    final = synthesizer.combine(results)
    return final

優缺點

優點缺點
多領域查詢平行執行,效率最佳無對話記憶,不適合多輪對話
每個 Agent 獨立上下文每次都需要分類/分解(路由開銷)
無狀態設計,每次請求效能穩定難以處理跨領域依賴
Token 效率高,無累積開銷

效能數據

場景Model CallsToken 用量說明
單次請求3 次基準高效
重複請求3 次基準無累積節省
多領域查詢5 次~9K與 Subagents 並列最佳

適用場景

  • 企業知識庫(多來源查詢)
  • 多垂直客服助理
  • 需要跨來源合成的研究任務
  • 一次性查詢(非對話式)

模式四:Skills (技能加載模式)

也稱:Progressive Disclosure、Quasi-Multi-Agent。

架構圖

flowchart TD
  U[用戶] <--> SA[Single Agent]
  SA -.load.-> K1[Skill A] & K2[Skill B] & K3[Skill C]

本質上是單一 Agent,啟動時只知道 Skill 名稱與描述,按需動態加載專精的 prompt。加載後的 Skill 內容會保留在對話歷史中累積。

核心特徵

特徵說明
單一 Agent本質上是單一 Agent
動態加載按需加載 specialized prompts
上下文累積Skills 加載後保留在對話歷史
輕量級比完整 Multi-Agent 更簡單

運作流程

def skills_architecture(task):
    # 1. Agent 啟動時只知道 Skill 名稱/描述
    agent_context = {
        "skills": [
            {"name": "sql_expert", "description": "SQL query specialist"},
            {"name": "data_viz", "description": "Visualization expert"}
        ]
    }

    # 2. 判斷需要哪個 Skill
    if needs_skill(task, "sql_expert"):
        # 3. 動態加載完整 Skill context
        skill_context = load_skill("sql_expert")
        agent_context["history"].append(skill_context)

    # 4. 執行(上下文已累積)
    return agent.process(task, agent_context)

優缺點

優點缺點
單一 Agent,易於調試Skills 累積在對話歷史(Token 膨脹)
Agent 直接與用戶對話單一 Agent 序列處理,無平行執行
重複請求節省 40% callsSkills 間無明確邊界,無隔離
不同團隊維護不同 Skills

效能數據

場景Model CallsToken 用量說明
單次請求3 次基準高效
重複請求2 次基準節省 40%
多領域查詢3 次~15KToken 累積嚴重(vs Subagents 9K)

決策框架

根據需求選擇模式

你的需求推薦模式
多個獨立領域(日曆、郵件、CRM),需要平行執行Subagents
單一 Agent 有多種專業化,輕量級組合Skills
序列工作流,有狀態轉移,Agent 與用戶全程對話Handoffs
獨立垂直領域,平行查詢多來源並合成結果Router

五維度評估矩陣

模式分布式開發平行執行多跳支援直接用戶互動上下文效率
Subagents⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
Skills⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
Handoffs⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
Router⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

Swarm 架構補充

Swarm 概念來自 OpenAI 早期實驗加上學術研究,強調去中心化協作。

Swarm vs 傳統 Multi-Agent

特徵傳統 Multi-AgentSwarm
控制中心化(Supervisor)或規則驅動去中心化、湧現行為
通訊明確 handoff 或 tool call廣播/共享黑板
決策預定義規則分散式共識
靈活性
可預測性

Swarm 關鍵特徵

  1. 去中心化控制:無 Supervisor,決策分散
  2. 共享黑板:Agents 通過共享工作區協作
  3. 湧現行為:整體行為從局部互動湧現
  4. 動態角色:Agents 可動態切換角色

Swarm 適用場景

  • 開放式探索任務
  • 創意發想/腦力激盪
  • 研究問題(無明確答案)
  • 需要多樣視角的複雜問題

實作建議

何時升級到 Multi-Agent

當單一 Agent 遇到以下限制時,可考慮升級:

  • Context Window 不足 → 上下文隔離:Subagents / Router
  • 團隊協作需求 → 明確邊界:Subagents / Skills
  • 複雜任務分解 → 動態規劃:Subagents
  • 多階段對話 → 狀態轉移:Handoffs
  • 多來源查詢 → 平行執行:Router / Subagents

效能優化建議

優化目標推薦模式
最低延遲(單次請求)Skills / Handoffs / Router
最低 Token 用量(多領域)Subagents(67% 節省 vs Skills)
最佳對話體驗Handoffs / Skills
最佳平行效能Subagents / Router

參考文獻

來源貢獻
Choosing the Right Multi-Agent Architecture四模式分類 + 效能數據
Anthropic — Building Effective AgentsOrchestrator-Workers 模式
arXiv:2604.1807170 個專案分析,Subagent architecture 維度