LLM應用實戰: OpenAI多代理新作-Swarm
1.背景
本qiang~關注到OpenAI兩周前發布的輕量級多代理框架Swarm,因此想要深入了解了一下,運行了官方提供的例子,整理并總結一些心得體會~
源碼非常簡單,各位看官們可以小讀一下,本文采用gpt-4o-mini進行驗證,如果想免費使用gpt-4o-mini,可私信溝通。
Ps: 發布之后,便在X引起了Swarm涉嫌抄襲,但吃瓜的我還是關注技術內部本身。
2.簡介
Swarm項目是一個輕量級multi-agent編排框架,當前主要是為了實驗及教學,而非用于生產。
Swarm專注于使agent協調和運行變得輕量級、高度可控且易于測試。
有兩個主要抽象模塊:Agent和handoffs(切換),Agent封裝了instructions和tools,且可以隨時選擇將對話移交給另一個代理。
3. 適用場景
適用于大量的獨立功能和指令難以整合到一個prompt的場景,而是將獨立功能和指令通過agent, functions, tools等方式進行鏈接。
4. Swarm核心模塊
4.1 Swarm.run()
類似于openai的chat completions api中的create()函數,接收并返回messages,并在調用之間不保存任何狀態。注意,該方法也處理Agent函數執行、切換、上下文變量引用,且可以在返回最終輸出前進行多輪對話。
其核心實現了如下循環:
(1) 從當前Agent調用模型返回結果
(2) 執行工具調用并且保存結果
(3) 必要時切換代理
(4) 必要時更新上下文變量
(5) 如果沒有新的函數調用,則返回
該方法執行完畢后,會返回一個Response,包含所有相關的更新狀態,包括新的messages, 最后被調用的agent以及最新的上下文變量context_variables。
4.2 Agents
Agent簡單封裝了一組instructions和functions,且具有將執行移交給另一個agent的能力。這些instructions和functions可用于表示非常具體的工作流程或步驟。
Instructions將被直接轉化為一個對話的system提示,任何時候,只會存在活躍agent的instructions。
instructions可以是普通的字符串,也可以是返回字符串的函數,該函數可以選擇一個context_variables參數,進而傳入到swarm.run()中。
Swarm的Agent可以直接調用python函數,通常function應返回一個str,但也可以是一個Agent,如果返回Agent的話,則將執行轉移到該Agent。如果Agent的函數調用出現錯誤,錯誤響應會添加到聊天中,以便Agent可以正常恢復。如果Agent調用多個函數,他們將按順序進行。
4.3 切換Agent及更新上下文變量
一個agent可以通過在function中返回它來將其移交給另一個代理。還可以通過返回更完整的Result對象來更新context_variables
5. 實戰
本次實戰主要運行項目自帶的例子airline。這個例子能夠很好地說明Swarm的運行機理。
5.1 Agent之間的整體交互流程

交互步驟如下:
- 首先經過意圖識別Agent,判斷是處理航班變更還是行李丟失,并分別通過transfer_to_flight_modification, transfer_to_lost_baggage切換到對應的Agent
- 如果是航班變更,則進一步判斷是航班取消,還是航班更換,如果是航班取消,通過transfer_to_flight_cancel切換到”航班取消Agent”進行處理,該Agent支持退款、兌換飛行積分、向上級反饋、問題已解決、切換到意圖識別Agent等5個方法;如果是航班更換,通過transfer_to_flight_change切換到”航班更換Agent”,該Agent支持更換有效性驗證、更換成功、向上級反饋、問題已解決、切換到意圖識別Agent等5個方法。
- 如果是行李的相關問題,則切換至”行李丟失Agent”,該Agent包含行李搜尋、向上級反饋、問題已解決、切換到意圖識別Agent等4個方法
5.2 實戰效果
其中User是我的輸出,[2024...]是打印的日志,Triage Agent、Flight Modification Agent、Flight cancel traversal是對應的Agent或方法?調用大模型后返回的結果。
|
Starting Swarm CLI ?? User: 我想要退票 [2024-10-22 09:38:14] Ending turn. Triage Agent: 請問您能提供一下您的航班號以及您希望退票的原因嗎? User: 航班號是1919,我的時間有些沖突了 [2024-10-22 09:38:48] Processing tool call: transfer_to_flight_modification with arguments {} [2024-10-22 09:38:49] Processing tool call: transfer_to_flight_cancel with arguments {} [2024-10-22 09:38:50] Ending turn. Triage Agent: transfer_to_flight_modification() Flight Modification Agent: transfer_to_flight_cancel() Flight cancel traversal: 您提到的航班號是1919。請確認您是否確實是要取消這個航班。如果是的話,我將繼續進行處理。 User: 是的 [2024-10-22 09:38:57] Ending turn. Flight cancel traversal: 請問您是希望申請退款還是希望獲得航班積分? User: 退款吧 [2024-10-22 09:39:05] Processing tool call: initiate_refund with arguments {} [2024-10-22 09:39:06] Ending turn. Flight cancel traversal: initiate_refund() Flight cancel traversal: 您的退款請求已被處理,退款將在3-5個工作日內完成。請您耐心等待。請問您還有其他問題嗎? User: 沒有了,謝謝 [2024-10-22 09:39:16] Processing tool call: case_resolved with arguments {} [2024-10-22 09:39:20] Ending turn. Flight cancel traversal: case_resolved() Flight cancel traversal: 感謝您的聯系!如果將來有任何問題,請隨時與我們聯系。祝您有美好的一天! User: |
6.總結
一句話足矣~
本文主要是OpenAI開源multi-agent框架swarm進行介紹,包括其核心組件Agent, instructions,functions,多個Agent之間如何進行切換,以及針對其中的examples進行驗證,框架及源碼非常簡單,看官們可以親自嘗試一下。
Multi-agent的適用場景非常豐富,比如客服、工作流處理等
如果想免費獲取使用openai的看官,可私信溝通。
7.參考
(1) Swarm倉庫: https://github.com/openai/swarm


本文主要是OpenAI開源multi-agent框架swarm進行介紹,包括其核心組件Agent, instructions,functions,多個Agent之間如何進行切換,以及針對其中的examples進行驗證,框架及源碼非常簡單,看官們可以親自嘗試一下。
浙公網安備 33010602011771號