HTTP Request node: array[object] variables are inserted as Python repr, corrupting the request body

在 Dify 的 HTTP Request 节点里,把 Array[Object] 类型的变量(例如 Code 节点输出的对象数组,或 Knowledge Retrieval 的 result )插入 JSON body 或 raw-text body 时,变量被序列化成 Python repr(单

快速结论:在 Dify 的 HTTP Request 节点里,把 Array[Object] 类型的变量(例如 Code 节点输出的对象数组,或 Knowledge Retrieval 的 result)插入 JSON body 或 raw-text body 时,变量被序列化成 Python repr(单引号、True/None),导致请求体变成非法 JSON、接口收到错误数据。优先排查变量段类型是否为对象数组。

适用环境:自托管(源码)Dify 1.17.1(main at 8222397);涉及 graphon 的 variables/segments.py 与 nodes/http_request/executor.py。Issue 未提供操作系统、Python、CUDA、显卡信息。

最快修复方案:暂无确认的一步修复方案。Issue 中维护者已确认会“把对象数组段对齐 Array[String] 的 JSON 序列化方式”,属于代码层修复,未给出面向用户的临时绕过步骤。

注意事项:该问题仅在 HTTP Request 节点插入 Array[Object] 时出现,Array[String] 因为已使用 json.dumps 不受影响。临时改用手动拼接或字符串化可能丢失类型信息,Issue 中未验证,需自行评估。

问题场景

用户在自托管 Dify 1.17.1 中编排工作流:先用 Code 节点输出一个 Array[Object] 变量(例如 items),再接一个 HTTP Request 节点,body 类型选 JSON 或 raw-text,模板写成 {"items": {{#code.items#}}}。运行时发送出去的请求体被破坏。Knowledge Retrieval 节点的 result 等其它 Array[Object] 变量同样复现。

报错原文

HTTP Request node: array[object] variables are inserted as Python repr, corrupting the request body

json body:     {"items": [{"sku": "A1", "gift": true, "note": "None}, {'sku': 'B2', 'gift': False, 'note': \"Tom's\"}"}]}
raw-text body: {"items": [{'sku': 'A1', 'gift': True, 'note': None}, {'sku': 'B2', 'gift': False, 'note': "Tom's"}]}

原因分析

最可能的原因:HTTP Request 节点通过变量段的 .text 把值拼进 body 模板,而 ArraySegment.text 的实现就是 str(self.value),即 Python repr——使用单引号、True、None。只有 ArrayStringSegment 用 json.dumps 覆盖了该行为(来自 #12809 的修复)。executor 把 .text 粘贴进模板后,JSON body 会再经过 repair_json,raw-text body 则原样发送,于是对象数组被写成非法 JSON。此前 #34185 只在前端让对象和 Array[Object] 变量可被选中,langgenius/graphon#235 也只覆盖字符串变量,对象数组的序列化未被处理。

环境排查

  • 确认 Dify 版本,Issue 中为自托管源码 1.17.1(main at 8222397)。
  • 确认 HTTP Request 节点 body 类型是 JSON 还是 raw-text。
  • 确认插入的变量类型是 Array[Object],而不是 Array[String]。
  • 确认变量来源节点(Code、Knowledge Retrieval 等)确实输出对象数组。
  • 如需复现,可直接运行 Issue 提供的 api/ 下 Python 脚本,打印 json/raw-text 两种 body。

解决步骤

  1. 先在本地复现,确认是 Array[Object] 段未按 JSON 序列化导致,而非接口或鉴权问题。
  2. 关注 Issue #43465 的修复进展:维护者已表示会把对象数组段的序列化方式对齐 Array[String](即改用 json.dumps)。
  3. 在修复发布前,可优先尝试把该变量在下游节点先转成字符串(例如在 Code 节点里对数组做 json.dumps 输出为字符串),再插入 HTTP Request body;此为规避思路,Issue 中未验证。
  4. 修复合并后升级到包含该补丁的 Dify / graphon 版本。

验证方法

重新运行工作流,抓取 HTTP Request 节点实际发送的 body:Array[Object] 应被序列化为合法 JSON(双引号、true/false/null),接口收到的对象结构与 Code 节点输出一致,即两个对象 {"sku": "A1", ...} 和 {"sku": "B2", ...}。也可运行 Issue 中的复现脚本,确认 json body 与 raw-text body 输出均为合法 JSON。

参考来源

langgenius/dify #43465

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 28744

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注