循环变量在循环外部无法访问

大家好,希望大家能帮我解决以下问题。我正在使用 Dify 的在线版本。

我正在 Dify 中遇到 循环节点变量赋值器 的严重问题。尽管一个变量(例如 research_history)在每次迭代中都正确地更新和追加,但当循环终止时,这些更改会丢失。循环节点的最终输出返回一个空状态,即使内部日志确认数据已成功处理。

尝试的变通方法(均未奏效)

  1. 直接变量映射: 将下游节点直接映射到 {{Loop.research_history}}。结果:收到初始空数组 []

  2. 内部模板节点: 在循环内部添加一个模板节点作为最后一步来“输出”变量。结果:模板节点的输出在循环范围之外无法访问或可见。

  3. 变量与常量初始化: 在“变量”(导致 Invalid value 错误)和“常量”(导致持续的空数组)之间切换循环变量。

  4. 全局锚点思路: 尝试在循环 之前 的节点中初始化变量并在循环内部更新它。结果:循环内部的变量赋值器仅限于针对循环自身头部中定义的变量。

  5. 重命名/重置: 重命名变量并重新发布工作流以清除潜在的缓存问题。结果:行为没有改变。

@gl287 你好,能在这里分享一下 DSL 文件来帮助澄清问题吗?

你好,这里不接受这种格式的上传。请使用这个文件托管服务 link
谢谢!

我的帖子已经获批了,很高兴能听听你的想法 @kurokobo。谢谢!

@gl287
感谢您提供 DSL 文件。

我将其导入到我的自托管 Dify 1.12.1 中,在修复了以下两点后,一切似乎都正常运行了。

  • :white_check_mark: 循环(Schleife)节点
    • 对于 Loop Termination Condition 中的 is_saturated 选项,我将其设置为 False 并保存了流程,然后将其重新设置为 True 并再次保存了流程。
    • 在内部,您的 DSL 中,该值被存储为字符串而不是布尔值(第 911 行)。因此,循环实际上被跳过了。通过在 True/False 之间切换并保存,我能够覆盖无效的内部值。
  • :white_check_mark: 循环(Schleife)节点后的代码(搜索结果格式)节点
    • Output Variables 中,指定了 search_results,但代码块的 return 返回的是 final_research_context。这些需要匹配,所以我将代码中所有三处 final_research_context 替换为 search_results

最后,我无法重现您提到的问题,即“循环节点总是返回一个空列表”。
然而,快速搜索发现了一些类似的报告。这可能是一个已知错误,如果是这样,升级 Dify 可能会解决它。