dify工作流中必须正确区分循环节点与迭代节点:循环节点支持多模式、嵌套、中断及自定义变量,适用于多层嵌套或需访问外层变量场景;迭代节点仅支持foreach、自动绑定item,适用于纯一维数组且无需中断的轻量场景。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

在Dify工作流中对用户订单列表逐个调用风控模型、再对每个订单内的商品明细做二次校验,必须正确配置循环与迭代节点,否则数据会错位、上下文丢失、子项无法访问外层变量。
区分循环节点与迭代节点的适用场景
循环节点(loop)是底层控制结构,支持 foreach/while/计数三种模式,可嵌套、可设中断条件、可自定义变量名;迭代节点(iteration)是面向非技术用户的简化封装,仅支持 foreach 模式,自动绑定 item 变量,不支持 break_condition 或自定义作用域。
处理纯一维数组(如["A","B","C"])且无需中断逻辑时,用迭代节点更轻量;涉及多层嵌套、需根据某项状态提前退出、或要复用外层变量名时,必须选循环节点。
迭代节点的输入源【必须是合法 JSON 数组】,若上游输出为字符串 "[1,2,3]" 而非数组类型,节点将静默跳过全部迭代——这是最常被忽略的失败原因。
配置单层遍历:以用户列表触发批量推理
方法一:使用迭代节点(推荐新手)
第一步:在工作流画布拖入「迭代节点」,双击打开配置面板。
第二步:在「输入路径」填入 inputs.users,确保上游节点已将用户数据以数组形式写入该路径。
第三步:保持「当前项变量名」为默认的 item,后续所有子节点中直接用 {{item.id}} 或 {{item.email}} 引用字段。
方法二:使用循环节点(推荐需控制流程者)
在「循环模式」下拉选 foreach →「输入源」填 {{inputs.users}} →「当前项变量名」改为 user → 展开「高级设置」勾选「启用错误跳过」→ 保存。
这一步改变量名为 user 而非 item,是为了后续嵌套时避免与内层变量冲突;启用错误跳过能防止单个用户数据异常导致整个流程中断。
构建嵌套循环:用户→订单→商品三级处理
外层必须用循环节点,内层可用迭代或循环——但若内层需引用外层变量,则两层都必须用循环节点并显式声明变量名。
① 外层循环配置:类型选「循环节点」→「输入源」填 {{inputs.users}} →「当前项变量名」设为 current_user
② 在外层节点的「分支」区域拖入第二个「循环节点」
③ 内层循环配置:「输入源」填 {{current_user.orders}} →「当前项变量名」设为 current_order → 注意此处必须用双大括号包裹表达式,否则无法解析外层变量
④ 在内层分支中再加一层循环节点或迭代节点处理 current_order.items,变量名依次设为 product
如果内层输入源写成 inputs.orders 而不是 {{current_user.orders}},系统将找不到数据源,整个内层循环直接跳过不执行。
终止条件与动态退出实战
方法一:在循环节点中配置 break_condition
在循环节点「高级设置」里开启「启用中断条件」,输入表达式 {{item.status == "blocked"}},当任意一项的状态为 blocked 时,立即终止后续迭代,不再处理剩余项。
方法二:用条件判断节点配合循环结束节点
在循环体内部插入「条件判断节点」,判断逻辑设为 {{item.risk_score > 95}} →「是」分支连接「循环结束节点」→「否」分支继续执行下游操作。
注意:循环结束节点必须与当前循环节点配对使用,不能跨层级混用,否则工作流校验失败。
调试与验证关键数据流
在每层循环节点后插入「调试日志节点」,内容填 外层用户ID: {{current_user.id}},订单数: {{current_user.orders | length}}。
运行测试时,先用固定三用户、每用户一订单的最小数据集验证路径是否通;确认无误后再逐步放大样本量。
若日志中出现 undefined 或空数组,立即检查上游节点输出是否为真实数组类型——可在前序节点末尾加一个「转换节点」,用表达式 json_parse(inputs.raw_users) 强制转数组。











