GitHub Repo
Dify 社群提出結構化輸出修補,處理欄位名稱與 Schema 關鍵字衝突
10 月 29 日的 Dify 社群回報指出,特定欄位名稱搭配本地 Schema 引用,可能使代理建立失敗。作者翌日提出修補並公布測試結果,但截至查核時尚未合併。

Dify 的結構化輸出層出現一項欄位命名相容性問題。社群於 10 月 29 日針對 main 分支的 dify-agent 回報:當輸出欄位名為 default,且透過 $ref 指向本地 $defs 定義時,建立代理可能拋出 KeyError。相同結構只把欄位改名為 widget,便可正常處理;這使問題定位到 Schema 遍歷,而非模型生成內容。問題回報
JSON Schema 以 $defs 儲存可重用的子結構,再由 $ref 引用,適合多個欄位共用同一物件定義。這些引用具有明確的結構語意;遍歷器必須區分 Schema 關鍵字,以及 properties 內由使用者自訂的欄位名稱。JSON Schema 官方說明
Dify 公開程式碼顯示,輸出層會先展開本地引用,再把 Schema 交給 Pydantic。現有遍歷遇到 default、enum、const 等鍵名時,會保留其值而跳過深入處理。這項規則也套用到欄位名稱映射,因而可能留下未展開的引用,卻移除了根層 $defs,讓後續 Schema 生成失敗。輸出層程式碼
10 月 30 日提出的修補改為依所在位置決定遍歷方式:在 Schema 物件中保留字面資料,在欄位映射中則逐項處理子 Schema。作者回報,新增測試在原版本有 13 項失敗,套用修補後輸出層測試為 33 項全數通過;這些結果尚未獨立重跑,PR 仍等待審查。修補提案與測試
對工程團隊而言,這意味著既有資料契約的欄位名稱,可能影響代理初始化。回報也指出相同路徑會漏查非本地引用,但目前證據不足以推論可觸發外部存取。採用巢狀結構化輸出的團隊,可先用實際 Schema 驗證代理建立流程,並追蹤修補合併及正式版本收錄情況。