返回首頁

GitHub Repo

Dify 社群提出 Node.js SDK 串流修補,審查替換事件可能仍保留原文

10 月 15 日的 Dify 回報指出,Node.js SDK 的 toText() 可能漏讀工作流程文字,並將內容審查替換訊息接在原文之後。修補已附回歸測試,但尚未合併,正式發布版本仍待確認。

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

Dify 社群於 10 月 15 日提出 Node.js SDK 串流收集錯誤回報,涉及 dify-client 3.1.0 與所列主分支版本。用來彙整回覆的 stream.toText(),可能在工作流程已輸出文字時回傳空字串;遇到內容審查的替換事件,則可能保留本應被取代的原始回答。議題中另一名貢獻者於 16 日回報重現兩項行為。回報與重現

問題出在事件語意與欄位位置。現有收集器讀取頂層 answer、text 或 delta,但工作流程的 text_chunk 將文字放在 data.text,因此遭到忽略。另一方面,message_replace 帶的是完整替換答案;若仍採追加方式,最終字串就會同時包含原始內容與審查後回覆。回報提供不需啟動伺服器的合成 SSE 測試,可直接檢查收集器行為。技術細節

同日提出的修補,讓 text_chunk 專門讀取巢狀文字,並讓 message_replace 覆寫已累積內容;其他巢狀事件仍被忽略,避免將推理文字混入答案。作者表示新增兩項回歸測試,完整 SDK 測試共 139 項通過,型別與格式檢查亦通過。目前提案仍為開啟狀態,等待程式碼擁有者審查。修補提案

這對自建聊天介面與代理後端有直接意義:依上述行為推論,即使服務端發出審查替換訊息,下游若把彙整結果存檔或傳給另一個工具,仍可能繼續使用原文。Dify 官方文件也要求依事件種類分派處理,並區分文字片段、完成與錯誤事件,顯示串流整合需要維護回覆狀態。官方串流指南

工程團隊可先以固定事件序列核對自己的 SDK 與封裝層,涵蓋巢狀文字、替換答案及最終儲存結果。後續應追蹤修補合併與套件發布;目前證據支持特定收集函式存在問題,尚不足以推定所有 Dify 用戶端或部署都受影響。

來源

  1. Node.js SDK toText() returns empty text for workflow streams and keeps moderated output after message_replace
  2. fix(nodejs-client): collect workflow text_chunk and apply message_replace in toText
  3. Consume Streaming Responses