お疲れ様です。tkmiです。
ノーコード・ローコードでアプリが作れちゃう時代なので、Difyを触ってみました!
Difyは、AIワークフローを構築するためのオープンソースプラットフォームです。
ビジュアルキャンバス上でAIモデルを編成し、データソースを接続し、処理フローを定義することで、ドメイン知識を直接動作するソフトウェアに変換できます。
(引用)https://docs.dify.ai/ja/use-dify/getting-started/introduction
AI使って普段の作業を自動化できます!
しかも画面上でブロックを設置してポチポチ繋げるだけで、プログラミング知らなくても作れる!
たとえば、「データを読み込む」→「AIに分析させる」→「結果をまとめる」といった流れを、視覚的に組み立てられる!
自分の持つ専門知識やアイデアを、実際に動くアプリやシステムに変換できますよ!
っていう感じでしょうか。
どんなものが作れるか?
- チャットボット
たとえば 社内FAQボット、マニュアル回答AIなど、何かの情報源からAIが探してきて回答するボットを作れます。
情報源はDify内で「ナレッジ」から登録することができます。
- ワークフロー自動化
何かを調査するために、今まで人がやってた検索+要約+判断をポチポチとノードを置いて、繋げて、設定するだけでできます。
検索したいキーワードを入力するだけで対象のサイトから情報を集めて要約して結果を出力してくれます。
触ってみよう
30分チュートリアルで大体の機能を触ることができます。
指定したプラットフォーム向けに、投稿用のコンテンツを作成するワークフローになります。
基本的にはこちらを実施することで大丈夫なのですが、その中でもよく使いそうなところだけ解説したいと思います。
チュートリアルをベースに細かい設定方法について解説します。
30分チュートリアルを実施しながら、設定方法がわからないなと思ったら参考にしてください。
-png.png?width=1000&height=344&name=image%20(1)-png.png)
- 開始ノード:ユーザーからの入力を受付
アプリを作成する時、開始ノードを選択するので、ユーザー入力を選択します。
2つ目以降を追加する時は空白部分を右クリック→「ブロックを追加」でできます。
チュートリアルをやってみて思ったのが、大体は「ノード」=「ブロック」の理解で大丈夫かなと思いました。
一つのワークフロー上で開始ノードは1つしか設定できません。
- 入力項目の設定
これらを参考にして5つの項目を開始ノードに設定していきます。
-png.png?width=1000&height=391&name=image%20(2)-png.png)
-png.png?width=1000&height=635&name=image%20(3)-png.png)
- パラメータ抽出器ノード
開始ノードの「ターゲットプラットフォーム」に設定した項目を受け取って、LLMを利用して入力内容を分析します。
これは自然言語で入力されたテキストから次のノードに渡すための処理です。
基本的には英語での入力が想定されていると思いますが、「XとLinkedInの投稿」など日本語でも大丈夫です。
このノードでは自然言語の解析にLLMのモデルを選択する必要があります。モデルは多くは「プラグイン」からインストールすることができます。
- プラグイン
ChatGPTなどの外部のLLM利用アプリを使う場合、多くは「プラグイン」のインストールが必要になります。
また、DifyはデフォルトでChatGPTの無料クレジットが少しついているので、試すだけなら無料でChatGPTを対象としてLLMノードを使うことができます。
無料クレジットを使い切ったり、他のプラグインを使いたい場合、外部アプリのアカウントを個別に登録して、APIキーを取得し、Difyに戻ってきてAPIキーを設定する必要があります。
-png.png?width=1000&height=609&name=image%20(4)-png.png)
「プラグインをインストールする」からマーケットプレイスを選択
-png.png?width=1000&height=522&name=image%20(5)-png.png)
欲しいプラグインを検索すると出てきます。(Geminiは例です)
-png.png?width=1000&height=490&name=image%20(6)-png.png)
APIキーの設定はプラグインの一覧から該当のインストールしたものを選択すると設定ボタンが出てきます。
右上のアカウント→設定→モデルプロバイダーからも一部見れます。
-png.png?width=1000&height=479&name=image%20(7)-png.png)
- リスト演算子ノード:アップロードされたファイルをタイプ別に分離
コンテンツ作成のための情報としてファイルを複数アップロードすることができます。
画像とドキュメントで処理をわける必要があるため、2つのノードを繋げます。
- ドキュメント抽出器ノード:ドキュメントからテキストを抽出
説明の通り、テキストを抽出します。
右クリック「変換」→「テキスト抽出」ノードを選択します。
ここまでまだ入力した項目の処理です。
- LLMノード:すべての参考資料を統合
ようやく入力した項目からコンテンツを作成するための基盤を生成します。
ここで注意するのが、モデルの選択です。「ビジョンをサポートするモデル」を選択します。
なんて突然言われても「???」なので、補足すると、「テキストと画像を認識して返答ができる機能」に対応しているか、ということになります。
LLMノードには「画像」と「ドキュメント」のそれぞれから抽出した情報が渡されます。
画像の読み取り・画像の内容の説明などに対応します。
OpenAIのモデルの中から、「マルチモーダル機能」に「VISION」というアイコンがついているモデルを選択します。
-png.png?width=1000&height=312&name=image%20(8)-png.png)
-png.png?width=1000&height=433&name=image%20(9)-png.png)
-png.png?width=1000&height=402&name=image%20(10)-png.png)
選択できない場合、Dify登録時に無料でついてくるAPIを使うためのクレジットを使い切ってる場合があります。その場合はOpenAI API PlatformからAPIキーを発行して認証設定してください。
- イテレーションノード:各プラットフォーム向けにカスタマイズされたコンテンツを作成
作成したコンテンツをプラットフォームごとに最初に入力した「ボイス&トーン」と合わせて、指示内容の通りにコンテンツを作成していきます。
スタイル識別に変数を指定する必要があるのですが(Current Iteration/itemの部分)、注釈にもある通り、差し込みたいところで「{」「/」いずれかを入力するとリストが表示されます。
「現在のイテレーション(Current Iteration)」の「item」を選択します。
-png.png?width=1000&height=465&name=image%20(11)-png.png)
コンテンツ作成にも同じく、参照する変数を設定していきます。
設定方法は先ほどと同じく挿入箇所で「{」「/」を入力してください。
-png.png?width=1000&height=875&name=image%20(12)-png.png)
あとはどのように出力するかのテンプレートノード、実際に出力する出力ノードを追加して終わりです。
テンプレートのコードは「Jinja2」のみだそうです。pythonのテンプレートエンジンだそうです。なじみ深い書き方です。


以上、30分クイックスタートをやってみてもうちょっと補足が欲しいなと思ったところでした。
ワークフローは、以下のような分け方で、上から下へ変数を渡していって処理する構造になっているようです。
- 入力項目の設定
- 入力項目の分析、分類(必要であれば)→LLMに渡すための整形
- やりたいこと(30分クイックスタートであれば「コンテンツ作成」。API連携もできるので、外部に連携してデータの更新も可能)
- 出力(必要な場合)
少しでもDifyについて理解する手助けになればと思います。

