LLM應(yīng)用實(shí)戰(zhàn): OpenAI多代理新作-Swarm

1.背景

本qiang~關(guān)注到OpenAI兩周前發(fā)布的輕量級(jí)多代理框架Swarm,因此想要深入了解了一下,運(yùn)行了官方提供的例子,整理并總結(jié)一些心得體會(huì)~

源碼非常簡(jiǎn)單,各位看官們可以小讀一下,本文采用gpt-4o-mini進(jìn)行驗(yàn)證,如果想免費(fèi)使用gpt-4o-mini,可私信溝通。

Ps: 發(fā)布之后,便在X引起了Swarm涉嫌抄襲,但吃瓜的我還是關(guān)注技術(shù)內(nèi)部本身。

2.簡(jiǎn)介

Swarm項(xiàng)目是一個(gè)輕量級(jí)multi-agent編排框架,當(dāng)前主要是為了實(shí)驗(yàn)及教學(xué),而非用于生產(chǎn)。

Swarm專(zhuān)注于使agent協(xié)調(diào)和運(yùn)行變得輕量級(jí)、高度可控且易于測(cè)試。

有兩個(gè)主要抽象模塊:Agent和handoffs(切換),Agent封裝了instructions和tools,且可以隨時(shí)選擇將對(duì)話(huà)移交給另一個(gè)代理。

3.?適用場(chǎng)景

適用于大量的獨(dú)立功能和指令難以整合到一個(gè)prompt的場(chǎng)景,而是將獨(dú)立功能和指令通過(guò)agent, functions, tools等方式進(jìn)行鏈接。

4.?Swarm核心模塊

4.1 Swarm.run()

類(lèi)似于openai的chat completions api中的create()函數(shù),接收并返回messages,并在調(diào)用之間不保存任何狀態(tài)。注意,該方法也處理Agent函數(shù)執(zhí)行、切換、上下文變量引用,且可以在返回最終輸出前進(jìn)行多輪對(duì)話(huà)。

其核心實(shí)現(xiàn)了如下循環(huán):

(1) 從當(dāng)前Agent調(diào)用模型返回結(jié)果

(2)?執(zhí)行工具調(diào)用并且保存結(jié)果

(3)?必要時(shí)切換代理

(4)?必要時(shí)更新上下文變量

(5) 如果沒(méi)有新的函數(shù)調(diào)用,則返回

該方法執(zhí)行完畢后,會(huì)返回一個(gè)Response,包含所有相關(guān)的更新?tīng)顟B(tài),包括新的messages, 最后被調(diào)用的agent以及最新的上下文變量context_variables。

4.2 Agents

Agent簡(jiǎn)單封裝了一組instructions和functions,且具有將執(zhí)行移交給另一個(gè)agent的能力。這些instructions和functions可用于表示非常具體的工作流程或步驟。

Instructions將被直接轉(zhuǎn)化為一個(gè)對(duì)話(huà)的system提示,任何時(shí)候,只會(huì)存在活躍agent的instructions。

instructions可以是普通的字符串,也可以是返回字符串的函數(shù),該函數(shù)可以選擇一個(gè)context_variables參數(shù),進(jìn)而傳入到swarm.run()中。

Swarm的Agent可以直接調(diào)用python函數(shù),通常function應(yīng)返回一個(gè)str,但也可以是一個(gè)Agent,如果返回Agent的話(huà),則將執(zhí)行轉(zhuǎn)移到該Agent。如果Agent的函數(shù)調(diào)用出現(xiàn)錯(cuò)誤,錯(cuò)誤響應(yīng)會(huì)添加到聊天中,以便Agent可以正?;謴?fù)。如果Agent調(diào)用多個(gè)函數(shù),他們將按順序進(jìn)行。

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

一個(gè)agent可以通過(guò)在function中返回它來(lái)將其移交給另一個(gè)代理。還可以通過(guò)返回更完整的Result對(duì)象來(lái)更新context_variables

5.?實(shí)戰(zhàn)

本次實(shí)戰(zhàn)主要運(yùn)行項(xiàng)目自帶的例子airline。這個(gè)例子能夠很好地說(shuō)明Swarm的運(yùn)行機(jī)理。

5.1?Agent之間的整體交互流程

交互步驟如下:

(1) 首先經(jīng)過(guò)意圖識(shí)別Agent,判斷是處理航班變更還是行李丟失,并分別通過(guò)transfer_to_flight_modification, transfer_to_lost_baggage切換到對(duì)應(yīng)的Agent

(2) 如果是航班變更,則進(jìn)一步判斷是航班取消,還是航班更換,如果是航班取消,通過(guò)transfer_to_flight_cancel切換到”航班取消Agent”進(jìn)行處理,該Agent支持退款、兌換飛行積分、向上級(jí)反饋、問(wèn)題已解決、切換到意圖識(shí)別Agent等5個(gè)方法;如果是航班更換,通過(guò)transfer_to_flight_change切換到”航班更換Agent”,該Agent支持更換有效性驗(yàn)證、更換成功、向上級(jí)反饋、問(wèn)題已解決、切換到意圖識(shí)別Agent等5個(gè)方法。

(3) 如果是行李的相關(guān)問(wèn)題,則切換至”行李丟失Agent”,該Agent包含行李搜尋、向上級(jí)反饋、問(wèn)題已解決、切換到意圖識(shí)別Agent等4個(gè)方法

5.2?實(shí)戰(zhàn)效果

其中User是我的輸出,[2024...]是打印的日志,Triage Agent、Flight Modification Agent、Flight cancel traversal是對(duì)應(yīng)的Agent或方法調(diào)用大模型后返回的結(jié)果。


Starting Swarm CLI??

User:我想要退票

[2024-10-22 09:38:14] Ending turn.

Triage Agent:請(qǐng)問(wèn)您能提供一下您的航班號(hào)以及您希望退票的原因嗎?

User:航班號(hào)是1919,我的時(shí)間有些沖突了

[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:您提到的航班號(hào)是1919。請(qǐng)確認(rèn)您是否確實(shí)是要取消這個(gè)航班。如果是的話(huà),我將繼續(xù)進(jìn)行處理。

User:是的

[2024-10-22 09:38:57] Ending turn.

Flight cancel traversal:請(qǐng)問(wèn)您是希望申請(qǐng)退款還是希望獲得航班積分?

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:您的退款請(qǐng)求已被處理,退款將在3-5個(gè)工作日內(nèi)完成。請(qǐng)您耐心等待。請(qǐng)問(wèn)您還有其他問(wèn)題嗎?

User:沒(méi)有了,謝謝

[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:感謝您的聯(lián)系!如果將來(lái)有任何問(wèn)題,請(qǐng)隨時(shí)與我們聯(lián)系。祝您有美好的一天!

User:


6.總結(jié)

一句話(huà)足矣~

本文主要是OpenAI開(kāi)源multi-agent框架swarm進(jìn)行介紹,包括其核心組件Agent, instructions,functions,多個(gè)Agent之間如何進(jìn)行切換,以及針對(duì)其中的examples進(jìn)行驗(yàn)證,框架及源碼非常簡(jiǎn)單,看官們可以親自嘗試一下。

Multi-agent的適用場(chǎng)景非常豐富,比如客服、工作流處理等

如果想免費(fèi)獲取使用openai的看官,可私信溝通。

7.參考

(1) Swarm倉(cāng)庫(kù): https://github.com/openai/swarm

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容