
API網(wǎng)關(guān)如何發(fā)展:更輕、更智能、云原生
論文地址:https://arxiv.org/pdf/2310.12823.pdf
Github地址:https://github.com/THUDM/AgentTuning
? ? ? 在ChatGPT帶來了大模型的蓬勃發(fā)展,開源LLM層出不窮,雖然這些開源的LLM在各自任務中表現(xiàn)出色,但是在真實環(huán)境下作為AI Agent仍與商業(yè)模型的效果存在較大差距,比如ChatGPT和GPT-4等。Agent把LLM當做核心控制器來完成任務規(guī)劃、記憶和工具使用等功能,這既需要細粒度的Prompt方法,又需要強大的LLMs來獲得滿意的性能。
現(xiàn)有針對LLM代理能力的研究主要關(guān)注設計提示或構(gòu)建框架來完成某一特定代理任務,而沒有從根本上提升LLM自身的通用Agent能力。許多相關(guān)工作專注于提升LLM在特定方面的能力,這通常以犧牲其通用能力為代價,也降低了其泛化能力。針對上述問題,清華大學與智譜AI提出了AgentTuning方法。
? ? ? ?AgentTuning是一種簡單而通用的方法,既可以增強LLM的Agent能力,有可以同時保持其通用LLM能力。AgentTuning具體方法是首先構(gòu)造一個包含高質(zhì)量交互軌跡的輕量級指令調(diào)優(yōu)數(shù)據(jù)集AgentInstruction,然后采用混合指令微調(diào)策略將AgentInstruction與來自通用領(lǐng)域的開源指令相結(jié)合。AgentTuning對Llama 2系列模型進行指令微調(diào)產(chǎn)生AgentLM。
對于一個代理任務,LLM代理的交互軌跡可以記錄為對話歷史(u1,a1,…,un,an)。考慮到現(xiàn)有的對話模型通常包括兩個角色,用戶和模型,ui表示來自用戶的輸入,ai表示來自的響應模型每個軌跡都有一個最終獎勵r∈[0,1],反映了任務的完成狀態(tài)。
? ? ? ?大語言模型的指令數(shù)據(jù)已經(jīng)廣泛應用于預訓練好的LLM來獲得更好的指令跟隨能力,比如FLAN、InstructGPT模型。然而,收集Agent任務的指令要困難得多,因為它涉及Agent在復雜環(huán)境中的交互軌跡。AgentInstruction數(shù)據(jù)集構(gòu)建有三個主要階段:指令構(gòu)建、軌跡交互和軌跡過濾。整個過程使用GPT-3.5(GPT-3.5-turbo-0613)和GPT4(GPT-4-0613)實現(xiàn)完全自動化,使該方法能夠輕松擴展到新的Agent任務。
? ? ? 作者使用六個現(xiàn)實世界場景相對容易收集指令的Agent任務來構(gòu)建AgentConstruct數(shù)據(jù)集,包括AlfWorld、WebShop、Mind2Web、知識圖、操作系統(tǒng)、數(shù)據(jù)庫。具體請參考如下表所示:
任務派生
? ? ? ?對于常見的Agent任務,可以直接從相似的數(shù)據(jù)集構(gòu)造指令。對于數(shù)據(jù)庫任務,我們需要從BIRD(是一個僅用于SELECT的數(shù)據(jù)庫基準)中構(gòu)建指令。我們運行了兩種類型的任務派生。首先,作者使用問題和每個BIRD子任務中的參考SQL語句來構(gòu)建軌跡。然后,我們使用參考SQL語句查詢數(shù)據(jù)庫來獲取對應的輸出,并將其作為Agent的答案。最后,讓GPT-4結(jié)合上述信息的情況下補充Agent的想法。通過這種方式,可以直接從BIRD數(shù)據(jù)集中生成正確的軌跡。
然而,由于該合成過程決定了交互的輪數(shù)固定為2,然后作者又提出了另一種方法,不是直接生成軌跡,而是通過構(gòu)建指令來提高多樣性。作者把BIRD的問題作為Prompt向GPT-4請求,并收集其與數(shù)據(jù)庫的交互軌跡。收集到軌跡后,執(zhí)行參考SQL語句并將結(jié)果與來自GPT-4的結(jié)果進行比較,過濾掉錯誤的答案,只收集正確的軌跡。
Self-Instruct
對于操作系統(tǒng)任務來說,由于難以在終端執(zhí)行OS命令來獲得指令,因此作者采用了Self-Instruct方法構(gòu)建任務。首先通過Prompt給GPT-4提出一些與操作系統(tǒng)相關(guān)的任務,以及任務說明、參考解決方案和評估腳本。然后,把任務作為Prompt給另一個GPT-4(求解器)并收集其軌跡。在任務完成之后,運行參考解決方案,并與使用評估腳本GPT-4(求解器)生成的結(jié)果進行比較。最后收集兩者相同的軌跡數(shù)據(jù)。對于DB任務,由于BIRD只包含SELECT數(shù)據(jù),我們需要使用Self-Instruct發(fā)光法來構(gòu)造其他數(shù)據(jù)庫操作類型(比如INSERT、UPDATE和DELETE)。
測試數(shù)據(jù)污染風險分析
? ? ? ?值得注意的是,如果GPT-4輸出的指令與測試集中的指令相同,或者如果測試任務是從派生的同一數(shù)據(jù)集構(gòu)建的,那么這兩種方法可能存在測試數(shù)據(jù)污染的風險。作者對其做了污染分析。
? ? ? ?作者采用了基于token的污染分析方法。具體是對訓練數(shù)據(jù)和測試樣本進行分詞,然后匹配10-gram,最多允許4個不匹配。如果10-gram在訓練數(shù)據(jù)和測試數(shù)據(jù)都包括,那么這個10-gram被認為是污染了。作者將評估樣本的污染率定義為該樣本的token污染率。如果評估樣本的污染率大于80%,我們將其定義為“dirty”,如果其污染率低于20%,則為“clean”。具體如下表所示:
? ? ? ?在構(gòu)建了初始指令后,作者使用GPT-4(GPT-4-0613)作為軌跡交互的代理。對于Mind2Web任務,由于大量的指令和預算限制,作者部分使用ChatGPT(gpt-3.5-turbo-0613)進行相互作用。
由于代理任務對輸出格式的嚴格要求,作者采用了1-shot評估方法。對于每項任務,針對訓練數(shù)據(jù)集都生成一個完整的交互過程。
交互過程
交互過程有兩個主要部分:首先,給模型一個任務描述和一個成功的1-shot實例,然后,開始實際的交互。給模型提供當前的指令和必要的信息。模型會基于這些信息和先前的反饋會形成一個想法和一個動作。然后環(huán)境提供反饋,包括可能的更改或新信息。此循環(huán)會持續(xù)到模型達到其目標或達到其令牌限制。如果模型連續(xù)三次重復相同的輸出,認為這是一次反復的失敗。如果模型的輸出格式錯誤,我們使用BLEU度量進行比較所有可能的動作選擇,并選擇最接近的匹配項作為該步驟的模型動作。
CoT比率
? ? ? 思維鏈推理方法可以顯著增強LLM逐步推理的推理能力。作者采用ReAct作為推理框架,會輸出CoT每個步驟的解釋(簡稱thought),直到完成最終的動作。因此,所收集的交互軌跡伴隨著詳細的軌跡細節(jié),使模型能夠?qū)W習引導行動的推理過程。對于不使用thought而使用任務推導生成的軌跡,作者使用GPT-4來補充thought,以與ReAct Prompting保持一致。
? ? ? ?為了確保數(shù)據(jù)質(zhì)量,需要嚴格過濾其相互作用軌跡。由于每個互動軌跡都會得到一個獎勵r,可以基于獎勵r自動選擇高質(zhì)量的軌跡。根據(jù)最終獎勵r=1可以過濾除Mind2Web外的所有任務的軌跡。然而,由于Mind2Web任務相對較難,我們使用r≥2/3確保可以獲得足夠數(shù)量的軌跡。在表2中,我們展示了7B模型在過濾與不過濾軌跡上進行微調(diào)的效果對比。
經(jīng)過上述步驟過濾之后,最終AgentInstruction數(shù)據(jù)集得到1866條數(shù)據(jù)。
? ? ? 最近的研究表明,使用多樣化的用戶Prompt訓練模型可以提高模型的性能。作者從ShareGPT數(shù)據(jù)集(https://huggingface.co/datasets/anon8231489123/ShareGPT_Vicuna_unfiltered)選擇了57096個GPT-3.5會話和3670個GPT-4會話。從GPT-4回復的高質(zhì)量數(shù)據(jù)中按照采樣率為1:4抽取GPT-4和GPT-3.5的樣本。
從下表5可以看出,Agent任務數(shù)據(jù)和通用數(shù)據(jù)混合訓練才能在agent任務和通用領(lǐng)域都表現(xiàn)良好,因此混合訓練主要優(yōu)化如下loss:
PS:通過調(diào)整不同的η,發(fā)現(xiàn)η = 0.2時held-out任務的效果是最好的。
? ? ? 作者選擇開源Llama 2(Llama-2-{7,13,70}b-chat)作為基礎模型。參考Vicuna,作者將所有數(shù)據(jù)標準化為多輪聊天機器人風格的格式,這樣可以很方便地混合不同來源的數(shù)據(jù)。作者使用Megatron-LM微調(diào)Llama 2?7B、13B和70B的模型,并且在微調(diào)過程中,只計算模型輸出的損失。
為了訓練高效,作者使用了tensor并行和pipeline并行。訓練詳細超參數(shù)見下表6所示:
Held-in/out任務:評估的任務如下表3所示:
通用任務:為了全面評估模型的總體能力,作者選擇了常用的4個任務,分別是反映了模型的知識能力(MMLU),數(shù)學能力(GSM8K),編碼能力(Humaneval)和人類偏好(MT Bench)。
baseline:從下圖1可以看出,基于api的商業(yè)模型明顯超過了開源模型在代理任務中的表現(xiàn)。因此,作者選擇了GPT-3.5(GPT-3.5-turbo-0613)以及GPT-4(GPT-4-0613)作為Agent。因其卓越的指令跟隨能力,選擇評估開源的Llama 2聊天版本(Llama-2-{7,13,70}b-chat)。參考AgentBench,作者也截斷了超過模型長度限制的對話歷史,并且使用貪婪解碼。對于WebArena,我們采用核采樣,p=0.9進行探索。
總體分數(shù)計算:任務難度的差異可能導致直接計算平均分有失公允,因此對每個任務的得分進行歸一化,并將其縮放到1的平均值以實現(xiàn)平衡基準評估。任務權(quán)重如下表3所示:
從表4可以看出,AgentLM展示了Llama 2系列不同大小模型在held-in任務和held-out任務中都有顯著改進,同時保持通用任務的性能。held-in任務的改進比held-out任務更明顯,但是held-out任務的提升仍然達到至170%。這證明了AgentLM模型作為一般代理的潛力。在若干任務中,AgentLM的13B和70B版本甚至超過了GPT-4。
對于大多數(shù)held-in任務,Llama 2的性能幾乎為零,這表明Llama 2完全無法處理這些任務。然而,AgentLM的基本錯誤明顯較少,這表明該方法有效地激活了模型的Agent能力。值得注意的是,70BAgentLM的總體性能接近GPT-4。
在held-out任務中,70B AgentLM的性能接近GPT-3.5,70B模型和7B模型分別都有176%和76%的提升。這是因為更大的模型具有更強的泛化能力能力,在相同的訓練數(shù)據(jù)上有更好的泛化性。
? ? ? 在通用任務上,AgentLM在四個維度(知識,數(shù)學、編碼和人類偏好)上的表現(xiàn)與Llama 2不相上下。這充分表明,即使增強了Agent能力,AgentLM模型也能保持相同的通用能力。
? ? ? 為了深入研究錯誤分析,作者從held-in任務集中選擇了三個任務(ALFWorld、WebShop、KG),并使用基于規(guī)則的方法識別常見錯誤類型,例如無效動作和重復生成。結(jié)果如圖3(a)所示:
? ?總的來說,Llama2會出現(xiàn)如重復生成和采取無效行動的基本錯誤,相比之下,GPT-3.5尤其是GPT-4產(chǎn)生這種錯誤更少。然而,AgentLM顯著減少了這些基本錯誤。作者推測,雖然Llama 2 chat模型本身具有Agent能力,但其較差,可能是由于缺乏對Agent數(shù)據(jù)對齊訓練;AgentTuning有效的激活了其Agent潛力。
[1]?https://arxiv.org/pdf/2310.12823.pdf
文章轉(zhuǎn)自微信公眾號@ArronAI