GitHub Repo
Dify 提出 ReAct 解析修補,避免字串內大括號使工具呼叫遭略過
Dify 社群於 11 月 6 日提出修補,處理 ReAct 串流解析器把 JSON 字串內的大括號誤判為結構邊界的問題。作者回報新增回歸測試通過,但提案尚未合併,不能視為正式版本已修復。

Dify 社群於 11 月 6 日提交 PR #45741,針對 ReAct 代理的串流輸出解析提出修補。問題回報以當時主分支直接重現:模型即使產生合法的工具指令,只要參數字串包含大括號,解析器便可能截斷內容,讓執行器略過工具呼叫,並將原始 JSON 當作回答送給使用者。重現只需餵入模型輸出文字,不依賴特定供應商。問題回報
例如,搜尋參數若包含 close } brace,舊邏輯會把字串中的右大括號也計入結構深度,過早判定指令結束;字串內未配對的左大括號則可能讓後續回答被吞入載荷。另一條失敗路徑是指令之前的普通文字帶有右大括號,污染快取後,使下一個合法指令無法解析。這些情況可能沒有明確錯誤訊息,增加排查代理漏執行的難度。重現與執行路徑
JSON 規範允許大括號出現在字串中;判斷物件邊界時,必須區分字串內容、引號與跳脫字元。因此,這類合法參數不能只靠括號計數切割。RFC 8259 字串規則
提案將原有計數器改成結構深度、字串狀態與跳脫狀態的組合,僅在字串外更新深度,並調整載荷完成後的快取處理。作者回報,新增五個案例在修改前皆失敗,修改後連同既有案例共七十項通過,涵蓋跳脫引號、巢狀輸入及游離括號;但這仍是作者公布的局部驗證。修補內容與測試
對工程團隊而言,這提醒了代理可靠性也取決於模型輸出到工具執行之間的解析層。依上述失敗機制推論,驗證時應同時比對原始輸出、解析出的動作與實際工具紀錄。後續須追蹤審查、合併及版本收錄情況;本提案也明確未處理其他畸形動作格式,影響範圍不宜擴大到所有代理路徑。提案狀態與範圍