```mdx
---
title: "迭代"
description: "通过对每个元素应用工作流来处理数组"
icon: "arrows-rotate"
---

迭代节点通过在每个元素上顺序或并行运行相同的工作流步骤来处理数组。用于批处理任务，否则这些任务将达到限制或作为单一操作效率低下。

<Frame caption="迭代节点处理工作流">
  <img src="https://assets-docs.dify.ai/2025/04/5f3f124c16b9e3565853f125f7db0e32.png" alt="迭代节点概览" />
</Frame>

## 迭代如何工作

该节点接受一个数组输入，并创建一个子工作流，对每个数组元素运行一次。在每次迭代过程中，当前项目及其索引可作为变量供内部节点引用。

**核心组件：**
- **输入变量** - 来自上游节点的数组数据  
- **内部工作流** - 对每个元素进行处理的步骤
- **输出变量** - 从所有迭代中收集的结果（也是一个数组）

## 配置

### 数组输入

连接来自上游节点的数组变量，如参数提取器、代码节点、知识检索或 HTTP 请求响应。

### 内置变量

每次迭代提供访问：
- `items[object]` - 当前正在处理的数组元素
- `index[number]` - 当前迭代索引（从 0 开始）

### 处理模式

<Tabs>
  <Tab title="顺序模式">
    **顺序处理** - 按顺序逐个处理项目
    
    **流式支持** - 可以使用答案节点逐步输出结果
    
    **资源管理** - 较低的内存使用，预测执行顺序
    
    **最佳适用** - 当顺序很重要或使用流式输出时
  </Tab>
  
  <Tab title="并行模式">
    **并发处理** - 最多同时处理 10 个项目
    
    **性能提升** - 独立操作的更快执行
    
    **批处理** - 高效处理大型数组
    
    **最佳适用** - 顺序不重要的独立操作
  </Tab>
</Tabs>

<Frame caption="顺序与并行处理对比">
  <img src="https://assets-docs.dify.ai/2024/12/2656dec26d6357556a280fcd69ccd9a7.png" alt="处理模式比较" />
</Frame>

<Frame caption="在迭代设置中启用并行模式">
  <img src="https://assets-docs.dify.ai/2024/12/516af5e7427fce9a58fa9d9b583230d4.png" alt="并行模式设置" />
</Frame>

## 错误处理

配置如何处理单个数组元素的处理失败：

**终止** - 发生任何错误时停止处理并返回错误信息

**继续错误** - 跳过失败的项目并继续处理，输出失败元素的 null

**移除失败结果** - 跳过失败的项目，仅返回成功的结果

输入输出对应示例：
- 输入: `[1, 2, 3]` 
- 继续错误的输出: `[result-1, null, result-3]`
- 移除失败的输出: `[result-1, result-3]`

## 长文生成示例

通过分别处理章节大纲生成长篇内容：

<Frame caption="长文生成工作流">
  <img src="https://assets-docs.dify.ai/dify-enterprise-mintlify/en/guides/workflow/node/3a403551d48b178d0a41ce2a5748dd2d.png" alt="长篇故事生成器" />
</Frame>

**工作流步骤：**

1. **起始节点** - 用户提供故事标题和大纲
2. **大型语言模型 (LLM) 节点** - 生成详细的章节分解  
3. **参数提取器** - 将章节列表转换为结构化数组
4. **迭代节点** - 使用内部大型语言模型处理每个章节
5. **答案节点** - 在生成过程中流式输出章节内容

<Frame caption="故事输入的起始节点配置">
  <img src="https://assets-docs.dify.ai/dify-enterprise-mintlify/en/guides/workflow/node/3af1c2ed0df00f19e584bcf511302f55.png" alt="起始节点设置" />
</Frame>

<Frame caption="章节结构的参数提取">
  <img src="https://assets-docs.dify.ai/dify-enterprise-mintlify/en/guides/workflow/node/d3beee536ff3c35f4e1eb1ab610f35d7.png" alt="参数提取设置" />
</Frame>

<Frame caption="LLM 处理的迭代配置">
  <img src="https://assets-docs.dify.ai/dify-enterprise-mintlify/en/guides/workflow/node/ac91582998868004b298afe2f04e5589.png" alt="迭代节点配置" />
</Frame>

<Info>
  参数提取效果取决于模型能力和指令质量。使用更强的模型并在指令中提供示例以改善结果。
</Info>

## 输出处理

迭代节点输出的数组通常需要转换以便最终使用：

### 将数组转换为文本

<Tabs>
  <Tab title="使用代码节点">
    ```python
    def main(articleSections: list):
        return {
            "result": "\n".join(articleSections)
        }
    ```
    
    <Frame caption="代码节点数组转换">
      <img src="https://assets-docs.dify.ai/dify-enterprise-mintlify/en/guides/workflow/node/8be2372b00a802e981efe6f0ceff815b.png" alt="代码节点转换" />
    </Frame>
  </Tab>
  
  <Tab title="使用模板节点">
    ```jinja2
    {{ articleSections | join("\n") }}
    ```
    
    <Frame caption="模板节点数组转换">
      <img src="https://assets-docs.dify.ai/dify-enterprise-mintlify/en/guides/workflow/node/8c0bcc5de453dea2776d2755449bd971.png" alt="模板节点转换" />
    </Frame>
  </Tab>
</Tabs>

## 常见用例

**标记限制管理** - 在内容超过大型语言模型上下文窗口时，将大文本分段进行翻译、总结或分析。

**批处理** - 高效地对多个项目应用相同操作，如处理多个文档或 API 调用。

**质量控制** - 单独处理项目以保持质量，并优雅地处理错误，而不是冒整个批次失败的风险。

**渐进输出** - 结果完成时逐步流式输出，而不是等待所有处理完成。

## 最佳实践

**选择合适的模式** - 对于有序处理或流式输出使用顺序模式，对于需要速度的独立操作使用并行模式。

**优雅地处理错误** - 根据部分失败是否应停止处理或跳过，配置错误处理。

**优化内部工作流** - 保持迭代子工作流高效，因为它们会多次运行。

**监控资源使用** - 带有复杂处理的大型数组会消耗大量资源，尤其是在并行模式下。
```