


Action(動(dòng)作): ...
Observation:(結(jié)果) ...
... (重復(fù)許多遍)
2.Memory 記憶
智能體應(yīng)該能夠不斷學(xué)習(xí)、有足夠多的知識(shí)供以處理復(fù)雜任務(wù),同時(shí)也需要記住自己執(zhí)行過(guò)的操作并從過(guò)往經(jīng)驗(yàn)中學(xué)習(xí)并反思,因此記憶發(fā)揮著不可或缺的作用。記憶可以定義為用于獲取、存儲(chǔ)、保留和稍后檢索信息的過(guò)程。我們可以簡(jiǎn)單地將記憶分為短期記憶和長(zhǎng)期記憶。
● 短期記憶:所有上下文學(xué)習(xí)都是利用模型的短期記憶來(lái)學(xué)習(xí)。
● 長(zhǎng)期記憶:為智能體提供了長(zhǎng)時(shí)間保留和回憶(無(wú)限)信息的能力,通常通過(guò)利用外部向量存儲(chǔ)和快速檢索(往期文章《RAG在GPTBots的實(shí)踐優(yōu)化》進(jìn)行了詳述)。
GPTBots的AI Bot已經(jīng)支持了短期記憶和長(zhǎng)期記憶的能力。
3.使用工具
在往期文章中我們也提到過(guò),為大語(yǔ)言模型配備外部工具可以顯著擴(kuò)展模型功能。因?yàn)橹焕米陨砟芰?,大語(yǔ)言模型落地應(yīng)用空間有限,同時(shí)也無(wú)法結(jié)合業(yè)務(wù)本身,只有結(jié)合工具,才能更好的鏈接復(fù)雜的任務(wù)目標(biāo),發(fā)揮更大價(jià)值。
ChatGPT插件和OpenAI API功能調(diào)用是大語(yǔ)言模型在實(shí)踐中增強(qiáng)工具使用能力的最佳應(yīng)用,其他大模型廠商也逐步適配了這個(gè)能力。也有如工具增強(qiáng)語(yǔ)言模型(TALM)和ToolFormer等框架對(duì)語(yǔ)言模型進(jìn)行微調(diào)來(lái)提升外部工具使用效果。除此之外,HuggingGPT項(xiàng)目則另辟蹊徑,通過(guò)讓大語(yǔ)言模型充當(dāng)控制器,即ChatGPT使用語(yǔ)言作為通用接口,來(lái)連接和管理現(xiàn)有的AI模型清單,在拆解任務(wù)意圖后按需調(diào)用對(duì)應(yīng)的AI模型,以解決復(fù)雜的AI任務(wù)。
二、多代理對(duì)話Agentbot的構(gòu)建實(shí)踐
在調(diào)研了眾多智能體項(xiàng)目后,我們搭建Agentbot參考并采用了微軟開源的AutoGen框架,允許多代理對(duì)話構(gòu)建LLM應(yīng)用程序、完成復(fù)雜任務(wù)。該框架中,智能體有著可定制的、可對(duì)話的特點(diǎn),對(duì)話中的每個(gè)代理有著特定的能力和角色,具備使用工具能力,開發(fā)人員可以自由擴(kuò)展它們的后端功能,同時(shí)提供人類參與其中的機(jī)制。
我們直接沿用了AutoGen中多代理對(duì)話(Multi-Agent Conversation)的框架設(shè)置,并在其基礎(chǔ)上為實(shí)際應(yīng)用場(chǎng)景進(jìn)行了改造升級(jí)。
正如字面意思,多代理對(duì)話中,可設(shè)置多個(gè)角色共同完成一個(gè)相同的任務(wù)。根據(jù)任務(wù)的復(fù)雜程度,用戶可以自定義每個(gè)代理(Agent)的角色以及需要承擔(dān)的子任務(wù)作為身份提示,然后由多個(gè)代理相互協(xié)作來(lái)完成這項(xiàng)任務(wù)。
(1)管理員
管理員的能力好壞直接影響了多代理是否能夠良好、高效協(xié)作。管理員管理和推動(dòng)著整個(gè)任務(wù)的執(zhí)行進(jìn)度。管理員由大語(yǔ)言模型驅(qū)動(dòng)并提供規(guī)劃和推理能力,它會(huì)根據(jù)Agentbot的任務(wù)以及對(duì)話記錄,推理并指派下一個(gè)代理作為發(fā)言者(speaker)。當(dāng)提出一個(gè)詢問(wèn),管理員便開始工作,根據(jù)多代理對(duì)話中每個(gè)代理角色的定義和能力,選擇下一個(gè)代理;被選擇的代理進(jìn)行回復(fù),管理員則會(huì)再次工作。根據(jù)管理員的每一輪的指派,對(duì)話中被指派的代理進(jìn)行回復(fù),直至達(dá)到任務(wù)完成條件。因此,可以理解為管理員作為“幕后推手”始終貫穿在對(duì)話過(guò)程中,管理員和對(duì)話中的代理是交替進(jìn)行工作的。
管理員除了承擔(dān)指派發(fā)言角色的工作外,還要收/發(fā)所有組成員的消息。管理員具有廣播的功能,即當(dāng)一個(gè)代理需要和其他代理對(duì)話時(shí),只需要將消息發(fā)送給管理員,管理員會(huì)負(fù)責(zé)將該消息廣播給其他所有代理,這樣就完成了不同代理之間的信息共享。
(2)可自定義的代理
在Agentbot多代理對(duì)話的場(chǎng)景下,每個(gè)代理都可以直觀地理解成是一個(gè)獨(dú)立的Bot,每個(gè)Bot由大語(yǔ)言模型驅(qū)動(dòng),擁有不同的角色定義和子任務(wù)目標(biāo)、工具、知識(shí)庫(kù)和記憶。
我們?yōu)槊總€(gè)代理/Bot設(shè)置了兩個(gè)層級(jí)的角色定義:一是這個(gè)Bot作為大語(yǔ)言模型的身份提示,包含了Agentbot的總目標(biāo)和這個(gè)Bot圍繞總目標(biāo)的子任務(wù)目標(biāo);二是這個(gè)Bot在多代理對(duì)話的角色概述,這部分會(huì)傳給管理員,供管理員進(jìn)行發(fā)言者指派時(shí)使用;因此它可以是上述身份提示的簡(jiǎn)化版以節(jié)省token,同時(shí)可以加入任務(wù)所需的潛在的討論順序相關(guān)的提示,例如:“代理A負(fù)責(zé)檢查代理B寫的代碼”可以讓促使管理員在代理B工作寫完代碼后,指派代理A緊接著工作去檢查B寫的代碼。
第一部分中提到,工具使用和記憶是智能體必不可少的能力。
在Agentbot中,每個(gè)代理可設(shè)置不同的工具(插件Plugins),插件的設(shè)置完全符合已有的Bot和FlowBot的使用規(guī)范,通過(guò)API即可完成對(duì)企業(yè)服務(wù)能力和數(shù)據(jù)的調(diào)用。插件的調(diào)用及調(diào)用結(jié)果是在對(duì)話中共享的,因此對(duì)話中的每個(gè)代理都能跟上任務(wù)推進(jìn)的階段,在輪到自己工作的時(shí)候有據(jù)可依。
除了不同的提示詞和插件,決定每個(gè)代理能充分發(fā)揮自己能力的另外一個(gè)因素是它擁有的記憶。因此,Agentbot中的每個(gè)大語(yǔ)言模型驅(qū)動(dòng)的代理都可以配備一個(gè)專有的向量數(shù)據(jù)庫(kù),存儲(chǔ)這個(gè)代理獨(dú)有的知識(shí)和記憶。為了平衡運(yùn)作效果和token消耗,每個(gè)代理可以根據(jù)對(duì)于自身對(duì)于回復(fù)效果對(duì)記憶的依賴程度設(shè)置不同的短記憶、長(zhǎng)記憶Token配置。
不同于插件的設(shè)置,向量數(shù)據(jù)庫(kù)檢索到的知識(shí)和記憶都是代理獨(dú)有的,幫助生成更準(zhǔn)確的回復(fù),檢索的結(jié)果不會(huì)被廣播給其他代理,使得代理間的定位和分工始終清晰、精準(zhǔn),同時(shí)對(duì)話組內(nèi)的信息不至于過(guò)于的冗長(zhǎng)。
有了上述身份提示、知識(shí)庫(kù)、插件、長(zhǎng)短記憶等,每個(gè)角色可以根據(jù)自身的子任務(wù)所需進(jìn)行選擇,并且通過(guò)Prompt編排,得到最適用的編排方式。
(3)一些特殊角色
其中一個(gè)特殊的角色是用戶本身。用戶也可以作為一個(gè)角色參與在整個(gè)多代理對(duì)話中,在適時(shí)的時(shí)候提供人類的輸入,不論是發(fā)出提問(wèn)還是參與討論。用戶參與的時(shí)機(jī)則由管理員進(jìn)行決定。
另外,代碼解釋器(Code Interpreter)對(duì)于很多讀者來(lái)說(shuō)不陌生,它可以根據(jù)用戶的自然語(yǔ)言需求,生成并執(zhí)行代碼解決方案。Agentbot的代碼解釋器作為一種預(yù)置的角色,同樣在數(shù)據(jù)分析、文件處理、圖形繪制等任務(wù)中發(fā)揮重要作用。代碼解釋器除了會(huì)編寫代碼(Python)之外,還需要將寫好的代碼提交到代碼執(zhí)行器中運(yùn)行。代碼及運(yùn)行結(jié)果保存在短記憶中,這樣的設(shè)計(jì)可以讓代碼解釋器在遇到錯(cuò)誤的時(shí)候進(jìn)行自我反思和修正。下圖中展現(xiàn)的例子,執(zhí)行器返回了錯(cuò)誤代碼的報(bào)錯(cuò)信息,負(fù)責(zé)代碼編寫的工程師根據(jù)錯(cuò)誤信息修成了代碼,重新提交并被執(zhí)行器正確運(yùn)行。
這里授予一個(gè)Bot訪問(wèn)本地執(zhí)行代碼會(huì)面臨一些安全性挑戰(zhàn),可嘗試使用為容器之間添加隔離屏障或使用沙盒云環(huán)境的方式解決。
三、結(jié)語(yǔ)
目前,已經(jīng)可以看到許多基于AutoGen多代理對(duì)話框架的各類智能體產(chǎn)物,例如游戲架構(gòu)師、游戲設(shè)計(jì)師、游戲開發(fā)工程師加規(guī)劃師、評(píng)論家的組合利用Python開發(fā)出一款可運(yùn)行的塔防游戲;由研究人員、工程師、編輯、作家和規(guī)劃師組成的垂直領(lǐng)域文章撰寫團(tuán)隊(duì)。我們也在不斷嘗試和優(yōu)化更多Agentbot的使用場(chǎng)景與案例,Agentbot將會(huì)在不久的將來(lái)與大家見面,敬請(qǐng)期待。
Reference:
[1] LLM Powered Autonomous Agents
[2] AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation
熱門文章
相關(guān)文章
極光官方微信公眾號(hào)
關(guān)注我們,即時(shí)獲取最新極光資訊
現(xiàn)在注冊(cè),領(lǐng)取新人大禮包