見出し画像

初心者必見!Difyの「ブロック」全17+2種の機能・使い方を一挙紹介!

「Dify」はプログラミング不要で業務レベルの生成AIアプリを開発できるプラットフォーム。すでにリコーやサイバーエージェント等の国内有名企業でも活用されている、今話題の生成AI系ソリューションになります。

そんなDifyでは、5種類のアプリ作成用ひな形が用意されており、そのうちワークフローとチャットフローでは複雑な処理を行うアプリも作成可能です。

「ブロック」はこのワークフロー / チャットフローを構成する処理単位で、順番に繋いだり分岐させたりといったことができます。

今回はそんなワークフロー / チャットフローのブロックを徹底解説。基本のブロック17+2種の機能と設定方法をご紹介します。

本noteは「Dify初心者」の方に広くおすすめです。完読いただくと、以下のことがわかるようになるでしょう!

1️⃣ Difyのブロック全17+2種の概要
ワークフロー / チャットフローに標準で備わっているブロックの機能・使い方を解説します。

2️⃣ Difyのブロックの使用例
質問分類器やテンプレート等、機能がわかりにくいブロックの使用例をお見せします。

3️⃣ Difyのブロックに関連する用語の違い
ワークフローとチャットフローやIF / ELSEと質問分類器等、類似用語の違いをFAQ形式で解説します。


📌 Noteをご覧になっている方へ
WEELでは、生成AIを業務や事業に取り入れたい方向けの各種セミナーを開催しています。
「どんな活用ができるのか知りたい」「自社でどう始めればいい?」という方に向けて、現場視点のノウハウや最新事例をご紹介しています。
セミナーに参加する


Difyの「ブロック」とは?

ノーコードで生成AI搭載のアプリを構築できるプラットフォーム「Dify」では、アプリ作成用のひな形「アプリタイプ」が5種類用意されています。

そのうちの2種、ワークフロー / チャットフローでは、入出力 / LLM回答 / 条件分岐…etc.の機能をもった単位「ブロック」を処理の順に連結させて視覚的にアプリを構築可能です。

このブロックはDify活用の要で、機能を理解して使いこなせれば、業務レベルの高度なアプリの構築も夢じゃありません!生成AIアプリの内製化を目指している方にとっては必修の要素です。

なお、Difyの各アプリタイプについて詳しく知りたい方は、下記の記事も併せてご確認ください。


Difyで使えるブロック17+2種類を一挙紹介!

ここからは、Difyのワークフロー / チャットフローで使えるブロック全17種類(+トリガー2種類)をご紹介していきます。

ユーザー入力

Difyの「ユーザー入力」は、ワークフロー / チャットフローのスタート地点にあたるブロックで、アプリが受け付ける入力の形式を定義できます。

このユーザー入力の設定項目については、チャットフロー・ワークフローともに共通。まず、ワークフローでのユーザー入力の設定パネルは以下のとおりです。

ワークフローでのユーザー入力の設定パネル

続いて、チャットフローについては以下のようになります。

チャットフローでのユーザー入力の設定パネル

ともに、入力フィールド欄の右にある「+」をクリックして、アプリが受け付ける入力を下記に沿って定義できます。

アプリが受け付ける入力を定義
入力フィールドの種類1
入力フィールドの種類2

なお、後述するワークフロー専用のトリガー系ブロック(スケジュールトリガーやWebhookトリガー)は、ユーザー入力と共存不可。

ユーザー入力がすでにアプリ中に存在する場合は、トリガー系ブロックを選べない仕様となっています。

ワークフロー専用のトリガー系ブロック(スケジュールトリガーやWebhookトリガー)は、ユーザー入力と共存不可

スタート地点のブロックをトリガー系のものに変えたい場合は、一度ユーザー入力を削除すればOKです。

一度ユーザー入力を削除

LLM

「LLM」はDifyの核となる機能で、LLM(大規模言語モデル / テキスト生成AI)を使った処理ができるブロックです。

こちらではあらかじめDify内にインストールしたモデルプロバイダーのLLMを自由に選択して、テキスト・画像・ドキュメントの入力に回答させられます。

