Vibe Coder

多代理架構設計:讓多個 AI 分工合作

當任務需要不同專業、可以並行處理、或超過單一 Agent 的 context window 時,就該用多 Agent 架構。常見的四種模式是 Orchestrator-Worker、Pipeline、Parallel、Debate,各自適合不同場景,選對模式能讓系統更準確也更快。
多代理架構設計:讓多個 AI 分工合作

多代理架構設計:讓多個 AI 分工合作

讓一個 Agent 同時搜尋資料、寫程式、寄 Email,品質遠不如三個各自專注的 Agent。這一篇帶你看懂為什麼需要多 Agent、四種常見架構模式,以及怎麼用 Python 實作一個真的會並行工作的 Orchestrator。

你將學到什麼

為什麼需要多 Agent

單一 Agent 在哪些情況會表現變差,看三個真實理由。

四種常見模式

Orchestrator-Worker、Pipeline、Parallel、Debate 怎麼選。

任務拆解四原則

獨立、邊界清楚、粒度合適、失敗能重試。

動手實作並行 Agent

用 ThreadPoolExecutor 讓多個 Subagent 同時工作。

為什麼需要多 Agent

單一 Agent 在這些情況表現會變差:

  • 任務需要不同的專業:同時需要搜尋能力、程式能力、寫作能力,單一 Agent 什麼都做,什麼都做得普通。
  • 任務可以並行:研究三個不同主題的報告,單 Agent 依序做要三倍時間,三個 Subagent 並行只要最長的那份時間。
  • 任務超過 context window:分析一萬行程式碼超過 context limit,拆成小塊分給多個 Subagent 分析後整合。

常見的四種多 Agent 模式

模式結構適用場景
Orchestrator-Worker一個 Orchestrator 指揮多個 Worker(Subagent)任務可以拆解成獨立子任務,例如研究報告
Pipeline(流水線)Agent A 的輸出是 Agent B 的輸入,依序執行有明確前後依賴,例如搜尋整理再撰寫
Parallel(並行)多個 Agent 同時執行不相依的子任務需要加速的獨立任務,例如同時分析多個市場
Debate(辯論)多個 Agent 給出不同觀點,再由一個 Agent 綜合需要多角度評估,例如商業決策、風險分析

任務拆解的原則

  • 子任務要獨立:每個 Subagent 不需要等待其他 Subagent 才能開始(除非是 Pipeline 模式)。
  • 邊界要清楚:Subagent 的輸入和輸出格式要明確定義,Orchestrator 知道每個 Subagent 能做什麼、會給什麼。
  • 粒度要合適:子任務不要太大(單一 Agent 做不完)也不要太小(拆解本身的開銷超過收益)。
  • 失敗要能重試:設計讓單個 Subagent 失敗後 Orchestrator 能重試或改用備用策略,整個系統不因一個子任務失敗而崩潰。

用 Anthropic API 實作多 Agent

以下是一個 Orchestrator-Worker 的完整實作,三個 Subagent 並行分析後,由 Orchestrator 用強模型整合結論:

Orchestrator拆解任務、指揮Subagent ASubagent BSubagent C整合結果Orchestrator 彙整回應
Orchestrator-Worker 模式:拆給三個 Subagent 並行處理,再整合回應。
import anthropic
from concurrent.futures import ThreadPoolExecutor

client = anthropic.Anthropic()

def run_subagent(task: str, system: str) -> str:
    """執行一個 Subagent,回傳結果"""
    r = client.messages.create(
        model="claude-haiku-4-5-20251001",  # 子任務用便宜模型
        max_tokens=1000,
        system=system,
        messages=[{"role": "user", "content": task}]
    )
    return r.content[0].text

def orchestrate(main_task: str) -> str:
    # Orchestrator 拆解任務
    subtasks = [
        ("分析優點", "你是商業分析師,專注分析優點"),
        ("分析風險", "你是風險評估師,專注識別風險"),
        ("市場調查", "你是市場研究員,專注市場數據"),
    ]
    # 並行執行所有子任務
    with ThreadPoolExecutor() as pool:
        results = list(pool.map(
            lambda t: run_subagent(f"{main_task}: {t[0]}", t[1]),
            subtasks
        ))
    # Orchestrator 整合結果(用強模型)
    summary = run_subagent(
        f"整合這些分析:{results}",
        "你是策略顧問,整合多方分析給出結論"
    )
    return summary

多 Agent 的常見問題

問題原因解法
Subagent 輸出格式不一致沒有規定輸出格式在 system prompt 裡規定輸出為 JSON,用 Pydantic 驗證
整合結果前後矛盾Subagent 各自獨立沒有共識提供相同的背景資訊給所有 Subagent,或用 Debate 模式讓它們辯論
費用比單 Agent 高很多Orchestrator 的整合步驟用了強模型Subagent 用輕量模型,只有最終整合用強模型
一個 Subagent 失敗整個崩潰沒有錯誤處理每個 Subagent 有例外處理,失敗回傳錯誤訊息讓 Orchestrator 決定要重試還是跳過
並行結果有競態問題Subagent 共享了可變的狀態設計成每個 Subagent 輸入輸出獨立,不共享中間狀態
多 Agent 設計檢查清單每個 Subagent 只做一件事,有清楚的輸入輸出格式;Subagent 用輕量模型,整合和推理用強模型;每個 Subagent 有錯誤處理,失敗不會讓整個系統崩潰;並行的 Subagent 之間沒有共享的可變狀態;有最大迴圈次數和超時設定,防止無限執行。

延伸學習

把這篇文章分享給需要的人FacebookLINEThreadsX

常見問答

什麼情況該改用多 Agent 架構?
任務需要不同專業(例如同時要搜尋、程式、寫作能力)、任務可以並行處理、或任務超過單一 Agent 的 context window 限制,這三種情況用多 Agent 效果會明顯更好。
四種多 Agent 模式怎麼選?
獨立子任務用 Parallel 最快;有明確前後依賴的任務序列用 Pipeline;需要指揮多個獨立子任務用 Orchestrator-Worker;需要多角度評估的決策用 Debate 模式。
多 Agent 架構費用會不會爆炸?
會比單 Agent 高,但可以用模型分層控制:Subagent 用便宜的輕量模型(例如 claude-haiku)處理子任務,只有最終整合步驟用強模型,在品質和費用之間取得平衡。
並行執行的 Subagent 之間會不會互相干擾?
只要每個 Subagent 的輸入輸出完全獨立、不共享中間狀態,就能避免競態問題。設計時讓 Subagent 之間彼此不依賴,是並行架構能安全運作的關鍵。