Workflow-as-tool output list only reads the first End node

该报错发生在将包含多个 End 节点(例如 IF/ELSE 分支分别连接不同 End)的 Dify 工作流发布为 Workflow-as-Tool 时,工具输出列表只读取了第一个 End 节点的输出变量。优先排查工作流分支结构是否包含多个 End 节点,以及发布前是否刷新了工具输出预览。

快速结论:该报错发生在将包含多个 End 节点(例如 IF/ELSE 分支分别连接不同 End)的 Dify 工作流发布为 Workflow-as-Tool 时,工具输出列表只读取了第一个 End 节点的输出变量。优先排查工作流分支结构是否包含多个 End 节点,以及发布前是否刷新了工具输出预览。

适用环境:Dify 源码自托管(Self Hosted Source)环境,Dify 版本为 main 分支 commit c6ca3950(内部跟踪为 Linear ENG-809)。该问题不依赖特定操作系统或 CUDA/GPU 环境。

最快修复方案:暂无确认的一步修复方案。Issue 中仅复现了问题,未在 `main` 分支上提供已验证的代码修复方案。可优先尝试重启 Dify 后端服务或清除浏览器缓存后重新发布工作流,但此操作未被 Issue 作者验证。

注意事项:该问题已被标记为 bug,但截至 Issue 关闭时尚未合并修复补丁。如果工作流只有单个 End 节点则不受影响;多分支或多 End 节点场景下,工具输出列表可能遗漏非第一个 End 节点的变量,需等待官方修复或手动调整工作流结构(如合并为单个 End)作为临时规避。

问题场景

用户在使用 Dify 创建多分支工作流时触发该问题。典型流程是:新建一个工作流,包含 Start 节点 → IF/ELSE 节点,并将 IF/ELSE 的两个分支(True/False)分别连接到两个不同的 End 节点。在两个 End 节点中分别配置不同的输出变量(例如 aaabbb)。发布该工作流后,打开「发布 → Workflow as Tool」并查看「工具输出」(Tool Output),发现列表只显示第一个 End 节点的输出,第二个 End 节点的输出变量(如 bbb)没有出现。

报错原文

Workflow-as-tool output list only reads the first End node

原因分析

根据 Issue 正文和复现 DSL,可能原因如下:

  • 代码逻辑缺陷:Dify 后端在解析工作流 DSL 并生成工具输出 schema 时,可能只遍历了图(graph)中的第一个 End 节点(即节点 ID 最小的或边列表中第一个指向 End 的节点),而未遍历所有分支中的 End 节点,导致后续 End 节点的输出变量未被收集进工具输出列表。
  • 图遍历顺序问题:由于工作流中 IF/ELSE 的 True 分支和 False 分支是并行存在的,后端可能使用了一种只保留第一个 End 节点的简化算法,忽略了其他分支的 End 节点输出。

由于 Issue 中未提供源码层面的证据(如具体函数名或 PR 链接),以上仅为逻辑推断,未在 Issue 中明确确认。

环境排查

  • 确认 Dify 版本是否为 main 分支 commit c6ca3950 或更早版本(该问题已在此版本复现)。
  • 检查工作流 DSL 中是否包含多个 End 节点(通过导出 DSL 或查看节点列表确认)。
  • 确认工作流发布状态:是否在修改分支后重新点击了「发布」按钮,并重新打开 Workflow as Tool 面板查看 Tool Output。
  • 如果使用浏览器,尝试清除缓存或用无痕模式重新打开 Dify 控制台,排除前端缓存导致输出列表未刷新的可能。

解决步骤

  1. 临时规避方案(未被 Issue 验证):将工作流结构改为单一 End 节点。例如,将 IF/ELSE 的两个分支连接到同一个 End 节点,并在该 End 节点中通过条件变量(如使用变量聚合节点)输出不同内容,从而避免多 End 节点导致的输出列表遗漏。
  2. 检查是否有官方补丁:访问 Dify 社区或 GitHub main 分支的更新日志,确认是否已有修复该问题的 commit(Issue 关闭时间 2026-09-01 之后)。如果有,更新 Dify 到最新 main 版本并重新测试。
  3. 反馈与跟踪:如果临时规避无法接受,可以持续关注原始 Issue #41516 的后续评论或关联 PR,等待官方修复并发布到稳定版本。

验证方法

修复或规避后,重新执行以下步骤验证:

  1. 打开目标工作流,确认 IF/ELSE 分支结构存在且两个 End 节点分别配置了输出变量(如 aaabbb)。
  2. 点击「发布」按钮重新发布工作流。
  3. 进入「发布 → Workflow as Tool」页面,查看「工具输出」(Tool Output)列表。
  4. 确认列表同时包含 aaabbb 两个输出变量;如果只显示其中一个,则问题仍存在。

参考来源

langgenius/dify #41516

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 21310

发表回复

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