# 循环节点
工作流中的循环节点用于重复执行一系列任务。
# 节点说明
循环是一种常见的控制机制,用于重复执行一系列任务,直到满足某个条件为止。工作流提供循环节点,当需要重复执行一些操作,或循环处理一组数据时,可以使用循环节点实现。

# 配置循环节点
# 循环类型
循环节点的配置方式取决于循环类型。循环类型是循环节点的运行模式,支持设置为使用数组循环、指定循环次数和无限循环。
# 使用数组循环
使用数组循环类似编程语言中的 for 语法结构。使用数组循环用于遍历一个已知的序列,对序列中的每个元素执行一系列相同的步骤。
在编程中,数组是一种数据结构,用于存储一系列元素。数组中的基础概念如下:
- item:元素,即数组中的单个数据。数组由多个元素组成,每个元素可以是数字、字符、字符串等数据类型。
- index:索引,指数组中元素的位置。索引从 0 开始计数,表示第一次循环,1 表示第二次循环,2 表示第三次循环,以此类推。最后一次循环的索引为 n-1,其中 n 为循环次数。
- 数组长度:数组中元素的数量。
例如,在数组 arrayOfNumbers = [10, 20, 30, 40, 50] 中:
- arrayOfNumbers[0] 的 item 是 10,index 是 0。
- arrayOfNumbers[1] 的 item 是 20,index 是 1。
- 数组长度为 5。
使用数组循环时,需要指定循环数组,此参数仅支持引用上游节点的输出,且必须为数组格式。使用数组循环模式下执行循环节点时,循环的次数取决于循环数组引用的数组长度。例如数组 [1,2,3,4,5] 的长度为 5,循环节点会循环 5 次完成遍历。如果循环数组参数引用了多个数组,则将最短的数组作为循环次数。
使用数组循环时,循环节点会遍历数组中的每个元素,每次循环都会将当前循环到的元素赋值给内置变量。内置变量仅限循环节点内部使用。目前支持的内置变量如下:
- item
:数组元素,即当前循环到的数组元素。 - index
:数组索引,index+1 为当前循环的轮次。
# 指定循环次数
指定循环次数模式通常用于批量、顺序处理数据的场景,需要同时设置循环次数。支持设置为任意次,你也可以引用上游节点数值类型的输出参数。
# 无限循环
无限循环类似编程语言中的 while等语法结构,需要通过终止循环节点停止循环。循环第一次运行之后,工作流对指定条件进行判断,满足一定条件时则结束循环,否则继续下一次循环。通常是基于循环节点的执行结果进行判断,例如循环调用http节点获取数据,当节点执行失败时停止循环,否则持续执行循环只会得到同样的错误结果。
无限循环适用于以下场景:
- 批量处理数据:例如通过http节点调用 API,查看多个用户 ID 的数据,如果节点执行失败,则停止循环。
- 增强搜索:基于第一次检索内容询问用户,收到用户回答后,结合用户问题进行第二次检索,循环执行多次检索,直至符合用户要求。增强检索可提高检索结果的精准度、用户满意度。
- 回合制游戏:游戏通常包含多轮,直到满足胜利条件或游戏结束条件,否则游戏回合反复进行。
无限循环需要通过终止循环节点停止循环。终止循环节点通常和条件判断节点关联使用,条件判断节点判断某个条件成立时,流转到终止循环节点,自动跳出循环。
# 说明
- 多轮循环之间是严格串行执行的,不支持并发执行循环。每个循环迭代完成后,才能启动下一个循环迭代。
- 不支持嵌套循环,循环节点中不允许添加另一个循环节点,但你可以在循环节点中嵌套一个包含循环节点的工作流。
- 循环节点中不允许添加智能决策节点。
# 设置中间变量
循环节点支持设置中间变量,此变量可作用于每一次循环。中间变量通常和循环体中的设置变量节点搭配使用,在每次循环结束后为中间变量设置一个新的值,并在下次循环中使用新值。
# 设置循环体
创建循环节点后,会生成一个循环节点画布。循环体画布是循环节点的内部运行机制,用于编排循环的主逻辑,每个循环迭代中,工作流会依次执行画布内的各个节点。你需要在循环节点和上下游节点之间添加连线。
选中循环体时,才能向循环体中添加新节点,或拖入新节点至循环体画布。循环体中无需设置开始节点或结束节点,默认按照连接线的箭头方向依次执行各个节点。
说明
继续循环节点和终止循环节点只能在循环体中使用。
# 设置输出
循环节点的输出参数可设置为循环体的执行结果集合,表示当数组中所有元素运行完毕之后,将所有循环的运行结果打包输出给下游。也支持设置为循环变量的取值。
# 使用示例
这里使用循环进行一个数组内容迭代输出的示例,来展示循环的基本功能

循环中,包含了中间变量赋值以及直接回复2个图元,中间变量赋值就是给打印数组的循环图元的中间变量进行赋值,直接回复就是获取赋值后的中间变量然后进行输出。
中间变量的配置如图

试运行结果:

# 常见问题
(此处保留,用于后续补充常见问题与解答)