LLM應用實戰: OpenAI多代理新作-Swarm

mengrennwpu發表於2024-10-22

1.背景

qiang~關注到OpenAI兩週前釋出的輕量級多代理框架Swarm,因此想要深入瞭解了一下,執行了官方提供的例子,整理並總結一些心得體會~

原始碼非常簡單,各位看官們可以小讀一下,本文采用gpt-4o-mini進行驗證,如果想免費使用gpt-4o-mini,可私信溝通。

Ps: 釋出之後,便在X引起了Swarm涉嫌抄襲,但吃瓜的我還是關注技術內部本身。

2.簡介

Swarm專案是一個輕量級multi-agent編排框架,當前主要是為了實驗及教學,而非用於生產

Swarm專注於使agent協調和執行變得輕量級、高度可控且易於測試。

有兩個主要抽象模組:Agenthandoffs(切換)Agent封裝了instructionstools,且可以隨時選擇將對話移交給另一個代理。

3. 適用場景

適用於大量的獨立功能和指令難以整合到一個prompt的場景,而是將獨立功能和指令透過agent, functions, tools等方式進行連結。

4. Swarm核心模組

4.1 Swarm.run()

類似於openaichat completions api中的create()函式,接收並返回messages,並在呼叫之間不儲存任何狀態。注意,該方法也處理Agent函式執行、切換、上下文變數引用,且可以在返回最終輸出前進行多輪對話。

其核心實現瞭如下迴圈:

(1) 從當前Agent呼叫模型返回結果

(2) 執行工具呼叫並且儲存結果

(3) 必要時切換代理

(4) 必要時更新上下文變數

(5) 如果沒有新的函式呼叫,則返回

該方法執行完畢後,會返回一個Response,包含所有相關的更新狀態,包括新的messages, 最後被呼叫的agent以及最新的上下文變數context_variables

4.2 Agents

Agent簡單封裝了一組instructionsfunctions,且具有將執行移交給另一個agent的能力。這些instructionsfunctions可用於表示非常具體的工作流程或步驟。

Instructions將被直接轉化為一個對話的system提示,任何時候,只會存在活躍agentinstructions

instructions可以是普通的字串,也可以是返回字串的函式,該函式可以選擇一個context_variables引數,進而傳入到swarm.run()中。

SwarmAgent可以直接呼叫python函式,通常function應返回一個str,但也可以是一個Agent,如果返回Agent的話,則將執行轉移到該Agent。如果Agent的函式呼叫出現錯誤,錯誤響應會新增到聊天中,以便Agent可以正常恢復。如果Agent呼叫多個函式,他們將按順序進行。

4.3 切換Agent及更新上下文變數

一個agent可以透過在function中返回它來將其移交給另一個代理。還可以透過返回更完整的Result物件來更新context_variables

5. 實戰

本次實戰主要執行專案自帶的例子airline。這個例子能夠很好地說明Swarm的執行機理。

5.1 Agent之間的整體互動流程

互動步驟如下:

  1. 首先經過意圖識別Agent,判斷是處理航班變更還是行李丟失,並分別透過transfer_to_flight_modification, transfer_to_lost_baggage切換到對應的Agent
  2. 如果是航班變更,則進一步判斷是航班取消,還是航班更換,如果是航班取消,透過transfer_to_flight_cancel切換到航班取消Agent進行處理,該Agent支援退款、兌換飛行積分、向上級反饋、問題已解決、切換到意圖識別Agent5個方法;如果是航班更換,透過transfer_to_flight_change切換到航班更換Agent,該Agent支援更換有效性驗證、更換成功、向上級反饋、問題已解決、切換到意圖識別Agent5個方法。
  3. 如果是行李的相關問題,則切換至”行李丟失Agent,該Agent包含行李搜尋、向上級反饋、問題已解決、切換到意圖識別Agent4個方法

5.2 實戰效果

其中User是我的輸出[2024...]是列印的日誌,Triage AgentFlight Modification AgentFlight 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

相關文章