アプリケーション開発(アプリ)と聞くとITエンジニアの専売特許のような印象を受けますが、Difyというツールを利用することで非エンジニアでも簡単なアプリを開発することができます。今回は多くの企業で需要が高い顧客向けのチャットボットについて、電気屋さんのテストケースで開発してみます。
Difyの体系的な解説は別記事に譲りますが、Difyはノーコードで操作の可能なアプリ開発ツールなので、今回の記事を読んでイメージを持てた場合は、実際に手を動かしてみると、非エンジニアでもできる領域が広がります。
【無料配布中】「企業版AIの導入アプローチ」
ChatGPT、Copilot、ExabaseといったAI関連ツールが多くサービス提供される中で、企業におけるAI導入アプローチを俯瞰的に整理しています。どのようなタイプのツールがあり、結局何を使ったら良いのか、シンプルかつ感覚的に、かつ短時間で理解されたい方におすすめです。
Difyとは
Dify(ディファイ)は、AIアプリ開発を革新的に簡素化するオープンソースプラットフォームです。プログラミング初心者でも使いやすいノーコードツールとして設計されており、生成AI技術を活用して多様なAIアプリを構築することができます。
Difyの最大の特徴はノーコードでアプリ開発ができる点です。直感的なUI(ユーザーインターフェース)と豊富なテンプレートを用いることで、初心者でも簡易的なアプリであればスムーズに開発することができます。
また、実装できる機能も充実しています。言語理解・生成機能である大規模言語モデルはOpenAIのGPTだけでなく、AnthropicのClaudeなど多くの選択肢の中から選択することができます。加えて、任意のデータファイルを検索して回答のインプットとできるRAG(Retrieval-augmented generation:検索拡張生成)という機能も活用することができるため、生成AIの機能を最大限に活かしたアプリを開発が可能です。
商用利用のハードルが低いことも特徴です。ウェブ上で利用する際には無料から試すことができます。また、ローカル環境やAWSといったクラウドサーバー上に開発環境を構築することもできるオープンソースモデルなので、セキュリティレベルなどの個社の事情に合わせた開発が可能となります。
Difyの主要機能
Difyを用いてアプリ開発をする場合には大きく2通りの方法があります。
1つ目が「チャットボット方式」です。チャットボットに期待する役割、お願い事項、出力フォーマットについて主にプロンプトを通して定義する方法です。ChatGPTのGPTsが類似サービスとして挙げられ、RAGで利用する知識をいくつかのファイル形式でアップロードすることができます。
2つ目は「チャットフロー方式」です。知識取得や言語生成など、アプリのプロセスの中に持たせたい機能(ノード)をコネクタで視覚的に繋ぎ合わせることでアプリを開発する手法です。ノードの定義・使い方についての理解は必要になりますが、直感的な開発が可能です。
「チャットフロー方式」のノードについては一覧を示しておきます。
開始 (Start) | ワークフローの初期パラメータを定義。 |
終了 (End) | ワークフローの最終出力内容を定義。 |
返信 (Answer) | チャットフロー内の回答内容を定義。 |
大規模言語モデル (LLM) | 大規模言語モデルを呼び出して質問に答えたり、自然言語を処理したりします。 |
ナレッジ検索 (Knowledge Retrieval) | ユーザーの質問に関連するテキストをナレッジベースから検索し、下流のLLMノードのコンテキストとして使用します。 |
質問分類器 (Question Classifier) | 分類の説明を考慮することで、LLMがユーザーの入力に基づいて適切な分類を選択できるようにします。 |
IF/ELSE (条件分岐) | if/elseの条件に基づいてワークフローを2つの分岐に分けることができます。 |
コード実行 (Code) | Python / NodeJSコードを実行してワークフロー内でデータ変換などのカスタムロジックを実行します。 |
テンプレート (Template) | Jinja2のPythonテンプレート言語を利用して、データ変換やテキスト処理を柔軟に行うことができます。 |
変数集約 (Variable Aggregator) | 複数の分岐の変数を1つの変数に集約し、下流ノードの統一設定を実現します。 |
パラメーター抽出器 (Parameter Extractor) | LLMを利用して自然言語から構造化パラメーターを推論し、後続のツール呼び出しやHTTPリクエストに使用します。 |
イテレーション (Iteration) | リストオブジェクトに対して複数回のステップを実行し、すべての結果を出力します。 |
HTTPリクエスト (HTTP Request) | HTTPプロトコルを介してサーバーリクエストを送信し、外部検索結果の取得、webhook、画像生成などのシナリオに適用されます。 |
ツール (Tools) | Dify内蔵ツール、カスタムツール、サブワークフローなどをワークフロー内で呼び出すことができます。 |
Difyの初期設定などの体系的な説明は別記事に譲りますが、今回の記事では、Difyで特徴的な「チャットフロー方式」でチャットボットアプリを作ってみます。
Difyで作成するチャットボットの仕様
今回作成するチャットボットの仕様について簡単に整理しておきます。
シチュエーション
ある電気屋さんのホームページに設置するチャットボットを想定しています。お客様から製品に関する質問、企業活動に関する質問が寄せられ、チャットボットを介してこれらの質問に回答できるようにしたいです。
- 製品に関する質問:取り扱う冷蔵庫、扇風機、PCに関するもの。
- 企業活動に関する質問:事業内容、業績、CSR、採用に関するもの。
プロセスフロー
今回は質問内容による分岐、FAQリストを参照した情報検索を含むシンプルなプロセスをベースに開発しようと思います。
- ユーザーからの質問を受け付けます。
- システム側で「製品に関する質問」「企業活動に関する質問」「その他の質問」に分類します。
- 「製品に関する質問」「企業活動に関する質問」については用意しておくFAQリストの情報を参照して、質問に回答します。
- 「その他の質問」については、「本チャットでは回答できません。」と回答します。
Difyの開発ステップ
次の3ステップでチャットボット開発を進めていきます。3番目が少し難しいです。
「製品に関する質問」「企業活動に関する質問」それぞれ準備する。
Dify上でデータファイルを読み込む。
プロセスフローに合うようにノードを設定。
Step1:データファイルの作成
データファイルはChatGPTを用いてエクセルファイル形式で用意しました。「製品に関する質問」「企業活動に関する質問」はファイルに分けています。データファイルはChatGPTなどでダミーファイルとして簡単に用意することができます。
Step2:知識ベースの設定
続いて、Dify上のナレッジスペースに移動します。「ナレッジを作成」にファイルをドロップすると設定ができます。
設定画面の詳細については割愛しますが、まずは写真の通りで良いと思います。保存を押します。
対話フローの設計
続いて、Dify上のスタジオスペースからワークフロー形式の開発画面に行きます。「最初から作成」をクリックして「チャットフロー」を選択した上で、「アプリ名」を入力して「作成する」をクリックします。
最初に最終的なノード構成を共有します。
作業としてはシンプルで、左下の部分をクリックしてノードを出力し、それぞれのノードの詳細設定を進め、連続するノード同士を繋ぎます。
各ノードの設定項目についてざっとご紹介しておきます。開始ノードでは「入力フィールド」を定義しています。
その後質問分類器で質問内容によって行き先を分岐させる設定をしています。
製品に関する質問については、製品に関する情報を取得するために知識取得ノードに繋がります。
取得した情報はその後のLLMにインプットされ、回答が生成されます。
回答を出力する回答ノードの書き方もお示ししておきます。
「企業活動」に関するノードは「製品」に関するノードと同様です。「その他」の質問については回答ノードに「回答不可」と設定しています。
トライアル
Difyの特徴ですが、今回作成したアプリはウェブ環境であれば(自社環境ではなく)、URLを共有することで第3者に共有し、試してもらうことができます。URLを貼っておくので興味がある方は試してみてください。この章では回答結果についてご紹介していきます。
製品に関する質問
「冷蔵庫のドアが開かない」という不具合について質問を入力するときちんと回答が返って来ました。ちなみに、この設定ではエクセルファイル以外の情報は参照していないので、勝手に回答を作り出されたくない、というシチュエーションにも打ってつけですね。
h3:企業活動に関する質問
企業活動についても「今期の業績について」質問してみました。
h3:その他の質問
製品や企業活動以外の質問についてもきちんと識別され、設定した回答が返ってきました。
h2:最後に
今回はAIアプリ開発界隈で話題を集めているDifyを用いて、顧客向けチャットボットを作成してみました。非エンジニアであっても直感的にアプリ開発ができる「身近さ」を感じてもらえますと嬉しいです。
また、お気づきかもしれませんが、Difyのチャットフローはチャットボットのように循環系の処理に向いておらず、直線的な処理に向いています。そのため、チャットというより、情報処理の自動化など、効率化の文脈でより活躍することになります。機能の使い分けについては、色々と作りながら見極めていけるようになることが理想です。
ご説明したようにDifyには今回使用した以外にもGoogle検索や論文検索などの多くのAPIがノードとして用意されているので、組み合わせ次第で様々なモノづくりが可能になります。この辺りはまた別途ご紹介したいと思っています。