
# 循环
循环节点用于在工作流中重复执行一系列任务，直到满足特定条件为止。当你需要批量处理数据、逐一遍历列表元素或按固定次数重复执行某个操作时，可以使用循环节点来实现。
循环是一种常见的工作流控制机制，它让一组操作能够被重复执行，而不需要手动复制粘贴相同的节点。在实际业务场景中，循环节点可以帮助您：
- **逐条处理列表数据：**对一组数据中的每一条逐一执行相同的操作，例如依次对多篇文章进行摘要提取。
- **重复执行固定次数的任务：**例如让大模型连续生成多轮创意方案，每轮基于上一轮结果优化迭代。
- **满足条件时自动终止：**配合终止条件，在循环过程中自动判断是否需要提前退出，避免无效执行。
#### 约束限制
在使用循环节点之前，请了解以下限制：
- 循环节点内不支持配置问答节点、提问器节点、输入节点或带有这些节点的子工作流。
- 循环体内的流程必须从"循环输入"开始，经过具体任务节点，最终连线到"循环输出"，否则循环将无法正常执行。
- 在使用"数组循环"模式时，传入的变量值必须为标准的数组（Array）格式。
循环体中的节点将在每轮循环中重复执行。如果循环体包含大模型节点等消耗资源或费用的节点，循环次数越多，资源消耗和费用越高。建议始终配置合理的终止条件，首次调试时将循环次数设为较小值（如1\~3次），确认逻辑无误后再调大。
#### 循环类型说明
循环节点的运行模式由循环类型决定，不同的循环类型适用于不同的场景。目前支持以下两种循环类型：
表1循环类型说明 
| 循环类型   | 适用场景          | 循环次数    | 终止方式                     |
|:---|:---|:---|:---|
| 使用数组循环 | 遍历已知列表中的每个元素  | 取决于数组长度 | 数组遍历完毕后自动结束，或满足终止条件时提前退出 |
| 指定循环次数 | 需要重复执行固定次数的操作 | 手动指定次数  | 达到指定次数后自动结束，或满足终止条件时提前退出 |
   
循环类型选型建议：
- 如果你已有一组待处理的数据（如列表、数组），推荐使用"数组循环"，循环次数由数据量自动决定，无需手动计算。
- 如果你需要重复执行某个操作N次，且不依赖外部数据，推荐使用"指定循环次数"，直接设定次数，配置更简单。
- 如果你需要获取当前循环轮次信息，两种模式均可通过内置变量index获取。
 
#### 使用数组循环
数组循环类似编程语言中的for语法结构，用于遍历一个已知的序列（数组），对序列中的每个元素执行完全相同的步骤。
- 运行机制：循环的次数取决于您传入的数组长度（例如传入包含5个元素的数组，就循环5次）。您需要将上游节点的数组输出引用给循环节点。
- 内置变量：在数组循环中，系统会自动提供两个仅限循环体内部使用的内置变量：
  - item（元素）：当前这一轮循环正在处理的具体数据内容。
  
  - index（索引）：当前循环的轮次标识（从0开始计算。0代表第1次循环，1代表第2次循环，以此类推）。
   
- 典型场景：长文档分段总结、批量翻译多国语言、根据一组核心词批量生成多篇营销文案。
 
