Hugging Face Transformers 代碼代理 GAIA 基準測試結果
Hugging Face Transformers 代碼代理 GAIA 基準測試結果
Hugging Face 開發了一個使用 transformers.agents 套件(現已演進為 smolagents 套件)的代碼代理,在 GAIA 基準測試中取得了最高排名,該基準是 AI 代理最具挑戰性的測試之一。系統展示了讓代理透過 Python 程式碼而非 JSON 資料塊來表達行動,能顯著提升效率、降低 token 成本,並增強代理處理複雜多步驟軌跡的能力。
GAIA 基準測試挑戰
GAIA 設計用來測試代理在需要高階規劃與嚴謹執行的任務。典型的 GAIA 問題可能需要多模態能力(閱讀影像)、從網路蒐集分散的資訊,並遵守嚴格的輸出限制。這類任務常需串聯步驟,後續資訊依賴先前的發現,凸顯大型語言模型在規劃與執行上常見的困難。
代碼式行動的優勢
與使用類似字典的 JSON 輸出不同,Hugging Face 代理採用「代碼代理」方式,將行動以 Python 程式碼的形式制定與執行。此方法提供了多項技術優勢:
- 簡潔與效率: 程式碼是表達複雜序列的更佳優化方式。例如,平行的行動串流可在單一程式碼步驟中處理,而非多個 JSON 資料塊。研究顯示,代碼行動所需步驟比 JSON 少約 30%,可減少產生的 token 並降低運營成本。
- 直觀的變數管理: 程式碼允許代理將工具輸出儲存為具名變數(例如
rock_image = image_generation_tool("A picture of a rock")),相較於 JSON 中需要的複雜命名技巧,讓 LLM 在後續步驟中更容易引用這些輸出。 - 模型流暢度: 由於大型語言模型在大量程式碼上進行訓練,它們往往在撰寫程式碼方面比撰寫 JSON 更為流暢。
安全代碼執行實作
為了降低執行 LLM 產生程式碼的風險,Hugging Face 從頭開始使用 ast(抽象語法樹)模組實作了一個安全的 Python 直譯器。直譯器採用「白名單」方式,而非「黑名單」方式(禁止特定行動):
- 基於 AST 的執行: 直譯器逐一執行樹節點,若遇到未明確授權的操作即停止。
- 授權的匯入: 僅執行在
authorized_imports清單中明確列出的匯入;包括print、range等標準函式,而像open這類危險函式則預設被禁止。 - 安全防護: 系統限制操作次數以防止無限迴圈,並限制印出內容的行數,避免 LLM 的上下文視窗被大量垃圾資料淹沒。
多代理協調與規劃
系統採用多代理架構來管理上下文並降低噪音,尤其在網頁瀏覽時:
協調結構
- 管理代理: 一個
ReactCodeAgent,負責高階任務解決,並可存取file_inspector、visualizer與search_agent。 - 搜尋代理: 一個以 JSON 為基礎的代理,作為管理代理的工具封裝。它處理順序式的網頁瀏覽任務(使用
informational_web_search、page_down、find_in_page等工具),僅將相關資訊回傳給管理代理,以避免上下文被雜訊佔滿。
規劃工作流程
代理採用「前置規劃」工作流程,即每 N 步會產生已知與所需事實的摘要以及逐步計畫。
- 調整: 管理代理每 2 步(N=2)更新一次計畫,而搜尋代理每 5 步(N=5)更新一次。
- 上下文最佳化: Hugging Face 發現,從提示中省略先前的計畫版本可提升分數,因為這可防止 LLM 偏向過時的計畫,並鼓勵重新評估方法。
效能結果
在未進行微調的情況下使用 GPT-4o,代理在 GAIA 基準測試上取得以下結果:
- 驗證集: 44.2%,整體排名第一。
- 測試集: 33.3%,整體排名第二,優於 Microsoft Autogen 的提交。
- 第 3 級問題: 代理在最困難的「硬核」第 3 級問題上取得最高平均分數。
未來改進方向
Hugging Face 確認了多條進一步優化的路徑:
- LLM 引擎: 探索微調的開源模型以降低解析錯誤。
- 協調: 朝更無縫的多代理協調方向前進。
- 網路工具: 整合
selenium套件以處理 JavaScript 與 cookie 橫幅。 - 規劃: 測試當前文獻中的替代規劃策略。