【Dify入門】Difyのリスト処理機能を徹底解説!

Difyのリスト処理機能を徹底解説 Dify

Difyのリスト処理機能を徹底解説!初心者でもわかるデータ配列の活用方法

AIアプリケーション開発プラットフォーム「Dify」をご存知ですか?ノーコード/ローコードで生成AIアプリを作れるこのツールは、ワークフロー機能を使って複雑な処理を自動化できる優れものです。その中でも今回は「リスト処理」という機能に焦点を当てて、初心者の方にもわかりやすく解説します。

ポイント!

Difyのリスト処理を使えば、複数のファイルやデータを一度に扱い、それぞれに適した処理を自動的に適用することができます。例えば、ユーザーがアップロードした画像と文書を自動で分類して別々の処理を行うなど、手作業では面倒な作業を効率化できます。

1. リスト処理とは?配列データの基本

Difyのワークフローでは、データは「変数」として扱われます。その中でも「配列(Array)」と呼ばれる特殊なデータ型があります。配列は複数のデータをまとめて管理するための仕組みで、以下のような形を持っています:

[値1, 値2, 値3, …]
例:[1.mp3, 2.png, 3.doc]

ユーザーが複数のファイル(画像、音声、文書など)をアップロードすると、それらは自動的に配列変数として保存されます。しかし、LLM(大規模言語モデル)は配列全体を一度に処理することができず、個別の値のみを読み取ることができます。

ここで「リスト処理」ノードの出番です。このノードを使うことで、配列の中から特定の条件に合致するデータだけを抽出したり、並べ替えたりすることができるのです。

基本用語解説
  • 配列(Array):複数のデータをまとめて管理するためのデータ構造
  • リスト処理ノード:配列データをフィルタリング・ソート・加工するための機能
  • LLM:大規模言語モデル(ChatGPTなどのAI)
配列データの構造と処理の流れ 入力データ(配列) [1.mp3 2.png 3.doc 4.jpg] リスト処理ノード フィルタリング ソート・抽出 画像のみ [2.png 4.jpg] 文書のみ [3.doc]

2. リスト操作ノードの基本構造

Difyのリスト操作ノードは、配列データを条件に基づいて処理するための機能です。その構造は5つの主要な部分から成り立っています:

1. 入力変数

処理したい配列データを選択します。以下のデータ型のみ受け付けます:

  • Array[string](文字列の配列)
  • Array[number](数値の配列)
  • Array[file](ファイルの配列)

2. フィルタ条件

配列の中から特定の条件に合致するデータだけを抽出します。例えば:

  • type:ファイルの種類(画像、文書など)
  • size:ファイルサイズ
  • name:ファイル名
  • extension:拡張子(.jpg、.docxなど)

3. ソート機能

フィルタリングされたデータを特定の順序で並べ替えます:

  • 昇順:小さい値から大きい値へ(A→Z)
  • 降順:大きい値から小さい値へ(Z→A)

4. 上位N項目

フィルタリング・ソート後の配列から、先頭からN個の要素だけを取得します(1~20の範囲で設定可能)。

5. 出力変数

処理結果が格納される変数:

  • result:フィルタリング結果の配列
  • first_record:結果配列の最初の要素
  • last_record:結果配列の最後の要素

これらの構成要素を適切に設定することで、複雑な配列処理を簡単に実現できます。

3. リスト処理の実践例

例1:画像と文書を自動分類するワークフロー

ユーザーが複数の画像ファイルと文書ファイルをアップロードする機能を持つアプリを考えてみましょう。この場合、アップロードされたファイルを種類ごとに分類し、画像はAIに分析させ、文書はテキスト抽出して処理するというワークフローが考えられます。

開始ノード
(ファイル入力)
リスト処理
(画像のみ抽出)
LLMノード
(画像解析)
回答ノード
開始ノード
(ファイル入力)
リスト処理
(文書のみ抽出)
テキスト抽出
LLMノード
(テキスト処理)
回答ノード
具体的な設定例

画像ファイルを抽出するリスト処理ノードでは、「type」属性を「画像」に設定します。一方、文書ファイルを抽出するノードでは、「type」属性を「文書」に設定します。これにより、アップロードされたファイルが自動的に適切な処理フローに振り分けられます。

例2:最新のファイルだけを処理する

複数のファイルがアップロードされた場合に、最も新しいファイルだけを処理したいケースもあるでしょう。この場合は、ソート機能と上位N項目の設定を活用します。

1. 入力変数:uploadedFiles(ユーザーがアップロードしたファイル配列)
2. ソート設定:「modifiedTime」(更新日時)を「降順」に設定
3. 上位N項目:1(最初の1つだけを取得)
4. 出力:first_record(結果配列の最初の要素=最新ファイル)

この設定により、常に最新のファイルだけを処理対象とすることができます。

4. フィルタリング条件の詳細

リスト処理の中でも特に重要なのが「フィルタリング条件」の設定です。ファイル配列の場合、以下のような属性でフィルタリングできます:

