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。
實作工具呼叫工作流程
實作工具使用需要在聊天歷史中加入特定順序的訊息,以便模型維持上下文。
兩步驟訊息流程
工具呼叫不是單一事件,而是需要在聊天歷史中包含兩條不同的訊息:
- The Tool Call: 包含
tool_calls欄位的助理訊息,該欄位指定函式名稱與要使用的參數。 - The Tool Response: 角色為
tool的訊息,指定函式名稱與內容(被呼叫函式的輸出)。
若缺少任一訊息,模型將無法將工具回應與原始請求及傳遞的參數對應起來。
實務執行
由於大型語言模型會產生文字而非執行程式碼,開發者必須手動處理執行。流程如下:
- Prompt Generation: 將聊天與工具傳遞給
tokenizer.apply_chat_template以產生提示詞。 - Model Generation: 模型產生工具呼叫請求(例如使用
<tool_call>標籤)。 - Manual Execution: 開發者解析模型的請求,執行對應的 Python 函式,並將工具呼叫與工具回應兩者都加入聊天歷史。
- Final Response: 將更新後的聊天傳回模型,以產生最終給使用者的自然語言回應。
目前的限制與未來方向
雖然輸入格式已統一,輸出格式仍然依模型而異。當模型發出工具呼叫時,會使用其原生格式,開發者必須使用 json.loads() 或正則表達式來解析請求,然後再加入統一的聊天格式。
Hugging Face 目前正致力於進一步統一這些回應格式,以進一步簡化流程。
Sources
- OriginalTool Use, Unified