Hugging Face CodeAgents + 結構化:透過結構化生成提升代理可靠性

Hugging Face 推出了一種方法,透過結合程式碼行動的表達力與結構化生成的可靠性,以提升 AI 代理的可靠性。透過強制 CodeAgents 同時在結構化 JSON 內生成內部推理(thoughts)與可執行的 Python 程式碼,代理在多項基準測試中的成功率顯著高於傳統工具呼叫或標準程式碼生成方法。

代理行動的演變

  • Traditional JSON Agents:這類代理從預先定義的工具中選擇並產生 JSON 格式的呼叫。雖然可靠,但缺乏可組合性,且僅限於一套僵硬的預定動作,導致在需要跨多次呼叫管理中間狀態的任務上表現不佳。
  • Code Agents:這類代理直接撰寫可執行的 Python 程式碼,允許在迴圈、函式與條件語句中呼叫工具。這提供了無限的彈性與維持狀態的能力,但從 markdown 區塊解析產生的程式碼可能容易出錯。
  • Structured CodeAgents:此方法強制產生包含 thoughts 欄位(用於推理)與 code 欄位(用於執行)的 JSON 物件。它結合了結構化解析的可靠性與 Python 程式碼的完整表達力。

基準測試結果與效能提升

在包括 GAIA、MATH、SimpleQA 與 Frames 等基準測試中,結合程式碼行動與結構化生成的方式持續提升具備能力模型的效能。平均而言,結構化方法較一般 CodeAgents 提升了 2 至 7 個百分點。

各模型族群的主要觀察包括:

  • OpenAI models:顯示出最大的提升,尤其在需要大量推理的任務上。
  • Claude models:表現強勁,其中 Claude 3.7 Sonnet 表現尤為出色。
  • Qwen models:整體上有所提升,儘管較小的模型開始出現「結構稅」的情況。

為何結構化生成提升成功率

消除解析問題

在基於 markdown 的程式碼抽取中,解析錯誤常導致代理失敗。對 15,724 筆代理追蹤的分析顯示,有 2.4% 的追蹤在首次呼叫時出現解析錯誤。此類錯誤的影響相當嚴重:

  • 未發生解析錯誤的追蹤:成功率 51.3%。
  • 發生解析錯誤的追蹤:成功率 42.3%。

未發生解析錯誤的代理追蹤成功率比發生錯誤的高出 21.3%。此外,解析錯誤使解決問題的平均步驟數從 3.18 增加至 4.63。

強制推理過程

透過要求 thoughts 欄位,代理必須在執行程式碼前闡述其推理。這促成更系統化的規劃,並使代理能在過程早期捕捉邏輯錯誤。

「結構稅」與模型能力

結構化生成並非對所有情況皆有益。模型必須具備足夠的指令遵循能力與 JSON 預訓練,才能應付其認知負荷,這形成了一個能力門檻。

較小的模型(例如 mistralai/Mistral-7B-Instruct-v0.3)可能會受到「結構稅」的影響,因同時維持 JSON 語法與撰寫 Python 程式碼的負擔,導致程式碼語法破損(例如字串格式錯誤或多餘的逗號),進而立即產生 SyntaxError 失敗。

實作與使用方式

對於使用 smolagents 函式庫的使用者,可在初始化 CodeAgent 時將 use_structured_outputs_internally=True 設定為啟用結構化輸出。

推薦使用情境

在以下情況使用結構化 CodeAgents:

  • 使用具備能力的模型(前沿模型或參數超過 32B 的模型)。
  • 執行需要複雜推理與程式碼執行的任務。
  • 需要可靠解析代理輸出的情況。

在以下情況考慮其他方案:

  • 使用在結構化生成上掙扎的較小模型。
  • 簡單、預先定義的工作流程已足夠。

實作技巧

  1. 清晰提示:提示必須明確說明預期的 JSON 結構。
  2. 模型選擇:選擇具備強大結構化生成能力的模型。
  3. 供應商支援:使用原生支援結構化生成的 API 供應商(例如 OpenAI 或 Anthropic),以確保最高可靠性。

Sources