Dify迭代节点要求输入必须是标准数组格式,否则报错;需通过代码节点或JSON解析转换非数组数据,配置迭代路径和并行模式,并支持嵌套循环与结果聚合。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你需要让Dify自动处理一批文本、用户数据或文件列表,而不是手动点开每个条目重复操作。直接把原始数据连进迭代节点会报错,因为该节点只认标准数组格式,普通字符串、JSON对象或单个文件都会被拒绝,流程根本跑不起来。
确认输入数据必须是合法数组
打开你的工作流,找到迭代节点,点击进入配置面板。检查上游节点输出的数据结构——它必须是形如["a","b","c"]或[{"id":1,"name":"张三"},{"id":2,"name":"李四"}]的数组。如果上游输出的是纯文本、单个对象或空值,迭代节点会立即中断并提示“Input must be an array”。
常见错误来源:用HTTP节点直接请求API返回的原始响应体(未解析JSON)、用代码节点拼接字符串后没用json.loads()转成列表、从文件读取内容后没按行分割成数组。这些都必须先经过转换。
方法一:用代码节点做显式转换
在迭代节点前插入一个代码节点,输入Python脚本:
import json<br>if isinstance(input, str):<br> try:<br> input = json.loads(input)<br> except:<br> input = [input]<br>if not isinstance(input, list):<br> input = [input]
方法二:用变量提取节点配合JSON路径
若上游是HTTP节点且响应为JSON数组,启用“Parse JSON”选项,再用变量提取节点填写$作为JSONPath,即可原样提取根数组。
【关键前提】迭代节点不会自动识别“看起来像数组”的字符串,比如"[\"a\",\"b\"]"必须先json.loads(),否则视为非法输入。
设置迭代路径与当前项变量
在迭代节点配置中,“数组”字段填入上游输出的数组变量名,例如{{input_data}}或{{http_response.data}}。
“迭代路径”决定每次循环中传递给下游节点的变量名,默认为item。这意味着你在后续LLM节点里写提示词时,可用{{item.name}}或{{item.content}}引用当前元素的字段。
若数组元素是对象且含嵌套结构,例如{"user":{"id":1,"email":"a@b.com"}},可将迭代路径设为user,这样下游直接用{{item.id}}即可,无需写{{item.user.id}}。
注意:迭代路径不支持多层点号写法(如user.profile),只能是一级字段名或.表示根节点。
启用并行模式加速批量任务
第一步:点击迭代节点右上角齿轮图标,打开高级设置。
第二步:勾选“启用并行处理”,并设置并发数。默认为1(串行),建议根据模型响应速度和服务器资源设为4~8。并发数超过16可能触发限流,尤其使用免费版API Key时。
第三步:确认下游节点无强状态依赖。并行模式下各次迭代独立运行,不能共享变量或修改同一数据库记录——若需累计计数或写入同一Excel,必须改用串行或加锁机制。
这一步操作起来很简单,直接勾选并填数字就行。但若下游LLM节点用了全局术语表变量{{glossary}},并行时每个子流程都会复制一份,不会互相干扰,这是安全的。
嵌套循环处理层级数据
当你需要遍历“用户→订单→商品”这类三层结构时,必须用两个迭代节点嵌套:
① 外层迭代节点接收用户数组,迭代路径设为user,下游接第二个迭代节点;
② 内层迭代节点的“数组”字段填{{user.orders}},确保user对象里确实存在orders字段且类型为数组;
③ 内层迭代路径设为order,再往下可接第三个迭代节点处理{{order.items}}。
每层迭代都会生成自己的item变量,作用域隔离。外层的{{item.name}}和内层的{{item.id}}互不冲突。
若某用户的orders字段为空或缺失,内层迭代节点将跳过执行,不报错也不中断流程——这是Dify默认容错行为。
调试与结果聚合
运行工作流后,在日志面板中展开迭代节点,能看到每个item的独立执行记录,包括输入值、耗时、下游节点输出。失败项会标红,点击可查看具体错误堆栈。
迭代节点最终输出一个数组,元素顺序与输入一致,每个元素是对应item的完整处理结果。例如输入3个用户,输出就是[{"user_id":1,"summary":"OK"},{"user_id":2,"summary":"Failed"},{"user_id":3,"summary":"OK"}]。
若需筛选成功项,可在迭代节点后接一个代码节点,用Python过滤:output = [x for x in input if x.get("summary") == "OK"]。


