属性名 説明 使用例
type ファイルの種類 画像、文書、音声、映像など
size ファイルサイズ 1MB以下のファイルのみ抽出
name ファイル名 「report」を含むファイル名のみ抽出
url アップロードURL 特定のURLからアップロードされたファイル
extension ファイル拡張子 .jpg、.pdf、.docxなど
mime_type MIMEタイプ text/html、image/jpeg など
transfer_method アップロード方法 ローカル、URL経由
MIME(Multipurpose Internet Mail Extensions)タイプとは?

ファイルの内容や形式を示す標準化された識別子です。例えば、HTMLファイルは「text/html」、JPEGファイルは「image/jpeg」と表現されます。この識別子を使うことで、より正確なファイル分類が可能になります。

5. リスト処理とイテレーション(反復処理)の違い

Difyには「リスト処理」と似た機能として「イテレーション(反復処理)」という機能もあります。この2つは混同されやすいですが、目的が異なります:

リスト処理

目的:配列から条件に合致する要素をフィルタリング・抽出する

用途:配列を種類や条件で分類し、異なる処理フローに渡す

出力:フィルタリングされた配列または特定の要素

イテレーション(反復処理)

目的:配列の各要素に対して同じ処理を繰り返し適用する

用途:複数のデータに同じ処理を順番に適用し、結果を積み上げる

出力:各要素の処理結果の集合

つまり、「リスト処理」は配列を分類・抽出するためのもので、「イテレーション」は配列の各要素に同じ処理を繰り返し適用するためのものです。状況に応じて適切な方を選びましょう。

使い分けのポイント

ファイルの種類ごとに異なる処理をしたい場合は「リスト処理」を、同じ処理を複数のファイルに適用したい場合は「イテレーション」を使用するのが効果的です。

6. 実践ワークフロー:ポケモン進化系統自動生成の例

実際のDify活用事例として、テキスト入力をリスト化して処理する例を見てみましょう。以下は、ポケモンの名前を入力すると、その進化系統をすべて英語名で出力するワークフローの例です:

開始ノード
(ポケモン名入力)
コードノード
(文字列→配列変換)
イテレーション
(各ポケモン処理)
LLMノード
(英語名取得)
回答ノード

このワークフローでは、まずコードノードで入力されたポケモン名をカンマで区切って配列に変換し、イテレーションノードでそれぞれのポケモンに対してLLMを使って英語名を取得しています。

このように、文字列データであっても配列化することで「リスト処理」や「イテレーション」の機能を活用できます。

7. よくあるつまずきポイントと解決策

配列変数が正しく認識されない

原因:データ型の不一致

解決策:変数のデータ型を確認し、必要に応じてコードノードで型変換する

フィルタリング条件が働かない

原因:属性名や条件設定の誤り

解決策:正確な属性名(type、size、nameなど)を使用しているか確認

出力変数が次のノードに渡らない

原因:出力変数の選択ミス

解決策:「result」(全結果)か「first_record」(最初の要素)かを目的に応じて選択

ループ処理ができない

原因:Difyの制約

解決策:ループ内で終了条件を判定するループはワークフロー単体では実現できない。複数のワークフローを組み合わせる

重要なポイント

Difyのワークフローでは「ノードのループ」はできません。つまり、あるノードからフローを辿って元のノードに戻るような構造は作れません。また、一般のノードから「IF/ELSE」や「質問分類機」を使わずに2つのフローに分岐することはv0.8.0から可能になりました。

8. まとめ:リスト処理の効果的な活用法

Difyのリスト処理機能は、複数のデータや入力を効率よく処理するための強力なツールです。以下のポイントを押さえて活用しましょう:

  1. 適切なデータ型を使う:リスト処理は Array[string]、Array[number]、Array[file] のみ受け付けます
  2. 明確なフィルタリング条件を設定する:目的に応じて type、name、extension などの属性を活用
  3. ソートと上位N項目を組み合わせる:特に重要なデータだけを抽出するために効果的
  4. リスト処理とイテレーションを使い分ける:分類には「リスト処理」、繰り返し処理には「イテレーション」
  5. 複雑な処理は分割して考える:一度に複雑なことをせず、シンプルな処理の組み合わせで実現する

これらのテクニックを使いこなせば、Difyでより効率的で柔軟なAIアプリケーションを構築できるようになります。

次のステップ

リスト処理の基本を理解したら、次は「変数集約」や「テンプレート」などの機能と組み合わせて、より高度なワークフローを構築してみましょう。Difyのドキュメントも参照しながら、実際に手を動かして試してみることが上達の近道です。

会社紹介

運営:株式会社Spovisor(スポバイザー)

株式会社Spovisorではノーコード・ローコードツールを使ったシステム開発、アプリ開発を実施しています。
要件定義から伴走して支援し、安価・スピーディー・柔軟な開発を行います。無料でご相談もお受けしております。