目前,業(yè)界一般認(rèn)為基于大模型的應(yīng)用集中在兩個方向上:RAG 和 Agent,,無論哪一種應(yīng)用,,設(shè)計、實現(xiàn)和優(yōu)化能夠充分利用大模型(LLM)潛力的應(yīng)用都需要大量的努力和專業(yè)知識,。隨著開發(fā)人員開始創(chuàng)建日益復(fù)雜的LLM應(yīng)用程序,,開發(fā)流程不可避免地變得更加復(fù)雜。這種流程的潛在設(shè)計空間可能是巨大而復(fù)雜的,,《如何構(gòu)建基于大模型的App》一文給出了一種探索中的大模型應(yīng)用開發(fā)基礎(chǔ)框架,,基本可以適用于RAG 和Agent。但是,,對于面向Agent的大模型應(yīng)用開發(fā),,有沒有其獨特之處呢?有沒有聚焦于Agent的大模型應(yīng)用開發(fā)框架呢,? 那么,,什么又是Agent 呢? 1. 什么是Agent這里的Agent 指的是智能體,,可以追溯到明斯基的《society of mind》一書,。在那本書中,明斯基對Agent的定義有點抽象——“社會中某個個體經(jīng)過協(xié)商后可求得問題的解,這個個體就是agent”,。在計算機領(lǐng)域,,agent是一種通過傳感器感知其環(huán)境,并通過執(zhí)行器作用于該環(huán)境的實體,,因此,,可以把實體定義為一種從感知序列到實體動作的映射。一般認(rèn)為,,Agent是指駐留在某一環(huán)境下,,能持續(xù)自主地發(fā)揮作用,具備自主性,、反應(yīng)性,、社會性、主動性等特征的計算實體,。 智能,,是Agent 與環(huán)境相互作用的涌現(xiàn)屬性。 1.1 Agent 的結(jié)構(gòu)與特性Agent 的一般結(jié)構(gòu)如下圖所示: Agent 的主要特性有: ● 自主性(Autonomy) :運行無需人類或其它 Agent 的直接干預(yù),,對其自身行為及內(nèi)部狀態(tài)進(jìn)行某種控制,。 ● 社會性(Social Ability) 能通過某種 通信與其它 Agent(或人類)進(jìn)行交互。交互主要有 三種類型:協(xié)作(Cooperation),、協(xié)調(diào)(Coordination)和協(xié)商 (Negotiation),。 ● 反應(yīng)性(Reactivity):能感知環(huán)境(可以是物理世界,、一個經(jīng)圖形用戶接口連接的用戶、一系列其 它Agent,、Internet 或所有這些的組合),,并能對環(huán)境的變化及時作出反應(yīng)。 ● 主動性(Pro-activeness):不但能對環(huán)境作出反應(yīng),,能夠積極主動地做出使其目標(biāo)得以實現(xiàn)的行為,。 如果嘗試對Agent做一點兒形式化表達(dá),可能是這樣的: 1.2 大模型領(lǐng)域中的Agent在大模型領(lǐng)域,,大模型替代了傳統(tǒng)agent 中的規(guī)則引擎以及知識庫,,Agent提供了并尋求推理、觀察,、批評和驗證的對話通道,。特別是當(dāng)配置了正確的提示和推理設(shè)置時,單個LLM就可以顯示出廣泛的功能 ,,不同配置的Agent之間的對話可以幫助以模塊化并以互補的方式將這些廣泛的LLM功能結(jié)合起來。 開發(fā)人員可以輕松,、快速地創(chuàng)建具有不同角色的Agent,,例如,使用Agent來編寫代碼,、執(zhí)行代碼,、連接人工反饋、驗證輸出等,。通過選擇和配置內(nèi)置功能的子集,,Agent的后端也可以很容易地進(jìn)行擴展,以允許更多的自定義行為,。 2. 什么是Multi-AgentMulti-Agent(多智能體系統(tǒng)) 是指由多個自主個體組成的群體系統(tǒng),,其目標(biāo)是通過個體間的相互信息通信和交互作用。 一般地,,Multi-Agent由一系列相互作用的Agent及其相應(yīng)的組織規(guī)則和信息交互協(xié)議構(gòu)成,,內(nèi)部的各個Agent之間通過相互通信、合作,、競爭等方式,,完成單個Agent不能完成的,大量而又復(fù)雜的工作,,是“系統(tǒng)的系統(tǒng)”,。 2.1 Multi-Agent 的系統(tǒng)分類和特點Multi-Agent 系統(tǒng)(MAS) 主要可以分成以下類別: Multi-Agent系統(tǒng)的主要具有以下的特點:
2.2 大模型領(lǐng)域中的Multi-Agent具體而言,, 在基于大模型的應(yīng)用領(lǐng)域中,當(dāng)復(fù)雜任務(wù)被分解成更簡單的子任務(wù)時,,LLM已經(jīng)被證明了擁有解決復(fù)雜任務(wù)的能力,。Multi-Agent 的通信與協(xié)作可以通過“對話”這一直觀的方式實現(xiàn)這種子任務(wù)的分拆和集成。 為了使基于大模型的Agent適合于Multi-Agent的對話,,每個Agent都可以進(jìn)行對話,,它們可以接收、響應(yīng)和響應(yīng)消息,。當(dāng)配置正確時 ,,Agent可以自動與其他代理進(jìn)行多次對話,或者在某些對話輪次中請求人工輸入,,從而通過人工反饋形成RLHF,。可對話的Agent設(shè)計利用了LLM通過聊天獲取反饋并取得進(jìn)展的強大能力,,還允許以模塊化的方式組合LLM的功能,。 3. 基于大模型的常見Agent 和 Multi-Agent 系統(tǒng)3.1 單Agent 系統(tǒng)基于大模型的常見單Agent 系統(tǒng)包括:
3.2 Multi-Agent 系統(tǒng)基于大模型的常見Multi-Agent 系統(tǒng)包括:
在了解了Agent 和 Multi-Agent 的基本概念以及常見系統(tǒng)之后,,如何開發(fā)一個基于大模型的Agent應(yīng)用呢,?上個月(2023年9月),微軟提出了一個Autogen 的開源框架,,為開發(fā)LLM的Agent 應(yīng)用提供了有價值的參考,。 4. 基于Multi-Agent的LLM 應(yīng)用開發(fā)框架:AutogenAutoGen 是一個用于簡化 LLM 工作流的編排、優(yōu)化和自動化的開發(fā)框架,。它提供了可定制和可對話的Agent,,利用 LLM 的最強功能,如 GPT-4,,同時通過與人和工具集成以及通過自動聊天在多個Agent之間進(jìn)行對話來解決它們的局限性,。 4.1 Autogen 的典型示例Autogen 使用Multi-Agent會話啟用復(fù)雜的基于 LLM 的工作流,典型的示例如下: 左圖代表基于AutoGen生成的可定制Agent,,可以基于LLM,、工具、人,,甚至它們的組合,。右上代表了Agent可以通過對話來解決任務(wù),右下表示Autogen支持許多額外的復(fù)雜對話模式,。 4.2 Autogen 的 一般用法使用 AutoGen,,構(gòu)建一個復(fù)雜的Multi-Agent會話系統(tǒng)可以歸結(jié)為:
這兩個步驟都是模塊化的,,使這些Agent可重用和可組合,。例如,要構(gòu)建一個基于代碼的問答系統(tǒng),,可以設(shè)計Agent及其交互,,這樣的系統(tǒng)可以減少應(yīng)用程序所需的手動交互次數(shù)。一個解決代碼中問題的工作流如下圖所示: commander接收用戶提出的問題,,并與writer和saftguard協(xié)調(diào),。writer編寫代碼并進(jìn)行解釋,tguard確保安全,,commander執(zhí)行代碼,。如果出現(xiàn)問題,該過程可以重復(fù),,直到問題得到解決,。 5. Autogen的核心特性:可定制的AgentAutoGen 中的Agent具有由 LLM、人工,、工具或這些元素混合啟用的功能,。例如:
5.1 助理Agent使用 AutoGen 助理Agent的一種簡單方法是調(diào)用助理Agent和用戶Agent之間的自動聊天,,可以很容易地構(gòu)建一個增強版的 ChatGPT + Code Interpreter + 插件(如下圖所示),該插件具有可定制的自動化能力,,可以在定制環(huán)境中使用,,還可嵌入到更大的系統(tǒng)中。 在上圖中,,助理Agent扮演人工智能助理的角色,,比如必應(yīng)聊天。用戶代理Agent扮演用戶的角色,,并模擬用戶的行為,,例如代碼執(zhí)行。AutoGen 將兩個Agent之間的聊天進(jìn)行自動化處理,,同時允許人工反饋或干預(yù),。用戶Agent無縫地與人類互動,并在適當(dāng)?shù)臅r候使用工具,。 5.2 Multi-Agent 會話以Agent會話為中心的設(shè)計有許多好處,,包括:
AutoGen 支持自動聊天和多樣化的通信模式,,使其易于編排復(fù)雜、動態(tài)的工作流程和實驗的多功能性,,在下圖中,,使用了一個稱為“ GroupChatManager”的特殊Agent來支持多個Agent之間的群組聊天。 GroupChatManager是一個 特殊代理,,它重復(fù)以下三個步驟: 選擇一個演講者(在本例中為 Bob) ,,請演講者做出回應(yīng),,并將選定演講者的信息廣播給所有其他代理。 總而言之,,AutoGen被設(shè)計為構(gòu)建 LLM應(yīng)用程序的通用基礎(chǔ)設(shè)施,。其對話模式幾乎支持現(xiàn)有LLM系統(tǒng)的所有模式類型,在“靜態(tài)”模式下 ,,無論輸入如何,,Agent的拓?fù)浣Y(jié)構(gòu)都保持不變。AutoGen允許靈活的對話模式,,包括可以根據(jù)不同的應(yīng)用程序需求進(jìn)行定制的靜態(tài)和動態(tài)模式,。其Multi-Agent系統(tǒng)可以執(zhí)行LLM生成的代碼,允許在系統(tǒng)執(zhí)行過程中的人員參與,。 6. Autogen 使用示例Autogen 在github上提供了很多有意思的示例,,這里以https://github.com/microsoft/autogen/blob/main/notebook/agentchathumanfeedback.ipynb 為例,簡單介紹一下如何使用Autogen 生成基于Multi-Agent會話的應(yīng)用實例——代碼生成,、執(zhí)行,、調(diào)試和人工反饋的任務(wù)解決。 6.1 環(huán)境設(shè)置AutoGen要求Python 版本大于3.8,,安裝如下:
只需幾行代碼,,您就可以快速實現(xiàn)強大的體驗:
config_list 的參考文件如下: 6.2 助理Agent 和用戶代理Agent 的創(chuàng)建
6.3 執(zhí)行一個任務(wù)調(diào)用用戶Agent的initiate_chat()方法來啟動對話。運行下面的代碼時,,收到助理Agent的消息后,,系統(tǒng)將提示用戶提供反饋。如果用戶沒有提供任何反饋(直接按Enter鍵),,用戶Agent將嘗試代表用心執(zhí)行助理Agent建議的代碼,,當(dāng)助理代理在消息末尾發(fā)送“terminate”信號時則終止。
用戶可以在每個步驟提供反饋,。執(zhí)行的結(jié)果和錯誤消息返回給助手,,助理Agent能夠根據(jù)反饋修改代碼。最后,,任務(wù)完成,,助理Agent發(fā)出“TERMINATE”(終止)信號。用戶最終跳過了反饋,,對話結(jié)束,。 對話結(jié)束后,可以通過autogen.ChatCompletion.logged_history保存兩個Agent之間的對話日志,。
這個示例演示了如何使用AssistantAgent和UserProxyAgent來解決一個具有挑戰(zhàn)性的數(shù)學(xué)問題,。這里的AssistantAgent是一個基于LLM的Agent,它可以編寫Python代碼執(zhí)行用戶的給定任務(wù)。UserProxyAgent是另一個Agent,,它充當(dāng)用戶執(zhí)行AssistantAgent編寫的代碼的代理,。通過正確設(shè)置humaninputmode,UserProxyAgent還可以提示用戶向AssistantAgent提供反饋,。例如,,當(dāng)humaninputmode設(shè)置為“ALWAYS”時,UserProxyAgent將始終提示用戶進(jìn)行反饋,。當(dāng)提供用戶反饋時,,UserProxyAgent將直接將反饋傳遞給AssistantAgent。當(dāng)沒有提供用戶反饋時,,UserProxyAgent將執(zhí)行AssistantAgent編寫的代碼,,并將執(zhí)行結(jié)果(成功或失敗以及相應(yīng)的輸出)返回給AssistantAgent。 7. 小結(jié)Agent 是與大模型主動交互的一種重要程序形式,,而Multi-Agent則是多個Agent利用大模型完成復(fù)雜任務(wù)的系統(tǒng)機制,。微軟的AutoGen 是一個開源的、社區(qū)驅(qū)動,、面向Multi-Agent會話的項目,,還在在積極發(fā)展中。AutoGen 旨在為開發(fā)者提供一個有效且易于使用的框架來構(gòu)建下一代應(yīng)用程序,,并且已經(jīng)展示了構(gòu)建創(chuàng)造性應(yīng)用程序的良好機會,,為創(chuàng)新提供了廣闊的空間。 |
|