そんなLLMブロックのワークフローにおける設定パネルは以下のとおりです。

LLMブロックのワークフローにおける設定パネル

LLMブロックの設定パネルのうち、AIモデル欄からは以下の詳細設定パネルが展開できます。こちらでは採用するモデルのほか、Temperature(創造性)や出力の長さといった設定が可能です。

AIモデル欄からは以下の詳細設定パネルが展開できます。

採用するモデルを変えたい場合は以下のとおり、AIモデル欄→モデル欄→任意のモデルの順でクリックします。

AIモデル欄→モデル欄→任意のモデルの順でクリック

また、コンテキスト欄では、前段階のブロックで得られた出力変数(知識検索やWeb検索の結果等)を設定してLLMの回答に反映できます。こちらに知識検索の出力変数を設定することで、回答に引用元を表示可能です。

前段階のブロックで得られた出力変数

そして、続くプロンプト欄ではLLMの大まかな役割を決めるシステムプロンプト(SYSTEM)やLLMの実際の処理を決めるユーザープロンプト(USER)を入力可。

テキストのほか、前ブロックの出力変数やコンテキストを含めてプロンプトを定義できます。

前ブロックの出力変数やコンテキストを含めてプロンプトを定義

うち、ユーザープロンプト(USER)については入力が必須で、未記入の場合はアプリ実行時にエラーが発生します。

未記入の場合はアプリ実行時にエラーが発生

なお、チャットフローにおけるLLMブロックの設定パネルは以下のとおりで、メモリ(会話の記憶)のオンオフも切り替え可能です。

チャットフローにおけるLLMブロックの設定パネル

知識検索

Difyのワークフロー / チャットフロー共通のブロック「知識検索」では、事前に作成したナレッジベースを設定しておくことで、入力に関連する知識を出力できます。

知識検索の結果(出力変数)は後続のLLMブロックにコンテキスト経由で反映ができるため、LLMに独自の知識を扱わせたい場合に最適です。

知識検索の結果(出力変数)は後続のLLMブロックにコンテキスト経由で反映ができる

知識検索ブロックでの設定項目は以下のとおりです。

  • クエリテキスト:ユーザー入力やLLM回答等の検索キーワード

  • ナレッジベース:Dify内の別画面で事前に加工した独自の知識

  • メタデータフィルタ:知識検索時にメタデータ(付箋のようなもの)を参照するか否か

知識検索ブロックでの設定項目

なお、ナレッジベースの作成は、Difyトップ画面の「ナレッジ」欄から「+ナレッジベースを作成」を選ぶことで可能です。

Difyトップ画面の「ナレッジ」欄から「+ナレッジベースを作成」を選ぶ

出力 / 回答

ワークフローの「出力」ならびにチャットフローの「回答」では、アプリの処理結果のうち、ユーザーに表示するものを定義できます。

Difyの出力 / 回答の違い

うち、出力ブロックの設定パネルは以下のとおりです。

出力ブロックの設定パネル

こちらでは、出力変数欄の横にある「+」からユーザーに表示するものを選べます。

出力変数欄の横にある「+」からユーザーに表示するものを選べます。

次に、回答ブロックの設定パネルは下記のとおりで、ユーザー入力やLLM回答、定型文を組み合わせて自由に応答を定義できます。

ユーザー入力やLLM回答、定型文を組み合わせて自由に応答を定義

エージェント

Difyの「エージェント」ブロックでは、LLMにタスクの分解や解決方法の考案、ツールの使用といった複雑な処理を任せられます。

こちらはワークフロー / チャットフローに標準装備のブロックですが、使用にあたってはエージェンティック戦略(プラグイン)の事前インストールが必要です。

使用にあたってはエージェンティック戦略(プラグイン)の事前インストールが必要

このエージェントブロックではまず、プラグインとしてインストールしたエージェンティック戦略(LLMの挙動の枠組み)を設定します。

こちらはDify公式のエージェンティック戦略「Dify Agent Strategies」をインストールしている場合、以下が選択可能です。

  • FunctionCalling:LLMが設定した外部ツールを自動で選択・使用

  • ReAct:LLMがプロンプトで示した流れに沿って処理を試行錯誤

