「Difyのワークフローって何?」
「Difyのワークフローでどうやって業務効率化できるの?」と悩んでいる方は多くいらっしゃるのではないでしょうか。
Difyのワークフローを活用することで業務を自動化でき、業務効率の向上に繋がります。
本記事ではDifyのワークフローの概要、構成説明、各ノードの説明、ワークフローの構築方法初級編・応用編を詳しく説明していますので是非最後までご覧ください。
Difyのワークフローとは?
Dify(ディファイ)とは、生成AIを活用してアプリを開発できるプラットフォームです。
その中の「ワークフロー機能」では、タスクを小さな工程に分解し、分解されたそれぞれの工程を繋ぎ、処理の流れを構築します。
その流れに沿ってAIが自動で作業を進めるため、複雑な業務プロセスを自動化し、作業効率を向上させる便利なツールです。
Difyのワークフローの構成説明
Difyのワークフローは「一般化タスク実行ロジック」という考え方を採用しています。
この考え方はどんなタスクも「入力」「処理」「出力」の三段階に分割できるという考え方です。
Difyでは入力や処理の1つのプロセスを担当するボックスのことを「ノード」と呼びます。
Difyワークフローで使えるノード
ここではDifyワークフローで使用できるノードを紹介します。
開始ノード
開始ノードとはワークフローの最初に設置必須のデフォルトノードです。
開始ノードには「入力フィールド」と「システム変数」の二つの設定部分があります。
入力フィールドでは、アプリを起動したときにユーザーに記入してもらう情報を設定できます。(例:氏名、生年月日、ファイルなど)
システム変数とはユーザーの入力やアップロードされたファイル、対話のセッション情報など、ワークフローの初期情報を提供するシステムレベルのパラメータです。

終了ノード
終了ノードとはワークフローの最終結果を出力するために必須のノードです。
終了ノードの後に他のノードを追加することはできません。
単一ルートの場合は一つ、複数ルートの場合は複数終了ノードを設置できます。
・単一ルートの場合

・複数ルートの場合

LLMノード
LLMノードとはワークフローの中心的なノードです。
複数のChatGPTモデルを活用して質問に回答したり、自然言語を処理します。
プロンプトを工夫することによってさまざまな処理をアプリ内でAIに委託できます。(例:テキスト生成、ファイル分析、画像理解など)
回答ノード
回答ノードとはユーザーのアクションに対しての返信をする機能です。
以下三つの返信方法を利用できます。
①純テキストを出力

②LLMノードの返信内容を出力

③生成された画像を出力
「画像+LLMの返信」のように上記の返信方法を組み合わせることも可能です。

知識検索ノード
知識検索ノードとはユーザーの質問に関連するテキスト内容をナレッジから検索する機能です。
検索した結果をLLMを通してユーザーに返信します。
ナレッジの登録方法は以下のDifyでワークフローを構築【応用編】で説明しています。

質問分類
質問分類ノードとはユーザーからの入力を事前に設定したカテゴリに分類し、適切なワークフローへと導く機能です。
このノードは、LLMの自然言語処理能力を活用してユーザーの質問内容を解析します。

条件分岐 (IF/ELSE)ノード
条件分岐ノードとはif/else 条件に基づいてワークフローを2つの分岐に分ける機能です。
条件は以下の8種類から選択可能です:
- 含む(Contains)
- 含まない(Not contains)
- ..から始まる(Start with)
- ..から終わる(End with)
- である(Is)
- ではない(Is not)
- 空である(Is empty)
- 空ではない(Is not empty)
条件分岐ノードは上記の条件が真の場合と偽の場合で異なった処理を設定できます。

コード実行ノード
コード実行ノードとは、ワークフロー内でPythonやNode.jsのコードを直接実行できる機能です。
このノードを活用することで数値の計算やJSON形式のデータ変換、特定の文字列操作など、通常の設定だけでは難しい処理をできるようになります。

テンプレートノード
テンプレートノードとはあらかじめ用意されたフォーマットに変動するデータを埋め込んで文章を生成する機能です。
このノードを利用することでメールや報告書などの統一された部分を入力する必要がなくなり、業務効率化に繋がります。
テキスト抽出ツール
テキスト抽出ツールノードは、情報を処理する中心的な役割を果たします。
LLMはアップロードされたファイルの内容を直接読み取ることができないため、このノードがファイルの内容を読み取り、LLMに情報を提供します。
以下のリスト処理ノードと併用されることが多いです。
リスト処理ノード
リスト処理ノードは複数のファイルがアップロードされたとき、ファイル形式をを分析し、異なる形式のファイルをそれぞれ対応する処理ノードに誘導する機能です。
また、ファイル名、ファイルサイズ、ファイル形式などの要素に基づいて並び替えることもできます。

変数集約ノード
変数集約ノードは異なる分岐からの出力をまとめ、どのルートが実行された場合でも統一された変数を介して結果を参照・利用できるようにします。
問題分類後やIF/ELSE 条件ブランチ後などのマルチブランチワークフローで活用されることが多いです。

