お問い合わせはこちら

Difyのワークフローの作り方・使い方|チャットフローとの違いや例を解説

公開
更新

Difyのワークフロー機能は、AIアプリケーション開発を劇的に効率化する革新的なツールです。

複雑なAI処理を視覚的に設計できるため、コーディング不要でパワフルなアプリケーションが構築できます。

この記事では、ワークフローの基本概念から実践的な活用法まで、ステップバイステップで解説します。

Difyを使いこなしたいデベロッパーやノーコードでAIアプリを作りたいビジネスパーソンにとって、作業時間の短縮と機能拡張の可能性を広げる重要な知識となるでしょう。

目次

Difyのワークフロー機能で何ができるか?

Difyのワークフロー機能は、AIアプリケーション開発を革新的に簡素化する強力なツールです。複雑なタスクを「ノード」と呼ばれる機能ブロックに分割し、それらを視覚的に接続することで、プログラミング知識がなくても高度な処理フローを構築できます。テキスト生成、データ分析、条件分岐による意思決定など、多様なAI処理を直感的に設計可能です。

特に、複数のLLMの連携や外部APIとの統合、RAG(検索拡張生成)の実装が容易になり、ビジネスプロセスの自動化やコンテンツ作成ワークフローの最適化に最適です。ノーコードでありながら、エンタープライズレベルのAIアプリケーションを構築できる点が最大の魅力といえるでしょう。

Difyの「ワークフロー」と「チャットフロー」の明確な違い

Difyでは「ワークフロー」と「チャットフロー」という2つの異なるフロー機能が提供されています。チャットフローは対話型のシナリオに特化しており、ユーザーとの会話履歴(メモリ)を保持しながら継続的な対話を実現します。複数回のやり取りを前提とした質問応答や、文脈を理解した返答が必要な場面に最適です。

一方、ワークフローはシングルタスクの自動化処理に向いています。事前に定義した一連の処理ステップを順番に実行し、入力から出力までを一気通貫で処理します。データの変換・加工や定型的なコンテンツ生成など、対話を必要としない業務の自動化に適しています。チャットフローが「会話を続ける」ことを重視するのに対し、ワークフローは「タスクを完了させる」ことに焦点を当てた設計になっているのです。

比較項目チャットフロー
(Chatflow)
ワークフロー
(Workflow)
主な用途対話型シナリオ(マルチターン)
└カスタマーサービス、質問応答など
自動化・バッチ処理(シングルタスク)
└データ処理、コンテンツ生成、翻訳など
会話メモリ内蔵されている
└複数回の対話履歴を保存・伝達できる
内蔵されていない
└メモリ関連の設定がなく、有効化できない
初期ノード「開始」「LLM」「回答」が設定済み「開始」ノードのみが設定済み
終了ノード「回答」ノードを使用
└ストリーミング出力や処理の中間ステップでの出力をサポート
「終了」ノードを使用
└プロセス終了時にのみ選択可能
適した操作簡単な操作での実装外部データの参照や条件分岐
複雑なタスクの柔軟な処理

ワークフローが適した具体的なシナリオ

ワークフローが特に威力を発揮するのは、複数のステップを組み合わせた自動処理が必要なシナリオです。例えば、Webスクレイピングツールで特定URLの情報を取得し、LLMで要約した後にメール配信するような連続処理に最適です。

また、キーワードからWikipedia情報を取得して解説記事を自動生成したり、外部APIからデータを取得して整形・分析し、レポート形式で出力するビジネスプロセスにも適しています。

特に「イテレーション」ブロックを使えば、製品リストの各項目に対して同じ処理を繰り返し実行できるため、大量のコンテンツ生成や翻訳作業の自動化に役立ちます。これらのシナリオがチャットフローより適している理由は、対話なしで完結する単一目的のタスクであり、定期実行やバッチ処理が可能だからです。

Difyワークフローの基本的な作り方【チュートリアル】