Dify公式のエージェンティック戦略

次に、エージェンティック戦略で「FunctionCalling」を選んだ場合は、以下の設定パネルが表示されます。

エージェンティック戦略で「FunctionCalling」を選んだ場合の設定パネル

こちらでは採用するモデルやツール、システムプロンプト(INSTRUCTION)、ユーザープロンプト(QUERY)等を設定可能です。

採用するモデルやツール、システムプロンプト(INSTRUCTION)、ユーザープロンプト(QUERY)等を設定可能
採用するモデルやツール、システムプロンプト(INSTRUCTION)、ユーザープロンプト(QUERY)等を設定可能2

質問分類器

Difyのワークフロー / チャットフロー共通の「質問分類器」ブロックでは、LLMによる入力の判別結果に沿って、後続の処理を切り替えられます。

こちらは後述のIF / ELSEブロックよりも柔軟・高度な条件分岐を実装したい場合におすすめです。

こちらは後述のIF / ELSEブロックよりも柔軟・高度な条件分岐を実装

質問分類器ブロックは、以下の設定に対応しています。

  • モデル:判別に使用するLLM

  • 入力変数:判別する対象

  • ビジョン:画像の判別に対応するか否か

  • クラス:後続のフローの繋ぐ場合の判断基準

質問分類器ブロック

なお、入力を食べ物か否かで判断する質問分類器に「プリン」を入力した場合、処理の過程・結果は以下のようになります。

処理の過程・結果

IF / ELSE

Difyの「IF / ELSE」ブロックでは、設定した条件に当てはまるか否かで後続の処理の切り替え(条件分岐)が可能です。

Difyの「IF / ELSE」ブロック

ワークフロー / チャットフローのIF / ELSEブロックで設定・確認できる項目は以下のとおりです。

IF / ELSEブロックで設定・確認できる項目
IF / ELSEブロックの各項目1
IF / ELSEブロックの各項目2

イテレーション

Difyの「イテレーション」は、配列中の各要素に対して別個に同じ処理を実行できるブロックです。

イテレーション

このイテレーションブロックの設定パネルで定義できる項目は、下記のとおりになります。

  • ブロック内ワークフロー:配列の各要素に対する処理を定義

  • 入力:前段階のブロックの出力変数を設定

  • 出力変数:ブロック内ワークフローの処理結果のうち、後続のブロックに渡すものを選択

  • パラレルモード:各要素の処理方法を順次処理から並列処理に変更

  • エラー応答方式:エラー発生時の残りの処理を、終了 / 失敗結果を残して継続 / 失敗結果を削除して継続のいずれかから選択

  • 出力をフラット化:無効化すると、各処理の結果が配列の場合に入れ子状の配列を出力

なお、イテレーションブロック内のワークフローでは配列の各要素(item)のほか、ファイルの形式(type)や名前(name)等も変数として選択が可能です。

ファイルの形式(type)や名前(name)等も変数として選択が可能

ループ

Difyの「ループ」は、入力(文字列・数値・配列全体等)に対して同じ処理を反復・重ねがけできるブロックです。

ループ

このループブロックでは、以下の要素を設定できます。

  • ブロック内ワークフロー:繰り返す処理の内容

  • ループ変数:ループの各周回時の結果を記録する変数

  • ループ終了条件:単一条件のほか、AND / ORによる条件の組み合わせにも対応

  • 最大ループ回数:無限ループを回避するための最大回数

ループブロックの要素1
ループブロックの要素2

コード実行

Difyのワークフロー / チャットフローでは、「コード実行」ブロックから、独自の処理をカスタマイズすることもできます。

こちらは数値計算向きの「Python」とJSON・文字列処理向きの「JavaScript」に対応しており、Difyにない処理を実現したい場合におすすめです。

「コード実行」ブロック

コード実行ブロックでは、入力変数と任意のPython / JavaScriptコード、出力変数等を設定できます。うち、入力変数とコードについては設定が必須です。

入力変数と任意のPython / JavaScriptコード、出力変数等を設定