変数代入ノード
変数代入ノードとはワークフロー内で情報を一時的に保存し、後の処理で再利用するための機能です。
例えば、ユーザーが入力したデータやアップロードしたファイルなどをこのノードを使って保存できます。
保存された情報はワークフロー内の他の部分で簡単に呼び出して使うことができ、作業の効率化やデータの一貫性を保つのに役立ちます。
イテレーションノード
イテレーションノードとは、リスト形式のデータを一つずつ処理するための機能です。
例えば、複数の領収書画像がある場合、これらを順番に処理して情報を抽出する際に役立ちます。
このノードは、リスト内の各項目に対して同じ手順を繰り返し適用し、最終的にすべての結果をまとめて出力します。
これにより、同じ処理を複数のデータに対して効率的に行うことができます。
パラメータ抽出ノード
パラメータ抽出ノードとは、ユーザーが入力した自然な言葉をシステムが理解できる形式に変換する機能です。
これにより、システム内の他のツールやプロセスがその情報を適切に処理できるようになります。
以下の例ではArxiv論文検索ツールの入力パラメータとして「論文の著者」または「論文番号」が要求されます。
パラメータ抽出器は「この論文の内容は何ですか:2405.10739」という質問から論文番号2405.10739を抽出し、ツールのパラメータとして正確に検索します。

HTTPリクエストノード
HTTPリクエストノードは、外部のウェブサービスやAPIにリクエストを送信する機能です。
このノードを使うことで、他のウェブサイトから情報を取得したり、データを送信したりできます。
リクエストを送った後は、受け取ったレスポンスを使って次のステップに進むことができます。
また、ユーザー名や顧客ID、フィードバック内容など、変動するデータをリクエストに組み込むことができます。
例えば、顧客のフィードバックに基づいて自動返信メッセージを個別に作成したり、特定の顧客データを使って関連情報を別のサーバーに送信したりすることができます。

Difyでワークフローを構築【初級編】
次にDifyを使ったワークフロー構築方法についてご説明します。
今回は、海外記事のURLを取得し、それを日本語に要約するワークフローを作成しました。
このワークフローの作り方を一からご説明します。

step1:STARTに入力する変数を設定する
まずは、「START」ノードの「・・・」を選択し、入力フィールドの設定をします。

今回は「foreign_page_url」という変数名で登録しています。
step2:入力先ノードの設定をする
今回は、初期画面で入力されたURLをJina Readerを使って読み込みます。
入力変数の箇所に、先ほどSTARTノードで設定した、「foreign_page_url」を紐付けます。
この作業は、連結させるノードの個数分行うことになりますが、基本的にやり方は同じです。
Jina AIのAPIキーは以下のサイトから無料で取得できます。
step3:LLMと連携する
JINAREADERで読み込んだ内容をLLMで要約します。

「コンテキスト」欄では、JINAREADERの出力変数を取得します。
「system」では、LLMを動作させるためのプロンプトを入力します。
この際、プロンプトとコンテキストを結合させる必要があるため、「/」を入力し、コンテキストで選択したものと同じ変数を指定してください。
step4:結果を見てみる
今回は、BBCのこちらの記事を入力しました。
問題なく要約を行えていることが確認できます。

Difyでワークフローを構築【応用編】
①ナレッジを登録してRAGを利用
ここではナレッジの登録方法を説明します。
ナレッジを登録することでより深い、専門的な知識をワークフローで活用できるようになります。
STEP1
まずはDifyにログインしてナレッジのページを開いてください。

STEP2
「ナレッジを作成」を選択し、テキストファイルのアップロードまたはウェブサイトからの同期を行ってください。
テキストファイルをアップロードする場合は「参照」をクリックしてファイルを選択、あるいはドラッグ&ドロップを行ってください。
一度にアップロードできる最大サイズは15MBです。また、一度に複数のファイルをアップロードすることも可能ですが、ファイル数の上限はプランによって異なります。
オンラインデータを取り込む場合はJina Reader・Firecrawlの設定が必須となります。

STEP3
テキストの前処理とクリーニングの設定をします。
こだわりがない場合は、調整せずに青い「保存して処理」というボタンをクリックしてください。

STEP4
ワークフローにもどり、ナレッジを追加したいノードにカーソルを置いてください。
以下のリストが出現するで「知識取得」ノードを選択してください。

STEP5
ナレッジの右側にある「+」をクリックすると先ほど登録したナレッジを選択できます。

②API連携で外部ツールと連携
Difyのワークフローでは外部ツールを組み込むこともできます。
ここではその方法を説明します。
STEP1
ワークフローを表示し、外部ツールを組み込みたいノードにカーソルを置いてください。
現れたリストの上にある「ツール」をクリックしてください。

STEP2
利用したいツールを選択して、「承認するには」をクリックしてください。

STEP3
APIキーを「取得方法」をクリックして取得し、入力したら保存してください。

以上の方法でナレッジやツールをワークフローに組み込むことができます。
この二つを活用することでより高度なワークフローを構築することが可能になります。
まとめ
今回はDifyのワークフローについて詳しく説明しましたがいかがだったでしょうか。
以下が本記事の簡単なまとめです。
- Difyのワークフロー機能はタスクを細かく分解し、処理の流れを作成して自動化を実現するツール
- さまざまなノードを活用して、柔軟で効率的な業務フローの設計が可能
- 外部ツールやナレッジを利用することで高度な処理やカスタマイズされたレスポンスもできる
Difyのワークフローを活用することで、業務プロセスの効率化と精度向上を実現し、より迅速で柔軟な業務遂行が可能になります。