Difyでワークフローを作成するプロセスは、直感的なノードベースの設計により、複雑なAI処理フローも視覚的に構築できます。ここではワークフロー機能を使いこなすための基本的な作り方を6つのステップで解説します。

  • ステップ1:ワークフローの新規作成と選択
  • ステップ2:開始ノードでの入力フィールド設定
  • ステップ3:ノード(ブロック)の追加と接続
  • ステップ4:各ノードのパラメーター設定(変数連携)
  • ステップ5:終了ノードでの出力定義
  • ステップ6:テスト実行と動作確認

ステップ1:ワークフローの新規作成と選択

まずはワークフローを新規作成

  1. Difyのスタジオ画面にアクセスしたら、まず左側中央にある「最初から作成」ボタンをクリックします。
  2. 「アプリタイプを選択>ワークフロー」のオプションを選択しましょう。
  3. アプリ名と簡単な説明文を入力します。アプリ名はワークフローの目的がわかりやすいものにしておくと、後々管理しやすくなります。
  4. すべての項目を入力したら、画面下部にある青色の「作成する」ボタンをクリックします。

これでワークフローの基本設定が完了し、ワークフローエディタ画面が開きます。ここからノードを追加して実際のフロー構築に進むことができます。

ステップ2:開始ノードでの入力フィールド設定

ワークフロー編集画面を開くと、最初から配置されている「開始」ノードが見えます。ここからまず開始ノードの設定をします。

  1. 開始ノードをクリックし、画面右側に設定パネルを表示します。
  2. 「入力フィールド」セクションの「+」ボタンをクリックし、「入力フィールドを追加」ダイアログが開きます。
  3. ユーザーからどのような入力を受け取るかを定義します。
  4. 設定できたら「保存」を押します。

フィールドタイプは「短文」(一行テキスト)、「段落」(複数行テキスト)、「選択肢」(ドロップダウン)など目的に合わせて選べます。
変数名は英語で設定し、後続ノードから参照するための識別子となります。ラベル名は日本語で設定でき、ユーザーに表示される項目名です。
最大長や必須項目の設定も可能で、入力の制約を設けられます。複数のフィールドを追加することで、ワークフローの初期入力として必要な情報を一度に収集できる仕組みになっています。

入力フィールドの編集画面

ステップ3:ノード(ブロック)の追加と接続

ワークフローの骨格となるノード(ブロック)を追加していきましょう。

  1. まず、「開始」ノードの右側に表示されている「+」ボタンをクリックします。
  2. 使用可能なノードの一覧から必要なブロックを選択していきます。例えば「LLM」を選ぶとAI処理用のノードが、「ツール > WikipediaSearch」を選ぶと情報検索用のノードがキャンバスに追加されます。

複数のノードを追加する場合は、各ブロックの「+」ボタンから同様に追加できます。必要に応じてノードをドラッグして配置を調整したり、不要な接続線を削除して新たに接続し直すこともできます。これにより、複雑な処理フローも直感的に構築できるのがDifyワークフローの強みです。

ノードの追加手順

ステップ4:各ノードのパラメーター設定(変数連携)

各ノードを追加したら、次はそれぞれのパラメーターを設定していきましょう。