なお、コード記述欄にはデフォルトの状態で、入力された2つの文字列を結合するPythonコードが例示されています。こちらは複数のLLM回答や知識検索結果をひとまとめにしたい場合に最適です。

コード記述欄にはデフォルトの状態で、入力された2つの文字列を結合するPythonコードが例示

テンプレート

Difyの「テンプレート」ブロックでは、任意のJinja2テンプレートにより、入力内容を整理・加工して出力できます。

こちらは出力 / 回答ブロックでユーザーに表示する内容の飾り付けや入力内容の条件分岐・反復処理による加工に最適です。

「テンプレート」ブロック

以下は4個の入力変数を見出しや太字で修飾するテンプレートの例になります。

テンプレートの例

こちらのテンプレートを実行した結果は以下のとおりです。

テンプレートを実行した結果

変数集約器

Difyの「変数集約器」は、条件分岐後の処理結果をどの分岐を辿ったかに関係なく、同じ1つの変数として扱うためのブロックになります。

変数集約器

この変数集約器を使うにあたっては、各分岐から集める変数を同じ型(文字列 / 数値 / オブジェクト / 真偽値 / 配列のいずれか)で揃える必要があります。

テキスト抽出

Difyのワークフロー / チャットフローには、「テキスト抽出」というブロックも存在します。こちらはアプリが受け取ったファイルを、LLMが処理しやすいテキストに変換するためのものです。

テキスト抽出

この​​テキスト抽出ブロックは以下のファイル形式をサポートしています。

  • TXTファイル

  • Markdown

  • HTMLファイル

  • Word(DOCX)

  • PDFファイル

  • Excel(.xls/.xlsx)

  • CSVファイル

  • PowerPoint(.ppt/.pptx)

  • EMLファイル

  • MSGファイル

  • EPUB書籍

  • VTT字幕

  • JSON / YAMLデータ

  • Propertiesファイル

変数代入

Difyの「変数代入」ブロックでは、変数として抽出した特定の要素(名前や電話番号等)をチャットフローの会話変数に反映できます。

会話変数に書き込んだ要素は、1つの会話(チャットルーム)中で保持され続けるのが特徴です。

変数代入

会話変数に対して行える操作は、下記のいずれかになります。

  • 上書き:現在の値を新たに得た値で置換

  • クリア:現在の値を削除

  • セット(配列以外):固定値を手動設定

  • 算術演算(数値のみ):会話変数中の値と新たに得た値を加減乗除で計算

  • 追加(配列のみ):配列の最後に1つの要素を追加

  • 拡張(配列のみ):他の配列から全要素を追加

  • 最初を削除(配列のみ):配列から最初の要素を削除

  • 最後を削除(配列のみ):配列から最後の要素を削除

会話変数に対して行える操作

なお、会話変数自体の設定は、チャットフロー作成画面の右上にある吹き出し(とx)のアイコンから可能です。

会話変数自体の設定

パラメータ抽出

Difyの「パラメータ抽出」は、LLMの力で入力から特定の要素(名前や電話番号等)のみを取り出して変数化できるブロックです。

パラメータ抽出

このパラメータ抽出では、以下の要素を設定できます。

  • 使用するモデル

  • 抽出元の入力変数

  • 出力時の変数名

  • 変数のデータ型(文字列 / 数値 / 真偽値 / 配列 / オブジェクトのいずれか)

  • LLM向けの抽出内容の説明

  • 抽出が必須か否か 等

パラメータ抽出の要素

なお、実際にパラメータ抽出を使った場合の結果は以下のとおりです。
(入力文の下に抽出した電話番号を表示)

パラメータ抽出を使った場合の結果

HTTPリクエスト

Difyの「HTTPリクエスト」ブロックでは、外部サービスとのデータの送受信が行えます。こちらはDify内にプラグインが存在しない外部サービスをワークフロー / チャットフローと連携させたい場合に便利です。

HTTPリクエスト

リスト処理

Difyの「リスト処理」は、配列の要素をフィルタリング・並び替え・選択できるブロックです。こちらは文字列 / 数値 / 真偽値を含む配列とファイル由来の配列に対応しています。

