返回首頁

GitHub Repo

Dify 社群回報 HTTP 陣列序列化缺陷,JSON 請求可能靜默改變資料

Dify 的 HTTP Request 節點被回報以 Python 字串表示插入物件陣列,可能讓空值與物件結構在送出前改變。社群已提出 JSON 序列化修補,但尚未合併,正式版本影響範圍仍待確認。

The original uploader was Ggia at Greek Wikipedia. · CC BY-SA 2.5 · Image source
zh-Hant

Dify 社群於 10 月 3 日提出重現案例:HTTP Request 節點把 Array[Object] 變數嵌入請求本文時,可能送出與上游資料不同的內容,而且沒有拋出錯誤。回報標示環境為自架原始碼部署,版本欄列出 1.17.1 與 main 提交 8222397;目前不能據此認定所有 1.17.1 部署都有相同行為。問題回報

案例先用 Code 節點產生含布林值、空值與單引號文字的兩筆物件,再將陣列插入 HTTP 的 JSON 本文。回報輸出顯示,第二筆物件被併入第一筆的文字欄位;另一個更小的案例中,null 變成字串 "None"。切換為 raw-text 則留下 Python 格式,無法作為合法 JSON 使用。重現程式與輸出

回報將原因指向變數轉文字的流程:物件陣列使用 str(value),產生單引號、True 與 None,執行器再把它貼入模板。JSON 路徑接著經過 repair_json,可能得到可解析、但語意已改變的資料。這讓「請求成功送出」不足以證明資料完整。技術分析

官方文件將 HTTP Request 定位為工作流連接外部 API 的節點,支援動態插入上游變數,以及 JSON、Raw Text 等本文格式。對把檢索結果或模型整理出的物件陣列送往其他服務的流程而言,此案例提示工程師應比對接收端的欄位型別與陣列長度;這是依案例推導的部署檢查建議,尚無證據顯示所有這類流程都受影響。官方文件

同日提出的 Graphon 修補改讓 ArrayObjectSegment.text 使用 json.dumps。作者回報新增重現測試與 26 項變數測試通過,但截至查核時,提案仍開啟且沒有審查紀錄。後續須追蹤合併狀態、Dify 納入修補的版本,以及空陣列仍輸出空字串的邊界行為。修補提案

來源

  1. HTTP Request node: array[object] variables are inserted as Python repr, corrupting the request body
  2. fix: serialize array object segment text as JSON
  3. HTTP Request — Dify Docs