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