# リスト処理

リスト変数は、文書ファイル、画像、音声、ビデオファイルなど、さまざまなファイルを同時にアップロードできる機能を持っています。アプリの利用者がファイルをアップロードすると、それらすべてのファイルが同じ `Array[File]` という配列変数に保存されます。\*\*その後の個別ファイルの処理が難しくなります。\*\*リスト操作ノードを使用することで、配列変数から個別の要素を取り出し、次のノードでの処理をスムーズに行うことができます。

> `Array` データ型の変数には、例えば\[1.mp3、2.png、3.doc]のように複数のファイル名が格納されることがあります。しかし、Large Language Model（LLM）は、画像ファイルやテキストコンテンツなどの単一の値のみを入力変数として読み込むため、配列変数を直接扱うことはできません。そのため、通常はリスト操作ノードと併用する必要があります。

### ノード機能

リスト操作ノードは、ファイルの形式、ファイル名、サイズなどの属性をフィルタリングおよび抽出し、異なる形式のファイルをそれぞれ対応する処理ノードに渡すことで、さまざまなファイル処理フローを正確に制御します。

例えば、あるアプリでは、ユーザーが文書ファイルと画像ファイルの2種類の異なるファイルを同時にアップロードできる機能があります。その際、異なるファイルタイプを仕分けし、それぞれの処理フローに渡すためには**リスト操作ノード**を使用することが必要です。

<figure><img src="https://3244742310-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBl3K6n12AeCkG3icHwfh%2Fuploads%2Fgit-blob-a5964b20bf5ed11b1a3c542a02d2dbe1db29c01e%2Fimage%20(15).png?alt=media" alt=""><figcaption><p>異なるファイルタイプのフロー分岐</p></figcaption></figure>

リスト操作ノードは通常、配列変数から情報を抽出し、特定の条件を設定して、下流ノードで受け入れ可能な変数タイプに変換します。この構造は、入力変数、フィルタ条件、ソート（オプション）、先頭N項目の取得（オプション）、そして出力変数に分かれています。

<figure><img src="https://3244742310-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBl3K6n12AeCkG3icHwfh%2Fuploads%2Fgit-blob-59a17f403569904a72ee5f62bf44babfba609396%2Fimage%20(17).png?alt=media" 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/ja-jp/guides/workflow/node/list-operator)ノードを使用して、ファイル変数の配列を事前処理し、異なるファイルタイプをそれぞれの処理ノードに送信する必要があります。手順は以下の通りです：

1. [機能](https://legacy-docs.dify.ai/ja-jp/guides/workflow/additional-features)を有効にし、ファイルタイプで「画像」および「文章」を選択します。
2. フィルタ条件で、画像変数とドキュメント変数をそれぞれ抽出するための2つのリスト操作ノードを追加します。
3. 文章変数を抽出し、「ドキュメントエクストラクタ」ノードに渡し、画像ファイル変数を抽出してLLMノードに渡します。
4. 最後に「回答」ノードを追加し、LLMノードの出力変数を記入します。

<figure><img src="https://3244742310-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBl3K6n12AeCkG3icHwfh%2Fuploads%2Fgit-blob-2b68179def2791ec0e4b71aa7b1b97d85eb7ff0a%2Fimage%20(375).png?alt=media" alt=""><figcaption></figcaption></figure>

アプリの使用者が文章と画像ファイルを同時にアップロードした場合、文章は自動的にドキュメントエクストラクタノードに、画像ファイルは自動的にLLMノードに分流され、混合ファイルの共通処理が実現されます。
