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