原创专题
Dify 迭代节点:三种错误处理怎样改变输出数组
按下游是否依赖位置对应,选择 Terminate、Continue on Error 或 Remove Failed Results,并处理输出里的 null。
迭代节点对数组的每个元素运行同一段子流程,单个元素失败时输出数组变成什么样,取决于错误处理设置。本文目标是对 5 个合成章节做批量处理,选定一种错误处理方式,并让后面的 Code 节点在失败时也不出错。前提是你能编辑 Dify 工作流。这里依据官方迭代节点页和本地模拟检查,没有登录 Dify,也没有运行工作流或模型。
操作与验收顺序
确认数组与模式
核对上游数组、内置变量和顺序或并行模式。[1]
选错误处理
按下游是否依赖位置选 Terminate、Continue on Error 或 Remove Failed Results。[1]
处理输出
输出转文本前过滤 null,并保留每个结果的标识。[1]
确认输入数组、变量与处理模式
迭代节点接收上游的数组,如参数提取、Code、知识检索或 HTTP 请求的结果,对每个元素运行一遍内部子流程;内部节点可以读取当前元素 items 和从 0 开始的序号 index,输出同样是数组。官方页列了两种处理模式:顺序模式按次序处理,可配合回答节点流式输出;并行模式最多同时处理 10 个元素,适合彼此独立、顺序无关的操作。原创练习是 5 个章节 intro、setup、usage、faq、summary。页面没有说明并行输出的排列,需要保持顺序时先用顺序模式。[1]
三种错误处理的输出差别
官方页给出三种设置:Terminate 在任何元素出错时停止并返回错误信息;Continue on Error 跳过失败元素,在输出里对应位置放 null;Remove Failed Results 跳过失败元素,只返回成功结果。页面的例子是输入 [1, 2, 3],第二个失败时,后两种分别得到 [result-1, null, result-3] 和 [result-1, result-3]。套到练习上,usage 失败:Continue on Error 得到 5 项且第 3 项为 null,Remove Failed Results 只剩 4 项,faq 从第 4 位移到第 3 位。[1]
按下游是否依赖位置来选
需要按位置对应原数组时选 Continue on Error,失败位置一目了然,但下游必须处理 null。只要成功结果、不关心哪些失败时选 Remove Failed Results,但位置会前移,所以让每个结果元素自带 section_id,之后才能反推出失败的是哪个;练习里取集合差得到 usage。整批必须全部成功才有意义,例如缺一章就不能发布,则选 Terminate。这是根据页面描述的三种行为做出的选择建议,页面没有给出推荐。[1]
输出转文本时处理 null
官方页用 Code 节点 "\n".join(articleSections) 或 Template 节点把数组转成文本。本地用 Python 验证:join 遇到 None 会抛出 TypeError,所以选了 Continue on Error 时,Code 节点要先过滤 null,并记录跳过的数量;Template 节点遇到 null 的行为本页没有说明,按未验证处理。三种模式的数组结果来自对页面规则的本地模拟,只是复述文档,不是 Dify 的实际运行结果,页面对“失败”的判定范围也没有写。采用前,在可丢弃的工作流里故意让一个元素失败,对照实际输出。[1]
本文来源
本站原创整理;官方说明与编辑建议分别标注。