CMU副教授:在多智能體流行的當(dāng)下,不要忽視單智能體系統(tǒng)
最近,「多智能體系統(tǒng)」是人工智能領(lǐng)域最熱門的流行詞之一,也是開源框架 MetaGPT 、 Autogen 等研究的焦點(diǎn)。
但是,多智能體系統(tǒng)就一定是完美的嗎
近日,來自卡內(nèi)基梅隆大學(xué)的副教授 Graham Neubig 在文章《Don't Sleep on Single-agent Systems》中強(qiáng)調(diào)了單智能體系統(tǒng)也不可忽視。
Graham Neubig 從以下幾個(gè)方面展開:
- 當(dāng)代 AI 智能體發(fā)展的元素,包括大語言模型、提示以及動(dòng)作空間;
- 多智能體系統(tǒng)示例;
- 多智能體系統(tǒng)存在的問題;
- 如何從使用多個(gè)專門的智能體過渡到一個(gè)強(qiáng)大的智能體,以及一些需要解決的問題。
CMU 機(jī)器學(xué)習(xí)和計(jì)算機(jī)系助理教授陳天奇對(duì)這項(xiàng)研究進(jìn)行了轉(zhuǎn)發(fā)并評(píng)論:「這是一篇關(guān)于如何讓單智能體系統(tǒng)更強(qiáng)大的深刻見解,對(duì)機(jī)器學(xué)習(xí)系統(tǒng)也有很好的啟示。提示前綴緩存將成為與其他一般推理優(yōu)化技術(shù)相互作用的一項(xiàng)關(guān)鍵技術(shù)」。
基于 LLM 的智能體
大多數(shù)智能體都是基于大語言模型構(gòu)建的,如 Anthropic 的 Claude 或 OpenAI 的語言模型。但語言模型不足以構(gòu)建一個(gè)出色的智能體,構(gòu)建一個(gè)智能體至少需要三個(gè)組件:
- 大語言模型 LLM;
- 提示:可以是用于指定模型一般行為的系統(tǒng)提示,或者從智能體周圍環(huán)境中提取的信息類型;
- 動(dòng)作空間:上述兩項(xiàng)是研究者提供給 LLM 的輔助工具,以便智能體在真實(shí)世界中產(chǎn)生動(dòng)作。
一般來說,當(dāng)涉及多智能體系統(tǒng)時(shí),至少要改變這三個(gè)組成部分中的其中一個(gè)。
多智能體示例
假設(shè)你正在構(gòu)建一名 AI 軟件開發(fā)助手,這里作者以 CodeR 為例,這是一個(gè)用于 AI 軟件開發(fā)的多智能體框架。它包括多個(gè)智能體,所有智能體都使用相同的底層 LM,但提示和動(dòng)作空間各不相同:
- 管理器(Manager):該智能體的提示指定它應(yīng)該為其他智能體編寫一個(gè)規(guī)劃來執(zhí)行,以及輸出規(guī)劃的動(dòng)作空間;
- 復(fù)現(xiàn)器(reproducer):該智能體有一個(gè)提示,告訴它重現(xiàn)該問題,以及一個(gè)將代碼寫入重現(xiàn)錯(cuò)誤文件 reduce.py 的動(dòng)作空間;
- 故障定位器(Fault Localizer):該智能體有一個(gè)提示,告訴它找到導(dǎo)致錯(cuò)誤的文件,以及一個(gè)使用軟件工程工具進(jìn)行故障定位和列出文件以供以后使用的動(dòng)作空間;
- 編輯器(Editor):該智能體有一個(gè)提示,用于接收復(fù)現(xiàn)器和故障定位器的結(jié)果,并有一個(gè)動(dòng)作空間,允許它對(duì)文件進(jìn)行編輯;
- 驗(yàn)證器(Verifier):此智能體具有提示,可接收其他智能體的結(jié)果,以及輸出問題是否已解決的動(dòng)作空間。
這是構(gòu)建一個(gè)系統(tǒng)時(shí)所需要的結(jié)構(gòu),但是在構(gòu)建這樣的系統(tǒng)時(shí)存在一些困難。
多智能體系統(tǒng)存在的一些問題
在構(gòu)建多智能體系統(tǒng)時(shí),你可能會(huì)遇到許多問題,比如:
獲得正確的結(jié)構(gòu):多智能體系統(tǒng)通過添加結(jié)構(gòu)來解決問題。當(dāng)智能體面臨的問題與指定的結(jié)構(gòu)完全匹配時(shí),效果會(huì)很好,但問題是如果不匹配怎么辦?
上下文信息的傳遞:多智能體系統(tǒng)通常在多個(gè)智能體之間傳遞信息,但這可能是信息丟失的原因。例如,如果故障定位器僅將其摘要信息傳遞給其他智能體,則通常會(huì)導(dǎo)致重要的上下文信息丟失,而這些信息可能對(duì)下游智能體有用。
可維護(hù)性:最后,這些智能體通常都有自己獨(dú)立的代碼庫(kù),或者至少有獨(dú)立的提示。因此,多智能體系統(tǒng)可能擁有更大、更復(fù)雜的代碼庫(kù)。
有趣的是,很多這些挑戰(zhàn)也適用于人類組織!我們都有過這樣的經(jīng)歷:團(tuán)隊(duì)組織混亂,溝通不暢,或者當(dāng)某個(gè)成員離開時(shí),無法維持必要的技能。
如何打造出色的單智能體系統(tǒng)
人們?yōu)槭裁匆蛟於嘀悄荏w系統(tǒng)?一個(gè)需要說明的重要原因是:專用于特定任務(wù)的智能體的表現(xiàn)通常很好,只要有合適的結(jié)構(gòu)和工具,它們就能很好地完成相應(yīng)的任務(wù)。
單智能體有能力競(jìng)爭(zhēng)嗎?
可能比我們預(yù)想的還更容易一些,作者表示這里已經(jīng)有一個(gè)很好的原型:https://github.com/All-Hands-AI/OpenHands/tree/main/agenthub/codeact_agent
下面我們就來看看,要打造出優(yōu)秀的單 LLM、單動(dòng)作空間和單提示工程技術(shù),需要些什么。
單 LLM:這是相對(duì)比較容易的部分。近段時(shí)間已經(jīng)出現(xiàn)了一些表現(xiàn)出色的通用 LLM,包括 Claude 和 GPT-4o 等閉源模型以及 Llama 和 Qwen 等開源模型。雖說這些模型也不是萬能的,但它們也確實(shí)能完成多種多樣的任務(wù)。就算它們?nèi)狈δ硞€(gè)功能,也可以通過持續(xù)訓(xùn)練來增添,同時(shí)不會(huì)對(duì)其它功能產(chǎn)生太大影響。
單動(dòng)作空間:這也不難。如果我們有多個(gè)使用不同工具的智能體,那么我們可以 (1) 為模型提供相對(duì)通用的工具,以幫助它們解決問題;(2) 如果不同的智能體有不同的工具組合,則可以將他們連接起來。比如,在 OpenHands 中,可以向智能體提供寫代碼、運(yùn)行代碼和執(zhí)行網(wǎng)絡(luò)瀏覽的工具。這樣的通用方法可讓模型使用為人類開發(fā)者開發(fā)的軟件工具,從而增多它們的功能,做到其它多智能體能做到的事。
單提示工程技術(shù):這是比較困難的地方!我們需要確保智能體在如何解決任務(wù)上獲得正確的指示,同時(shí)從其環(huán)境中獲得正確的信息。
下面給出了兩個(gè)選擇:
- 將所有提示詞連接起來使用:如果我們有一個(gè)多智能體系統(tǒng),要使用 10 個(gè)不同的提示詞,那么為什么不將它們連接組合到一起呢?近期的長(zhǎng)下文模型已經(jīng)有能力處理多達(dá)幾十萬 token 了,比如 Cluade 能處理 20 萬 token,而 Llama 是 12.8 萬。OpenHands 也使用了此方法。但這種方法也有一些缺點(diǎn)。首先是成本,更長(zhǎng)的提示詞需要更多金錢和時(shí)間,不過現(xiàn)在有一些技術(shù)(比如 Anthropic 的提示詞緩存技術(shù))可以降低其成本。這種方法的另一個(gè)缺點(diǎn)是,如果提示詞太多,則 LLM 可能無法關(guān)注到重點(diǎn),但隨著模型能力提升,LLM 在確定長(zhǎng)上下文中的重要信息方面越來越強(qiáng)了。
- 檢索增強(qiáng)式提示:另一種可能的選擇是使用檢索。如同檢索增強(qiáng)式生成(RAG)系統(tǒng)一樣,可以出于效率或準(zhǔn)確度的目的對(duì)長(zhǎng)上下文進(jìn)行裁剪。在選擇提供 LLM 的示例方面,這里有一些研究進(jìn)展:https://arxiv.org/abs/2209.11755
總結(jié)
本文并不是說多智能體就沒有用武之地了。比如在一個(gè)智能體可以訪問專有信息,而另一個(gè)智能體則代表了另一個(gè)人的情況下,多智能體系統(tǒng)肯定大有作為!
本文的目的是批判性地思考讓系統(tǒng)更加復(fù)雜這一趨勢(shì)。有時(shí)候簡(jiǎn)單就是最好的 —— 有強(qiáng)大的模型、強(qiáng)大的工具和多種多樣的提示詞就足夠了。