GitHub Repo
Transformers 社群回報工具結構轉換缺陷,複合型別可能遺失參數限制
Python 工具函式的型別提示轉成 JSON Schema 時,特定聯集型別會遺失陣列元素或列舉值限制。回報涵蓋正式版與開發版,修補尚待維護者確認。

9 月 26 日,Hugging Face Transformers 社群提交工具呼叫缺陷回報:`get_json_schema()` 處理聯集型別時,可能丟失陣列元素及列舉值限制。回報者表示,正式版 5.17.0 與開發版均可重現;截至查核時,議題仍開放,尚未連結修補 PR。[社群回報](https://github.com/huggingface/transformers/issues/49122)
這段轉換位於模型接收工具描述的入口。官方文件說明,開發者可把 Python 函式交給 `apply_chat_template()` 的 `tools` 參數,系統會讀取型別提示與說明文字,生成工具的 JSON Schema。對代理開發者而言,排查參數錯誤時,除了檢查提示詞與模型輸出,也應核對送入模板的結構是否忠於函式簽章,避免把轉換層的資訊遺失誤判為模型能力問題。[官方工具文件](https://huggingface.co/docs/transformers/main/en/chat_extras)
回報範例中,接受字串或字串陣列的 `str | list[str]`,轉換後只保留字串、陣列兩種大類,缺少規定陣列元素必須為字串的 `items`。另一個混合 `Literal` 與整數的參數,則失去限制合法字串選項的 `enum`。這些案例針對工具描述的生成,尚未提供下游模型誤呼叫率數據。[重現範例](https://github.com/huggingface/transformers/issues/49122)
比對 5.17.0 原始碼,聯集分支只要發現每個子結構的 `type` 都是字串,就把它們壓成型別清單。陣列與列舉也符合這項判斷,其他限制因此被捨棄。程式已有保留完整子結構的 `anyOf` 分支;收緊前一項判斷,便是回報者提出的修補方向。[正式版原始碼](https://github.com/huggingface/transformers/blob/v5.17.0/src/transformers/utils/chat_template_utils.py)
觸發條件也有邊界:單一非空型別搭配 `None` 會走另一分支,不能將所有可選參數都視為受影響。依程式邏輯推論,若應用程式沿用被削弱的結構做驗證,可能接受原本不允許的參數;實際結果仍取決於聊天模板、模型與工具執行端的檢查。
工程團隊目前可先檢視自動產生的結構,加入錯誤陣列元素及非法列舉值的測試。官方也支援直接傳入手寫 JSON Schema,提供繞過自動轉換的路徑。後續應追蹤維護者確認、回歸測試與修正版發布;目前尚無完整受影響版本清單,也不能把社群提出的修改視為已上線修補。[工具定義方式](https://huggingface.co/docs/transformers/main/en/chat_extras)