Hugging Face 統一工具使用 API

Hugging Face 發佈了一個統一的工具使用 API,旨在使工具呼叫能在多個流行模型系列(包括 Mistral、Cohere、NousResearch 與 Llama)之間可移植。此更新減少了在聊天中實作工具時對模型特定變更的需求,提供了一種標準化的方式來傳遞工具並管理聊天歷史。

透過聊天模板標準化工具定義

統一的 API 利用現有聊天模板系統的擴充功能。透過使用 Jinja 模板,系統能以特定模型所需的正確控制標記與格式渲染聊天,同時允許開發者以模型無關的格式撰寫聊天內容。

將工具傳遞給模板

為了確保 API 在不同程式語言間直觀易用,Hugging Face 實作了雙重工具定義方式:

  • JSON Schema: 基礎聊天模板期望工具以 JSON Schema 定義。
  • Python Integration: 對於 Python 使用者,API 會自動將 Python 函式轉換為 JSON Schema。為了促成此過程,開發者應提供清晰的函式名稱、正確的型別提示,以及完整的 docstring(包括參數說明),因為這些會用來產生模型閱讀的 Schema。

實作工具呼叫工作流程

實作工具使用需要在聊天歷史中加入特定順序的訊息,以便模型維持上下文。

兩步驟訊息流程

工具呼叫不是單一事件,而是需要在聊天歷史中包含兩條不同的訊息:

  1. The Tool Call: 包含 tool_calls 欄位的助理訊息,該欄位指定函式名稱與要使用的參數。
  2. The Tool Response: 角色為 tool 的訊息,指定函式名稱與內容(被呼叫函式的輸出)。

若缺少任一訊息,模型將無法將工具回應與原始請求及傳遞的參數對應起來。

實務執行

由於大型語言模型會產生文字而非執行程式碼,開發者必須手動處理執行。流程如下:

  1. Prompt Generation: 將聊天與工具傳遞給 tokenizer.apply_chat_template 以產生提示詞。
  2. Model Generation: 模型產生工具呼叫請求(例如使用 <tool_call> 標籤)。
  3. Manual Execution: 開發者解析模型的請求,執行對應的 Python 函式,並將工具呼叫與工具回應兩者都加入聊天歷史。
  4. Final Response: 將更新後的聊天傳回模型,以產生最終給使用者的自然語言回應。

目前的限制與未來方向

雖然輸入格式已統一,輸出格式仍然依模型而異。當模型發出工具呼叫時,會使用其原生格式,開發者必須使用 json.loads() 或正則表達式來解析請求,然後再加入統一的聊天格式。

Hugging Face 目前正致力於進一步統一這些回應格式,以進一步簡化流程。

Sources