> ## Documentation Index
> Fetch the complete documentation index at: https://enterprise-docs.dify.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# 循环

## 简介

循环（Loop）节点用于执行依赖前一轮结果的重复任务，直到满足退出条件或达到最大循环次数。

## 循环节点与迭代节点有什么区别？

循环节点和迭代节点在任务处理上的定位不同：

<table>
  <thead>
    <tr>
      <th>类型</th>
      <th>特点</th>
      <th>适用场景</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td><strong>循环</strong>（Loop）</td>
      <td>轮次之间存在依赖关系的优化型任务。即任务的每一轮执行都依赖上一轮的结果。</td>
      <td>需要前一轮的计算结果。</td>
    </tr>

    <tr>
      <td><strong>迭代</strong>（Iteration）</td>
      <td>轮次之间无依赖关系的批处理任务。即每一轮任务可以独立运行，无需依赖前一轮。</td>
      <td>每轮独立执行。</td>
    </tr>
  </tbody>
</table>

## 如何配置循环节点？

循环节点包含以下三个关键配置项和一个子节点：

<table>
  <thead>
    <tr>
      <th>配置项/子节点</th>
      <th>作用</th>
      <th>示例</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td><strong>循环终止条件</strong>（Loop Termination Condition）</td>
      <td>设置循环何时停止。</td>
      <td>例：当变量 <code>x \< 50</code> 时，停止循环。</td>
    </tr>

    <tr>
      <td><strong>最大循环次数</strong>（Maximum Loop Count）</td>
      <td>限制最多执行的轮次，避免无限循环。</td>
      <td>例：最多执行 10 轮，不管是否满足退出条件。</td>
    </tr>

    <tr>
      <td><strong>循环变量</strong>（Loop Variables）</td>
      <td>用于在循环的不同轮次间传递数据，并在循环结束后继续供下游节点使用。</td>
      <td>例：变量 <code>x \< 50</code> 在每轮循环中递增 1，循环体内部可以基于 <code>x \< 50</code> 进行计算，循环结束后，<code>x \< 50</code> 的最终值可用于后续流程。</td>
    </tr>

    <tr>
      <td><strong>退出循环节点</strong>（Exit Loop）</td>
      <td>当循环体内运行到此节点后，循环终止。</td>
      <td>例：最多执行 10 轮，不管是否满足退出条件。</td>
    </tr>
  </tbody>
</table>

<Info>
  **退出循环节点** 与 **循环终止条件** 均可作为循环的终止触发点，满足任意一个条件时，循环都会提前退出。

  如果未配置任何退出条件，则循环将持续运行（相当于 while (true)），直到达到 **最大循环次数**。
</Info>

## 示例一：如何使用循环节点？

**需求：生成 1-100 的随机数，直到随机数小于 50 时停止。**

**实现步骤**：

1. 在 **循环** 节点中，配置 **循环终止条件**，为 **模板转换** 节点输出 `done`。

2. 使用 **代码执行** 节点生成 `1-100` 的随机数。

3. 使用 **条件分支** 节点判断随机数是否大于 `50`：

* 如果大于或等于 50，输出 `当前数字` 并继续循环，生成新的随机数。

* 如果小于 50，输出 `最终输出数字`，并经由 **模板转换** 节点输出 `done`，结束循环。

4. 循环将在随机数小于 `50` 时自动停止。

![Basic loop workflow](https://assets-docs.dify.ai/2025/04/282013c48b46d3cc4ebf99323da10a31.png)

![Steps](https://assets-docs.dify.ai/2025/04/9d9fb4db7093521000ac735a26f86962.png)

## 示例二：如何使用循环变量与退出循环节点？

**需求：通过一个循环工作流生成并逐步重写一首诗，每次输出都基于上一轮的结果。循环执行 4 次后自动停止。**

**实现步骤：**

1. 在 **循环** 节点中，配置 **循环变量**，用于在每次迭代中传递数据：

* num（循环次数）：初始值为 0，每次循环 +1。

* verse（诗歌内容）：初始值 `I haven’t started creating yet`，后续每次循环更新。

2. 使用 **条件分支** 节点判断循环次数是否大于 `3`：

* 如果大于 3，则进入 **退出循环** 节点，结束循环。

* 如果小于或等于 3，则进入 **LLM** 节点继续循环。

3. 使用 **LLM** 节点，要求模型根据用户的输入和过往的创作输出诗歌内容。

<Info>
  参考 Prompt：

  * 使用用户的输出 `sys.query` 作为灵感，创作一首欧洲长诗。

  * 参考你上一次的创作 `verse`，尝试在新的诗句中展现进步和创新。

  * 确保你的诗句符合欧洲文学的风格和传统，注重诗歌的韵律和意境。
</Info>

在第一次循环时，verse 为 `I haven’t started creating yet`，之后每次循环根据上一轮的输出更新诗歌。每次模型生成的新诗歌都会覆盖 verse 变量，供下一次循环使用。

4. 使用 **变量赋值** 节点，在每次循环后更新循环中的变量：

* 更新 num 变量，每次循环 +1。

* 更新 verse 变量为模型新生成的诗歌内容，直接覆盖前一轮循环的诗歌内容。

5. 输入你的诗歌灵感，模型将输出四个版本的诗歌，每一篇诗歌都以前一篇为基础而产生。

<video controls src="https://assets-docs.dify.ai/2025/04/7ecfc04458aa38e721baaa5f6355486c.mp4" width="100%" />

<CardGroup cols="2">
  <Card title="编辑此页面" icon="pen-to-square" href="https://github.com/langgenius/dify-docs-mintlify/edit/main/zh-hans/guides/workflow/node/loop.mdx">
    通过直接提交修改来帮助改进文档内容
  </Card>

  <Card title="提交问题" icon="github" href="https://github.com/langgenius/dify-docs-mintlify/issues/new?title=文档问题%3A%20&body=%23%23%20问题描述%0A%3C%21--%20请简要描述您发现的问题%20--%3E%0A%0A%23%23%20页面链接%0Ahttps%3A%2F%2Fgithub.com%2Flanggenius%2Fdify-docs-mintlify%2Fblob%2Fmain%2Fzh-hans/guides/workflow/node%2Floop.mdx%0A%0A%23%23%20建议修改%0A%3C%21--%20如果有具体的修改建议，请在此说明%20--%3E%0A%0A%3C%21--%20感谢您对文档质量的关注！%20--%3E">
    发现错误或有改进建议？请提交问题反馈
  </Card>
</CardGroup>
