多代理 (multi-agent) 協作流程設計
協作流程(Orchestration)指的是在你的應用程式中,代理 (Agent) 的執行流程:哪些代理會執行、執行順序為何,以及它們如何決定接下來的動作。主要有兩種協作代理的方式:
- 讓大型語言模型 (LLM) 來做決策:利用 LLM 的智慧來規劃、推理,並根據結果決定下一步行動。
- 透過程式碼協作:用你的程式碼來決定代理的流程。
你可以混合使用這些模式。每種方式都有其優缺點,詳見下文說明。
透過 LLM 協作流程
代理 (Agent) 是配備了指令、工具 (Tools) 和交接 (Handoffs) 的大型語言模型 (LLM)。這代表當給定一個開放式任務時,LLM 可以自主規劃如何處理該任務,利用工具來執行動作與獲取資料,並透過交接將任務委派給子代理 (sub-agents)。例如,一個研究機器人 (research agent) 可以配備以下工具:
- Web Search 工具,用於線上搜尋資訊
- File Search 工具與檔案檢索,搜尋專有資料與連線
- 電腦操作,執行電腦上的動作
- 程式碼執行,進行資料分析
- 交接給專門擅長規劃、報告撰寫等任務的專業代理
當任務是開放式且你希望依賴 LLM 智慧時,這種模式非常適合。這裡最重要的策略包括:
- 投資於良好的提示詞 (prompts)。明確說明有哪些工具可用、如何使用,以及必須遵守的參數。
- 持續監控你的應用程式並不斷調整。觀察問題發生的地方,並針對提示詞進行優化。
- 允許代理自我檢視與改進。例如,讓代理在迴圈中運行並自我批評;或是提供錯誤訊息讓其自我修正。
- 建立專精於單一任務的專業代理,而不是期望一個通用代理能勝任所有任務。
- 投資於 evals。這能讓你訓練代理,持續提升其任務表現。
透過程式碼協作流程
雖然透過 LLM 協作流程非常強大,但透過程式碼協作則能讓任務在速度、成本與效能上更具決定性與可預測性。常見的模式包括:
- 使用 structured outputs 產生結構良好的資料,讓你的程式碼可以進行檢查。例如,你可以要求代理將任務分類,然後根據分類結果選擇下一個代理。
- 串接多個代理,將一個代理的輸出轉換為下一個代理的輸入。你可以將撰寫部落格文章這類任務拆解為一系列步驟——先做研究、再寫大綱、撰寫文章、進行批評,最後再改進。
- 讓執行任務的代理與評估並提供回饋的代理在
while
迴圈中運行,直到評估者認為輸出符合特定標準為止。 - 同時平行運行多個代理,例如透過 Python 的
asyncio.gather
。當你有多個彼此獨立的任務時,這對提升速度很有幫助。
我們在 examples/agent_patterns
中提供了多個範例。