ノードをクリックすると設定画面が開きます。例えばLLMノードでは、使用するAIモデルやシステムプロンプトを指定できます。ここで重要なのが変数連携です。プロンプト入力欄で「/」や「{{」と入力すると、前のノードから出力された変数を選択できるようになります。

例えば、開始ノードで定義した「user_query」という変数をLLMノードのプロンプトで「{{user_query}}」と記述すれば、ユーザーの入力内容をAIに渡せます。

同様に、WikipediaSearchノードの検索結果を「{{search_results}}」として次のノードに連携することも可能です。この変数連携により、ノード間でデータがスムーズに流れるワークフローが実現します。各パラメーターは目的に応じて調整し、必要に応じてテンプレート機能も活用しましょう。

LLMノードの利用例

ステップ5:終了ノードでの出力定義

ワークフローの最終段階として、終了ノードでの出力定義は非常に重要です。

  1. フローの最後に「終了」ノードをドラッグ&ドロップで配置し、前のノードと接続します。
  2. このノードをクリックして設定画面を開きましょう。
  3. 「出力変数」の「+」ボタンをクリックし、ワークフローが最終的に返す値を定義します。

例えば、LLMブロックで生成されたテキスト(変数名:text)を選択すれば、AIが作成した内容がアプリの最終出力として設定されます。複数の変数を出力したい場合は、追加の出力変数を設定することも可能です。

最終出力の設定画面

この終了ノードの設定により、ユーザーに表示される最終結果が決まるため、目的に合わせて適切な変数を選択することが大切です。

ステップ6:テスト実行と動作確認

ワークフローが完成したら、実際の動作を確認するためのテスト実行が不可欠です。

  1. 画面右上にある「実行」ボタンをクリックすると、テスト実行パネルが開きます。このパネルでは、開始ノードで定義した入力フィールド(例えば「調べたい単語」や「分析したいテキスト」など)に実際のテストデータを入力します。
  2. すべての必須フィールドを埋めたら、「実行を開始」ボタンを押してワークフローの処理を開始しましょう。
  3. 実行後は「結果」タブで最終的な出力内容を確認できるほか、「詳細」タブや「トレース」タブを活用することで、各ノードの処理時間や中間データの流れを詳細に分析できます。

特に複雑なワークフローでは、どのノードでボトルネックが発生しているかを特定したり、変数の受け渡しが正しく行われているかを確認したりするのに役立ちます。

テストの実行の様子

問題が見つかった場合は、ワークフロー編集画面に戻って調整し、再度テスト実行を繰り返しましょう。

ワークフロー構築で必須の主要ブロック(ノード)解説

Difyでワークフローを構築する際には、必ず使用する基本的なブロック(ノード)があります。これらは「必須ブロック」と呼ばれ、効果的なワークフローの基盤となります。

  • 開始ブロック:ワークフローの起点と入力定義
  • LLMブロック:AIによるテキスト生成と処理の中核
  • 知識取得ブロック:外部ナレッジ(RAG)の参照
  • 終了ブロック:ワークフロー処理結果の最終出力

ここからは各ブロックの機能について詳しく見ていきましょう。

開始ブロック:ワークフローの起点と入力定義

開始ブロックは、Difyワークフローの最初の一歩となる重要な要素です。すべてのワークフロー構築において必ず先頭に配置され、処理の起点として機能します。このブロックの主な役割は、ユーザーからの入力を受け取るための「入力フィールド」を定義することです。テキスト入力、数値、選択肢、さらにはファイルアップロードなど、様々な形式の入力を設定できます。

また、開始ブロックには「sys.user_id」や「sys.workflow_run_id」などのシステム変数が自動的に含まれており、これらの値は後続のノードで参照可能です。

開始ブロックの設定画面

これにより、ユーザー識別やワークフロー実行の追跡などの高度な機能を実装できます。入力フィールドの設定は直感的なインターフェースで行え、各フィールドには名前、説明、必須/任意の指定などの属性を付与できます。適切に設計された開始ブロックは、ワークフロー全体の使いやすさと機能性を大きく左右します。

LLMブロック:AIによるテキスト生成と処理の中核

LLMブロックは、Difyワークフローにおける最も重要な処理ユニットの一つです。このブロックを通じて、GPT-4やGemini、Claude 3などの大規模言語モデルを直接呼び出し、高度なAI処理を実行できます。テキスト生成、質問への回答、情報の要約、文章の校正など、AIに実行させたいタスクをプロンプト(指示文)として設定する中心的な場所となります。

LLMブロックの強力な機能は、前のノードから受け取った変数を動的にプロンプトに組み込める点にあります。例えば、知識取得ブロックで得た情報や、ユーザー入力を変数として「{{変数名}}」の形式でプロンプト内に配置すると、実行時に自動的に置換されます。

LLMブロックの設定画面

これにより、コンテキストに応じた柔軟なAI処理が可能になります。また、温度設定やトップP値などの生成パラメーターを調整することで、出力の創造性や厳密さをコントロールできるため、用途に応じた最適な応答を得ることができます。

知識取得ブロック:外部ナレッジ(RAG)の参照

知識取得ブロックは、Difyワークフローの中でも特に重要な機能の一つです。このブロックを使うことで、Difyに登録済みの「ナレッジ」(PDF、テキスト、Webページなど)から関連情報を検索・抽出できます。これがRAG(Retrieval-Augmented Generation)と呼ばれる技術の実装です。

知識取得ブロックの設定画面

例えば、LLMだけでは回答できない社内規約や最新の製品情報、専門知識などをAIに参照させたい場合に非常に有効です。実際の使用方法としては、ユーザーの質問やキーワード(クエリ変数)を基にナレッジベース内を検索し、関連性の高い情報を抽出します。

検索結果は「出力変数」として次のLLMブロックに渡されるため、AIはその情報を基に精度と信頼性の高い回答を生成できるようになります。これにより、一般的な知識と特定領域の専門知識を組み合わせた高品質な応答が可能になります。

終了ブロック:ワークフロー処理結果の最終出力

ワークフローの最終段階を担う「終了」ブロックは、全処理の集大成として機能します。このブロックはワークフロー内で必ず最後に配置され、それまでの処理結果をどのような形で出力するかを定義します。特に重要なのは「出力変数」の設定で、直前のLLMブロックが生成したテキストや、コードブロックによる計算結果など、ワークフロー内で生成された変数を最終出力として指定できます。

終了ブロックの設定画面

チャットフローでは「回答」ブロックがユーザーとの対話を継続させますが、ワークフローの「終了」ブロックはプロセスの完全な終点となり、設定した出力を返した時点で処理が完了します。複数の処理経路がある場合も、すべての経路は最終的に終了ブロックに集約されるよう設計します。

出力形式はJSON、テキスト、HTMLなど目的に応じて柔軟に選択可能です。

Difyワークフローの応用的なブロック(ノード)解説

Difyのワークフローをさらに強化するための応用的な以下のブロックについて解説します。

  • 質問分類器ブロック:入力内容に応じた処理の分類
  • IF/ELSEブロック:厳密な条件による処理の分岐
  • コードブロック:PythonやJavaScriptによる独自処理の実行
  • イテレーションブロック:リスト(配列)に対する繰り返し処理
  • テンプレートブロック:定型文への動的な変数挿入
  • HTTPリクエストブロック:外部APIとの自由な連携

質問分類器ブロック:入力内容に応じた処理の分類

質問分類器ブロックは、ユーザーからの入力内容をAIが自動的に分析し、事前に設定した複数のカテゴリ(クラス)に振り分ける強力な機能です。

例えば「製品に関する質問」「価格に関する質問」「サポートに関する質問」といったクラスを定義しておくと、ユーザーの質問内容に応じて最適な処理経路に自動的に振り分けることができます。この機能の優れている点は、複雑なルールや条件式を記述する必要がなく、自然言語でクラス名を定義するだけでAIが文脈を理解して適切に分類してくれることです。

質問分類器ブロックの配置

仮に「富山県の観光地について教えて」という質問が来れば「地域に関する質問」クラスに、「あなたは何ができますか?」という質問なら「機能に関する質問」クラスに自動振り分けされます。

これにより、一つのワークフローで多様な質問に対応できる柔軟なシステムを構築できます。ユーザー体験を損なうことなく、それぞれの質問タイプに最適化された回答フローを設計できるのが大きなメリットです。

IF/ELSEブロック:厳密な条件による処理の分岐

IF/ELSEブロックは、Difyワークフロー内で正確な条件判定に基づいた処理分岐を可能にするノードです。

質問分類器が確率的・あいまいな分類を行うのに対し、IF/ELSEブロックは「入力テキストに特定のキーワードが含まれるか」「数値が一定以上か」といった厳密な条件で分岐します。

IF/ELSEブロックの利用例

例えば、ユーザー入力に「富山」という文字列が含まれるかどうかで、富山県の観光情報を提供するか、別の処理に進むかを明確に分けられます。

条件設定は「含む」「含まない」「から始まる」「で終わる」「等しい」など多様な比較演算子を自然言語で指定でき、条件が真の場合(IF)と偽の場合(ELSE)でそれぞれ異なるノードへ処理を接続できます。

これにより、ユーザーの意図や入力内容に応じた精緻な対応が可能になり、より洗練されたワークフローを構築できるのです。

コードブロック:PythonやJavaScriptによる独自処理の実行

コードブロックは、Difyワークフローにおける最も柔軟なノードです。PythonまたはJavaScriptを用いて任意のロジックを実装でき、他のブロックでは実現しづらい細やかな制御や演算を可能にします。

たとえば、APIレスポンスから特定のフィールドを抽出・整形したり、数値データの平均値やスコアを算出したり、テキストを正規表現で加工するなど、多様な処理に対応します。

コードブロックの設定画面

コード内では他ノードの出力を変数として参照・更新できるため、AI生成結果を条件付きで加工して再利用することも容易です。また、結果をJSON形式で返すことで、後続ノードに構造化データを渡せます。IF/ELSEやテンプレートブロックと組み合わせることで、AIの出力を論理的に補完する「制御層」として機能し、LLMの曖昧さを補う精密な自動化フローを構築できます。

イテレーションブロック:リスト(配列)に対する繰り返し処理

イテレーションブロックは、複数のデータ要素に対して同じ処理を繰り返し適用したい場合に非常に便利なノードです。

例えば、製品リスト、トピックの配列、または任意のデータコレクションがあり、それぞれに同じAI処理を適用したい場合に活用できます。このブロックの基本的な仕組みは、入力として受け取ったリスト(配列)の各要素に対して、ブロック内部に設定した処理フローを順番に実行していくというものです。

イテレーションブロックの設定画面

具体的な使用例として、コードブロックで「[“初心者向け”, “専門家向け”, “子供向け”]」というオーディエンスリストを作成し、イテレーションブロック内のLLMノードでそれぞれのオーディエンス向けにカスタマイズされた説明を生成することができます。

これにより、同じ内容を異なる対象者向けに自動的に書き換える作業が一度の設定で完了します。また、大量の製品説明文の生成や、複数の言語への翻訳など、従来なら手作業で何度も繰り返さなければならなかった作業を自動化できるため、時間効率が大幅に向上します。イテレーションの結果は配列として出力されるため、後続の処理でまとめて活用することも可能です。

テンプレートブロック:定型文への動的な変数挿入

テンプレートブロックは、Difyワークフローの中でも特に便利な機能で、事前に用意した定型文に動的な変数を挿入できます。このブロックを使えば、他のノードから受け取った値を{{ 変数名 }}という形式で文章内に自然に組み込むことが可能です。

Jinja2テンプレート言語をサポートしているため、単純な変数挿入だけでなく、条件分岐や繰り返し処理などの高度な表現も可能です。

テンプレートブロックの利用

例えば、顧客名や商品情報を動的に挿入したメール文面の作成や、IF/ELSEブロックの結果に応じたエラーメッセージの表示など、様々なシーンで活躍します。

また、LLMブロックの生成結果を特定のフォーマットに整形してから終了ブロックに渡したい場合にも最適です。テンプレートブロックを活用することで、ワークフローの出力を一貫性のある読みやすい形式に保ちながら、個別の状況に合わせた柔軟な対応が実現できます。

HTTPリクエストブロック:外部APIとの自由な連携

HTTPリクエストブロックは、Difyワークフローを外部の世界と繋ぐ強力な架け橋です。このブロックを使えば、Dify内で完結していた処理を拡張し、インターネット上のあらゆるAPIサービスと連携できます。GET、POST、PUT、DELETEなどの標準的なHTTPメソッドをサポートしており、URLの指定はもちろん、ヘッダー情報、クエリパラメータ、リクエストボディ(JSON形式など)を詳細に設定可能です。

HTTPリクエストブロックの設定画面

例えば、社内の予約システムAPIと連携して空き状況を確認したり、気象情報APIから最新データを取得したりといった処理が実現できます。特筆すべきは、Difyが標準で提供していないサービスとも自由に連携できる点です。認証情報を含むヘッダーの設定や、前段のノードから受け取った変数をリクエストに組み込むこともできるため、ワークフローの可能性は無限に広がります。

レスポンスデータは自動的に解析され、JSONデータの特定フィールドを後続の処理で変数として利用することも容易です。これにより、AIの判断と外部システムを組み合わせた高度な自動化フローが構築できます。

Difyワークフローの活用例と機能拡張

Difyワークフローの基本的な構築方法を理解したら、次はその実践的な活用方法に目を向けましょう。ワークフローの真価は、実際のビジネスシーンや日常業務での応用にあります。カスタマーサポートの自動化から複雑な意思決定プロセス、データ分析パイプラインまで、様々な場面で活躍します。

特に注目すべきは、ナレッジベースとの連携や外部APIとの接続による機能拡張です。これにより、単なるAIチャットボットから、特定の業務領域に特化した高度な業務支援ツールへと進化させることができます。以下のセクションでは、具体的な活用シナリオと、それを実現するための拡張機能の実装方法を詳しく解説していきます。

実践的なワークフローの活用シナリオ例

Difyのワークフローは様々な実用シナリオで活躍します。例えば、Webページ要約ツールでは「HTTP Request」ブロックでURLから本文を取得し、「LLM」ブロックで指定文字数に要約させることで、長文記事を瞬時に理解できます。

ワークフローの活用シナリオ例

また、歴史学習アプリでは「知識取得」ブロックで時代背景を参照し、「LLM」ブロックで簡潔な解説と小テストを自動生成できます。Wikipedia解説アプリも人気のユースケースで、「WikipediaSearch」ツールで単語を検索し、「LLM」ブロックで要約とクイズを生成するフローが効果的です。

特に「IF/ELSE」ブロックを組み合わせれば、入力内容に応じて異なる深さの解説を提供することも可能です。これらのワークフローは一度構築すれば繰り返し利用でき、ビジネスプロセスの自動化や教育コンテンツの効率的な作成に大きく貢献します。

ワークフローへのナレッジ(知識)登録と活用手順

Difyでワークフローの精度を高めるには、自社のドキュメントやナレッジベースを活用することが不可欠です。

まず、Difyの上部メニューから「ナレッジ」を選択し、「ナレッジベースを作成」ボタンをクリックします。ここでPDFやテキストファイルをアップロードし、前処理設定では初心者の方は「おすすめ設定」を選択するのが無難です。

ナレッジ例

設定完了後「保存して処理」をクリックすると、AIが理解できる形式にデータが変換されます。次に、作成したワークフローに「知識取得」ブロックを追加します。このブロックのパラメーターから先ほど登録したナレッジを選択し、参照範囲や検索方法を設定します。最後に重要なのが、後続のLLMブロックのコンテキスト欄に「知識取得」ブロックの出力変数(例:{{knowledge_retrieval.results}})を設定することです。

これにより、AIはユーザーの質問に対して、一般的な知識だけでなく、あなたの専門ドキュメントの情報を基に回答できるようになります。

ワークフローへの外部ツール(Google検索など)連携手順

Difyのワークフローをさらに強化したいなら、外部ツールの連携が不可欠です。特にGoogle検索などの外部ツールを組み込むことで、AIの応答品質が飛躍的に向上します。連携手順は非常にシンプルで、まずワークフロー編集画面でノード追加ボタンをクリックし、表示される「ツール」タブを選択します。

外部ツールとの連携画面

ここからGoogle Search、Web Scraper、GitHubなど、必要なツールを選んでワークフローに追加できます。Google Searchなど一部のツールでは認証が必要となりますが、追加したブロックの設定画面にある「承認するには」ボタンから、必要なAPIキー(例:SerpApi API key)を入力・保存するだけです。

これで外部の最新情報をリアルタイムで取得し、より正確で時事的な応答を生成できるようになります。特にニュース関連や最新情報が必要なワークフローでは、この連携が大きな差を生み出すでしょう。

まとめ

Difyのワークフロー機能は、AIアプリケーション開発を視覚的かつ効率的に実現する強力なツールです。

チャットフローとは異なり、複雑な処理の自動化に特化しており、様々なノードを組み合わせることで高度なAIワークフローを構築できます。

基本的な作成手順から応用的なブロックの活用まで、このガイドを参考に独自のAIソリューションを開発してみてください。

外部知識やAPIとの連携も可能なため、ビジネスプロセスの自動化やコンテンツ生成など、幅広い用途に活用できます。

Difyでのワークフロー開発を通じて、AIの可能性を最大限に引き出しましょう。