リスト処理

スケジュールトリガー

「スケジュールトリガー」は、ワークフロー限定で選べるトリガー系ブロックの1種です。こちらでは、設定パネルで指定した時刻・間隔でワークフローを自動的に開始させられます。

スケジュールトリガー

なお、スケジュールトリガーは同一アプリ内に複数個配置できます。ただし、ユーザー入力との共存はできませんので、ご注意ください。

Webhookトリガー

同じくワークフロー限定のトリガー系ブロック「Webhookトリガー」は、連携した外部ツールのイベントに呼応してワークフローを開始できるというものです。

こちらはトリガー系のプラグインが存在しないツールを、ワークフローのトリガーとしたい場合に適しています。

Webhookトリガー

Difyのブロック早見表

ここまででご紹介した、ブロック全17+2種の機能・できることを表にまとめると以下のとおりになります。

Difyのブロック早見表1
Difyのブロック早見表2
Difyのブロック早見表3
Difyのブロック早見表4

Difyのブロックに関するよくある質問・FAQ

最後に、Difyのブロックについてのよくある質問・FAQにお答えしていきます。

Q.Difyの料金は?無料で使える?

A.Dify自体は無料でも使えますが、別途生成AIモデルや外部サービスの使用料が必要な場合(API採用時)もあります。

なお、Web版Difyでは無料プラン1種と有料プラン2種が用意されており、アプリを多く使いたい場合は課金が必要です。一方、ローカル版Difyについては、無料でダウンロードが可能となっています。

Difyの料金プラン
https://dify.ai/jp/pricing

Q.ブロックの繋ぎ方は?

A.Difyのワークフロー / チャットフローにおけるブロックの追加・連結方法は下記のとおりです。

ブロックの繋ぎ方
Difyでのブロックの操作方法

Q.ワークフローとチャットフローの違いは?

A.ワークフローは「手順が決まっているタスクの自動化」に、チャットフローは「人との会話」にそれぞれ特化しています。両者の具体的な違いについては、下表をご覧ください。

ワークフローとチャットフローの主な違い

Q.初心者におすすめのブロック配置は?

A.Difyのワークフロー / チャットフローで初心者におすすめのブロック配置は以下のとおりです。

  1. ユーザー入力

  2. (IF / ELSEまたは質問分類器)

  3. 知識検索やWeb検索等の情報源

  4. (条件分岐がある場合は変数集約器)

  5. LLM

  6. 回答 / 出力

Q.IF / ELSEと質問分類器の違い

A.IF / ELSEブロックはシンプルな条件での分岐に、質問分類器ブロックは言語化・数値化が難しい複雑な条件での分岐にそれぞれ最適です。


Difyのブロックをマスターして、複雑なアプリを作ってみよう!

本noteでは、Difyのワークフロー / チャットフローで使える「ブロック」についてご紹介しました。

Difyのブロックはワークフロー / チャットフロー限定の要素で、入出力やLLM回答等の機能をもった処理単位です。こちらは処理順に繋いだり分岐させたりすることで、複雑な生成AIアプリを視覚的に構築できます。

みなさんもぜひぜひ、ブロックの機能・違いをマスターして、業務で通用するレベルの生成AIアプリを内製化しちゃいましょう!

なお、ノーコードツールのn8nの事を知りたい場合は以下の記事をご覧ください。


WEELでは、生成AIを業務や事業に取り入れたい方向けの各種セミナーを開催しています。

「どんな活用ができるのか知りたい」「自社でどう始めればいい?」という方に向けて、現場視点のノウハウや最新事例をご紹介しています。
セミナーに参加する

生成AIの最新ニュース・事例・イベント情報をいち早く知りたい方は、ぜひWEELの無料メルマガをご購読ください!
✉️ メルマガに登録する

💡 AI活用、どこから始めればいいかお悩みの方へ
「AIエージェントって実際にどう使うの?」
「チャットボット作ってみたいけど何から始めれば…?」

そんな方向けに、無料の個別相談をやってます!
現場での事例も交えて、わかりやすくお話しします。
今すぐAIの専門家と話す


いいなと思ったら応援しよう!