#### 指定循环次数
指定循环次数时，不需要依赖外部输入的数组，而是直接设定一个固定的循环次数。
典型场景：多轮次剧情推理、固定部署的数据清洗与重试。
#### 配置循环节点
配置循环节点的详细参数说明如下：
#### 添加循环节点
在工作流编辑页面，单击下方"添加节点"，选择"循环"节点。循环节点中执行具体任务的节点，可以添加后，拖拽至循环节点内部。循环体内的流程必须从"循环输入"开始连线，经过具体任务节点，最终连线到"循环输出"。
![](https://support.huaweicloud.com/lowcode-agentarts/zh-cn_image_0000002687790488.png "点击放大")
#### 循环类型
- 如果选择"使用数组循环"，需配置arr_loop_var变量。arr_loop_var是数组循环模式下的固定入参，用于接收需要遍历的数组。循环节点会依次取出该数组中的每个元素，逐轮传入循环体执行处理。它支持引用上游节点的输出，且**值** **必须为数组格式**，数组的长度即为循环的执行次数。
- 如果选择"指定循环次数"，直接输入设定的次数，循环次数支持设置为1\~1000次。
循环节点本身不消耗大模型Token，但若循环体内部部署了大模型节点，每运行一轮循环都会消耗对应大模型的Token。请合理配置循环次数和终止条件以控制运行成本。关于大模型的费用，请参考[模型计费说明](https://support.huaweicloud.com/price-maas/price-maas-0002.html)。
#### 中间变量
中间变量是循环节点中用于在每一轮循环之间**传递和更新数据**的参数。中间变量可以输入一个固定值，或者引用前置节点的输出变量和全局配置中的记忆变量。
- 中间变量可以将不需要遍历的背景信息（如产品介绍、全局要求、用户设定的固定条件）一次性传入循环体，让每一轮循环都能直接读取和使用，而无需在节点内反复手写。例如，上游节点通过插件查询到了"今天的天气是晴天"，您可以将天气结果通过中间变量传给循环体，让大模型在后续的每一轮循环创作中都知道今天是晴天。
- 除了作为常量使用外，在循环体中通过结合"变量赋值"节点，将本轮处理后的最新结果覆盖更新到该中间变量中。下一轮循环启动时，节点会自动读取更新后的值，从而实现中间变量的动态更新。
 
#### 输出参数
循环节点的输出参数可设置为循环体的执行结果集合，表示当数组中所有元素运行完毕之后，将所有循环的运行结果打包输出给下游。
#### 终止条件
通常情况下，循环节点会一直执行，直到"数组遍历完"或"达到指定的循环次数"。但在实际业务中，往往需要根据**运行过程中的动态结果**来随时停止循环（例如：AI已经给出了满意的答案、或者调用的插件连续报错）。
终止条件并非实时监控，而是在每次循环体执行完成后进行判定。终止条件通常需要与中间变量搭配使用，这是最常见的使用模式。原因在于：终止条件需要一个"判断依据"，而这个依据往往是循环过程中不断更新的状态值（即中间变量）。
终止条件由一个或多个条件表达式组成，每个条件表达式的结构为：\[判断参数\] \[比较条件\] \[比较参数\]。
- 判断参数：选择来自循环体内前序节点的输出参数或中间变量。这是终止条件的"监控对象"。
- 比较条件：系统会根据你选择的判断参数类型，自动提供对应的判断规则。包括但不限于：
  - 文本类：等于/不等于、包含/不包含、为空/不为空等。
  
  - 数值/数组类：长度大于等于 (\>=) / 长度小于等于 (\<=) 等。
   
- 比较参数：用于对比的目标值，支持两种设置方式：引用（选择前置节点输出变量或全局配置中的记忆变量）和输入（直接填写具体值）。
 
#### 配置示例
本示例创建一个产品文案写作助手，使用数组循环方式，通过循环体生成\["小红书", "微信朋友圈", "微博"\]风格的宣传文案。
1. 创建一个任务型工作流，并添加循环节点、大模型节点，并将大模型节点放置在循环体内部，连接各节点。 
   图1创建任务型工作流   
   ![](https://support.huaweicloud.com/lowcode-agentarts/zh-cn_image_0000002717549981.png "点击放大")
   图2编排循环节点   
   ![](https://support.huaweicloud.com/lowcode-agentarts/zh-cn_image_0000002687950342.png "点击放大")
   
   
2. 配置开始节点，开始节点共计两个参数，将新增的item参数设置为Array\<String\>格式，并单击![](https://support.huaweicloud.com/lowcode-agentarts/zh-cn_image_0000002687790494.png)输入默认值\["小红书", "微信朋友圈", "微博"\]。
   
   图3配置开始节点   
   ![](https://support.huaweicloud.com/lowcode-agentarts/zh-cn_image_0000002687790484.png "点击放大")
   
   
3. 配置循环节点。单击循环节点，参考下图完成配置。 
   循环类型：使用数组循环。
   循环数组：引用开始节点的item参数。
   输出参数：设置为output，引用大模型的输出结果参数raw_output。
   图4配置循环节点   
   ![](https://support.huaweicloud.com/lowcode-agentarts/zh-cn_image_0000002717390095.png "点击放大")
   
   
4. 配置循环体中的大模型节点，单击大模型节点，参考下图完成配置。 
   模型配置：选择任一可用模型。
   输入参数：新增query参数，引用开始节点的query参数；新增item参数，引用循环节点的item参数。
   输出参数：使用默认。
   用户提示词：
   ```
   你是一位资深的百万粉自媒体爆款操盘手。我的新产品是一款{{query}}。
   请针对 {{item}} 平台的受众偏好和语言风格，为我写一篇吸引人的种草文案。
   需要按照以下格式输出：
   {{item}}风格文案：
   ```
   图5配置大模型节点   
   ![](https://support.huaweicloud.com/lowcode-agentarts/zh-cn_image_0000002687790486.png "点击放大")
   
   
5. 配置结束节点，result参数引用循环节点的输出参数output。 
   图6配置结束节点   
   ![](https://support.huaweicloud.com/lowcode-agentarts/zh-cn_image_0000002687790482.png)
   
   
6. 单击"试运行"，参考下图输入测试问题后，运行工作流。 
   图7试运行工作流   
   ![](https://support.huaweicloud.com/lowcode-agentarts/zh-cn_image_0000002687950336.png "点击放大")
   
   
7. 检查输出结果是否符合预期。 
   可查看工作流已经按照要求输出对应的文案。单击"调试"可查看工作流的调用链信息，由于本案例中\["小红书", "微信朋友圈", "微博"\]共有3组数据，因此可以看到大模型通过循环的方式执行了3次。
   图8检查输出结果   
   ![](https://support.huaweicloud.com/lowcode-agentarts/zh-cn_image_0000002717390105.png "点击放大")
   图9查看调用链   
   ![](https://support.huaweicloud.com/lowcode-agentarts/zh-cn_image_0000002717549975.png "点击放大")
   
   
 
#### 常见问题
- **不设置终止条件会怎样**
  不设置终止条件时，循环将完整执行。数组循环会遍历完所有元素，指定循环次数会跑满设定轮次。如果您的场景需要每条数据都处理，可以不设置终止条件。
  
- **循环次数设置为1是否有意义**
  有。设置为1次本质上就是执行一次循环体中的逻辑。在某些场景下，你可能希望通过循环节点的结构来组织一段独立的子流程，或者先将循环次数设为1进行单轮调试，确认逻辑正确后再调大轮数。
  
- 为什么循环体不支持Agent节点或问答节点 循环节点的设计初衷是处理"批量任务"。Agent和问答节点属于强交互式任务，包含复杂的上下文交互和人工干预逻辑，目前在循环结构中尚未开放，以避免死循环或响应超时。
  
 
