# 列表操作

文件列表变量支持同时上传文档文件、图片、音频与视频文件等多种文件。应用使用者在上传文件时，所有文件都存储在同一个 `Array[File]` 数组类型变量内，**不利于后续单独处理文件。** 列表操作节点可以在数组变量内提取单独的元素，便于后续节点处理。

> `Array`数据类型意味着该变量的实际值可能为 \[1.mp3, 2.png, 3.doc]，大语言模型（LLM）仅支持读取图片文件或文本内容等单一值作为输入变量，无法直接读取数组变量，通常需要配合列表操作节点一起使用。

### 节点功能

列表操作节点可以对文件的格式类型、文件名、大小等属性进行过滤与提取，将不同格式的文件传递给对应的处理节点，以实现对不同文件处理流的精确控制。

例如在一个应用中，允许用户同时上传文档文件和图片文件两种不同类型的文件。需要使用**列表操作节点**进行分拣，将不同的文件类型交由不同流程处理。

<figure><img src="https://1288284732-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCdDIVDY6AtAz028MFT4d%2Fuploads%2FVuLD6LC3niNXPBH6JJIC%2Fimage.png?alt=media&#x26;token=9f824989-2cf5-434b-87f8-53590b002495" alt=""><figcaption><p>分流不同的文件类型</p></figcaption></figure>

列表操作节点一般用于提取数组变量中的信息，通过设置条件将其转化为能够被下游节点所接受的变量类型。它的结构分为**输入变量**、**过滤条件**、**排序（可选）**、**取前 N 项（可选）**、**输出变量**。

<figure><img src="https://1288284732-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCdDIVDY6AtAz028MFT4d%2Fuploads%2FJkrweVqXwNpLWmG81JS9%2Fimage.png?alt=media&#x26;token=a371e5a4-7705-4031-806c-681ae08416f4" alt=""><figcaption><p>列表操作节点</p></figcaption></figure>

#### 输入变量

列表操作节点仅接受以下数据结构变量：

* Array\[string]
* Array\[number]
* Array\[file]

#### 过滤条件

处理输入变量中的数组，添加过滤条件。从数组中分拣所有满足条件的数组变量，可以理解为对变量的属性进行过滤。

举例：文件中可能包含多重维度的属性，例如文件名、文件类型、文件大小等属性。过滤条件允许设置筛选条件，选择并提取数组变量中的特定文件。

支持提取以下变量：

* type 文件类别，包含图片，文档，音频和视频类型
* size 文件大小
* name 文件名
* url 指的是应用使用者通过 URL 上传的文件，可填写完整 URL 进行筛选
* extension 文件拓展名
* mime\_type

  [MIME 类型](https://datatracker.ietf.org/doc/html/rfc2046)是用来标识文件内容类型的标准化字符串。示例: "text/html" 表示 HTML 文档。
* transfer\_method

  文件上传方式，分为本地上传或通过 URL 上传

#### 排序

提供对于输入变量中数组的排序能力，支持根据文件属性进行排序。

* 升序排列

  默认排序选项，按照从小到大排序。对于字母和文本，按字母表顺序排列（A - Z）
* 降序排列

  由大到小排序，对于字母和文本，按字母表倒序排列（Z - A）

该选项常用于配合输出变量中的 first\_record 及 last\_record 使用。

#### 取前 N 项

可以在 1-20 中选值，用途是为了选中数组变量的前 n 项。

#### 输出变量

满足各项过滤条件的数组元素。过滤条件、排序和限制可以单独开启。如果同时开启，则返回符合所有条件的数组元素。

* Result，过滤结果，数据类型为数组变量。若数组中仅包含 1 个文件，则输出变量仅包含 1 个数组元素；
* first\_record，筛选完的数组的首元素，即 result\[0]；
* last\_record，筛选完的数组的尾元素，即 result\[array.length-1]。

***

### 配置案例

在文件交互问答场景中，应用使用者可能会同时上传文档文件或图片文件。LLM 仅支持识别图片文件的能力，不支持读取文档文件。此时需要用到 [列表操作](https://legacy-docs.dify.ai/zh-hans/guides/workflow/node/list-operator) 节点预处理文件变量的数组，将不同的文件类型并发送至对应的处理节点。编排步骤如下：

1. 开启 [Features](https://legacy-docs.dify.ai/zh-hans/guides/workflow/additional-features) 功能，并在文件类型中勾选 “图片” + “文档文件” 类型。
2. 添加两个列表操作节点，在 “过滤” 条件中分别设置提取图片与文档变量。
3. 提取文档文件变量，传递至 “文档提取器” 节点；提取图片文件变量，传递至 “LLM” 节点。
4. 在末尾添加 “直接回复” 节点，填写 LLM 节点的输出变量。

<figure><img src="https://1288284732-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCdDIVDY6AtAz028MFT4d%2Fuploads%2FRBihMdD0W7rUwD1iLgoI%2Fimage.png?alt=media&#x26;token=eeb3b5cc-6b95-444c-a200-55666f0d04ff" alt=""><figcaption></figcaption></figure>

应用使用者同时上传文档文件和图片后，文档文件自动分流至文档提取器节点，图片文件自动分流至 LLM 节点以实现对于混合文件的共同处理。
