Difyを使ってAIアプリケーションを開発してみた

記事タイトルとURLをコピーする

はじめに

こんにちは、最近暑すぎて冷たい悪魔素麺なるものにハマっている25卒の山本です!
今回は、近年大流行りしているAIに関するアプリケーション開発について簡単に構築ができるプラットフォームである「Dify」について触れてみたので実際の構築内容と感想も交えつつご紹介したいと思います。

Difyとは?

今回「Dify」という名前は私は初めて聞きましたが、調査したところ特徴として以下のようなものがありました。

  • ノーコード/ローコードでAIアプリケーションを開発・運用できるプラットフォーム
  • AIへの指示をGUIのみで設計可能
  • 独自の資料を知識ベースとして構築し応答の精度を上げることが可能
  • 様々なAIエージェントと連携させることが可能

Difyは業務効率化の鍵となるAIソリューションを簡単に開発・展開できるプラットフォームです。
上記の特徴により、専門知識が無くても高度なAIを活用したシステムを構築することが可能になります。

ユーザー名は置いといて、シンプルなUIで操作が可能

DifyとRAGの関係性

前述したように、AIアプリケーションの開発が流行していく中で「RAG」という用語に出くわすタイミングも多いのではないかと思います。
ここでは、DifyとRAG開発の相性についても触れていきます。

RAGとは?

RAGは「検索拡張生成(Retrieval Augmented Generation)」の略です。
ChatGPTのようなAIに対して外部の資料(社内のマニュアルや特定のWebサイト)を「カンニングペーパー」として知識ベースを構築し、その知識ベースに基づいて回答を生成させる技術のことです。
RAGを使用することで以下のようなAIの弱点を補う(完全に克服するわけではありません)することができます。    

  • 学習しきれていない特定の情報に対するハルシネーション(嘘をつくこと)
  • 最新情報や社内独自の情報に対する鮮度の悪さ

 
知識ベースを作ることで特定の情報・そして鮮度の良さを保つことも可能となるので上記の弱点に対しても優位に働くというわけです。

DifyとRAGの相性

DifyはこのRAG機能をとても簡単に扱えるように設計されています。
通常、RAGシステムを自分で作ろうとすると、専門的なプログラミングの知識や、AWSなどのクラウドサービスの知識が必要です。
しかし、Difyを使えば冒頭で紹介した特徴を駆使することでこれらの複雑な裏側の処理を意識することなくRAGをAIアプリケーションに組み込めます。
 

Difyを使用すれば通常面倒な連携作業や知識ベースの構築もGUIで可能

Difyを利用した効率的なAIソリューションの開発手順

ではDifyを利用してどのようにAIソリューションを開発するのでしょうか? 今回は自分でDifyのアプリケーションをサーバにデプロイすることで扱い、簡単なRAG構成も組んでみたのでご紹介します。

インフラ構成

今回は以下の図のようにDifyをDockerを使用してコンテナとしてAmazon EC2インスタンス上で動かし、起動しました。

LLMとしてAmazon BedrockのみAmazon EC2外のサービスとして連携している

引用元:

aws.amazon.com

構築するRAG環境

今回は検証用に創造した架空のサービス「ぴよぴよAI」について、よくある質問やインフラ構成として関わりのあるDockerについて簡単に知識ベースを作成した上でLLMに質問への回答をさせてみます。

  • ぴよぴよAIのよくある質問内容
# AIアシスタント『ぴよぴよAI』よくある質問

## サービス概要
ぴよぴよAIは、日常の様々な疑問にAIが自動で回答する、あなたのためのパーソナルアシスタントです。調べ物からアイデア出しまで、ぴよぴよAIがあなたの作業をサポートします。

## 料金プランに関するFAQ
### Q1. ぴよぴよAIに無料プランはありますか?
はい、ございます。無料プランでは、1日あたり最大50回までAIに質問できます。有料プランの機能を一部試すことも可能です。

### Q2. 有料プランの月額料金はいくらですか?
有料プラン「ぴよぴよAI Pro」は月額980円(税込)です。月間質問回数の上限がなくなり、優先サポートをご利用いただけます。

## 簡単な利用方法に関するFAQ
### Q3. ぴよぴよAIへの質問の仕方を教えてください。
チャット画面の入力欄に質問文を入力し、Enterキーを押すか送信ボタンをクリックしてください。より具体的な質問ほど、精度の高い回答が得られます。

### Q4. ぴよぴよAIの返答がおかしい時の対処法は?
AIの回答は、質問の仕方や文脈によって意図しないものになることがあります。その場合は、質問の言葉を変えたり、より詳しく状況を説明したりしてみてください。多くの場合、AIの理解が深まり、適切な回答が得られます。

## トラブルシューティングに関するFAQ
### Q5. エラーコード「PiyoPiyo-001」が表示されました。どうすればよいですか?
エラーコード「PiyoPiyo-001」は、一時的なネットワーク接続の問題を示しています。恐れ入りますが、数分お待ちいただいてから再度お試しください。問題が解決しない場合は、お問い合わせ窓口までご連絡ください。

## 問い合わせ先
### Q6. ぴよぴよAIのサポート窓口はどこですか?
ご不明な点がございましたら、サポートサイトのチャット機能をご利用いただくか、support@piyopiyo-ai.com までメールでお問い合わせください。
  • Dockerの基本概念
# Dockerの基本概念:コンテナ型仮想化の力

Dockerは、2013年に登場したオープンソースの**コンテナ型仮想化技術**のプラットフォームです。アプリケーションとその動作に必要なすべての要素(コード、実行環境、ライブラリ、設定など)を「**コンテナ**」という軽量なパッケージにまとめ、どんな環境でも一貫して動作させることを可能にします。

### なぜDockerが必要なのか?

従来の仮想マシンがOS全体をエミュレートするのに対し、DockerのコンテナはホストOSのカーネルを共有するため、以下のようなメリットがあります。

1.  **軽量で高速:**
    * 仮想マシンに比べてリソース消費が少なく、数秒で起動できます。これにより、開発者は素早く環境を構築し、作業を開始できます。
2.  **高い移植性・一貫性:**
    * 「開発環境では動くのに、本番環境では動かない」といった問題を解消します。コンテナ化されたアプリケーションは、どのDocker環境でも同じように動作することを保証します。
3.  **環境構築の簡素化:**
    * Dockerfileという「コンテナの設計図」に設定を記述することで、OSやミドルウェアの構築を自動化できます。これにより、チームメンバー間での環境のずれを防ぎ、新規メンバーのオンボーディングも容易になります。
4.  **効率的なリソース利用:**
    * 1台のサーバー上で複数のコンテナを効率的に実行・管理でき、リソースを節約します。
5.  **共有・配布が容易:**
    * 作成したコンテナイメージをDocker Hubのようなサービスを通じて簡単に共有でき、アプリケーションの配布やデプロイを簡素化します。

### Dockerの主要な要素

* **Dockerイメージ:** コンテナを作成するための「設計図」。アプリケーションと必要な依存関係がすべてパッケージ化された読み取り専用のテンプレートです。
* **Dockerコンテナ:** Dockerイメージを実行することで作成される、軽量で独立した仮想実行環境。「アプリケーションを入れる箱」のようなものです。
* **Dockerfile:** Dockerイメージを作成するための手順(コマンド)を記述したテキストファイル。
* **Docker Engine:** コンテナの作成、実行、管理を行うDockerの中核となるソフトウェア。

Dockerは、アプリケーションの開発からテスト、デプロイ、運用までを効率化する強力なツールとして、現代のソフトウェア開発において不可欠な存在となっています。

知識ベースの構築

紹介した各テキストファイルを以下のような画面でPCのローカルよりドラッグ&ドロップすることによりアップロードされます。

どのファイルや媒体をデータベースとして扱うのか選択できる

アップロードが完了し、知識ベースの作成に入りますが、ここでいくつか設定可能な項目があります。
項目は以下の通りです。

  • チャンク設定:長いドキュメントをAIが一度に処理できる適切なサイズ(「チャンク」と呼ばれる情報の断片)に分割する設定です。
    ※分割方法の詳細については割愛しますが、自動分割やサイズ指定分割が選択可能

  • インデックス方法:分割したチャンクに対してどのような方法でインデックスを作成するのか選択ができます。埋め込みモデルというAmazon Bedrock等のモデルを使用した方法も選択できます。

  • 検索方法:ユーザーからの質問に対して回答を検索する際の方法について選択できます。詳細は割愛しますが、主に「ベクトル検索」、「全文検索」、「ハイブリッド検索」が選択可能です。

今回の検証では、全てデフォルト値(インデックス方法は埋め込みモデルとしてAmazon BedrockのAmazon Titan,検索方法はベクトル検索)としています。

チャンクの値や使用するモデルに関しても詳細に選択可能

知識ベースの構築が完了すると使用可能な知識ベースとして閲覧できるようになります。 また、読み込んだドキュメントも表示されます。

埋め込みモデルで処理済みのドキュメント一覧

ワークフローの構築

知識ベースが構築されたのでいよいよアプリケーションの作成に入っていきます。
Difyでは、「ワークフロー」と呼ばれる処理の一連の作業を設定することで一つのアプリケーションとして動作させることができます。
今回は、ユーザーの入力→知識ベースの検索→LLMでの回答生成→出力のような作業の流れでワークフローを構築します。  

構築したワークフロー。各処理で必要なLLMのモデルなどを選択可能

動作確認

ワークフローが完成したので、動作確認をしていきます。
今回はテストケースとして「ぴよぴよAIの有料プランの月額は?」という質問に対して期待される情報が出力されるかを試していきます。

ここで、「期待される情報」とは前半部分でも紹介したテキストファイル内に存在する、

## 料金プランに関するFAQ
### Q1. ぴよぴよAIに無料プランはありますか?
はい、ございます。無料プランでは、1日あたり最大50回までAIに質問できます。有料プランの機能を一部試すことも可能です。

### Q2. 有料プランの月額料金はいくらですか?
有料プラン「ぴよぴよAI Pro」は月額980円(税込)です。月間質問回数の上限がなくなり、優先サポートをご利用いただけます。

この辺の内容についてきちんとLLMより出力されていれば、自身が作成した知識ベースをきちんと使用してLLMが回答を作成しているという判断ができます。

では、検証を進めていきましょう。
「ぴよぴよAIの有料プランの月額は?」という内容を入力します。

検証はとても簡単で、入力後に「実行」ボタンを押すだけでLLMの最終的な回答のみでなく、回答に至るまでの過程として知識ベースの検索結果も閲覧できます。

以下はLLMからの最終的な回答です。

月額料金のみでなく付加情報も教えてくれている
見たところ、付加情報として有料プランの特徴に関しても教えてくれていますね。
このことから、LLMが必要な情報を受け取れていることがわかると思います。
続いて、知識ベースの検索結果も見てみましょう。 以下は、知識ベースによる検索結果です。

{
  "result": [
    {
      "metadata": {
        "_source": "knowledge",
        "dataset_id": "ad178331-00b3-4621-9ae9-d8be47539d42",
        "dataset_name": "# AIアシスタント『ぴよぴよA...",
        "document_id": "c8bd4bfe-7e25-4641-98ec-7abfa8030687",
        "document_name": "# AIアシスタント『ぴよぴよAI』よくある質問.txt",
        "data_source_type": "upload_file",
        "segment_id": "435f9a70-5a72-4448-a8a5-9018058cf973",
        "retriever_from": "workflow",
        "score": 0.9984632730484009,
        "segment_hit_count": 4,
        "segment_word_count": 86,
        "segment_position": 4,
        "segment_index_node_hash": "19a3ef5a9391f4adc11e620132f3c47fab0d3d6e3a3d6bdac72eb44fd5ca97a5",
        "doc_metadata": null,
        "position": 1
      },
      "title": "# AIアシスタント『ぴよぴよAI』よくある質問.txt",
      "content": "Q2. 有料プランの月額料金はいくらですか?\n有料プラン「ぴよぴよAI Pro」は月額980円(税込)です。月間質問回数の上限がなくなり、優先サポートをご利用いただけます。"
    },
    {
      "metadata": {
        "_source": "knowledge",
        "dataset_id": "ad178331-00b3-4621-9ae9-d8be47539d42",
        "dataset_name": "# AIアシスタント『ぴよぴよA...",
        "document_id": "c8bd4bfe-7e25-4641-98ec-7abfa8030687",
        "document_name": "# AIアシスタント『ぴよぴよAI』よくある質問.txt",
        "data_source_type": "upload_file",
        "segment_id": "f6e5160a-98db-429c-ab6c-63cfbe280c9b",
        "retriever_from": "workflow",
        "score": 0.06656918674707413,
        "segment_hit_count": 4,
        "segment_word_count": 101,
        "segment_position": 3,
        "segment_index_node_hash": "3cdac772f96b88297e98f089d766a0be0b9fbc52a3ad59dca1aea44c6ce8a277",
        "doc_metadata": null,
        "position": 2
      },
      "title": "# AIアシスタント『ぴよぴよAI』よくある質問.txt",
      "content": "料金プランに関するFAQ\n### Q1. ぴよぴよAIに無料プランはありますか?\nはい、ございます。無料プランでは、1日あたり最大50回までAIに質問できます。有料プランの機能を一部試すことも可能です。"
    },
    {
      "metadata": {
        "_source": "knowledge",
        "dataset_id": "ad178331-00b3-4621-9ae9-d8be47539d42",
        "dataset_name": "# AIアシスタント『ぴよぴよA...",
        "document_id": "c8bd4bfe-7e25-4641-98ec-7abfa8030687",
        "document_name": "# AIアシスタント『ぴよぴよAI』よくある質問.txt",
        "data_source_type": "upload_file",
        "segment_id": "1bdce463-1ecf-4006-aca3-4d2f94a9a613",
        "retriever_from": "workflow",
        "score": 0.002225670963525772,
        "segment_hit_count": 4,
        "segment_word_count": 92,
        "segment_position": 2,
        "segment_index_node_hash": "9b8cb1d73d1f06b4ef8c2063fc451f7d256b0ad102b95ccce84ae7341a375646",
        "doc_metadata": null,
        "position": 3
      },
      "title": "# AIアシスタント『ぴよぴよAI』よくある質問.txt",
      "content": "サービス概要\nぴよぴよAIは、日常の様々な疑問にAIが自動で回答する、あなたのためのパーソナルアシスタントです。調べ物からアイデア出しまで、ぴよぴよAIがあなたの作業をサポートします。"
    }
  ]
}

知識ベースの検索ではどのドキュメントから取得したのか(title)、ヒットした内容について(content)を結果として出力し、LLMモデルに入力の一部として提供しています。
これにより知識ベースもきちんと稼働して必要な情報をLLMに提供できていることがわかりました。

おわりに

いかがでしたでしょうか。
今回初めてDifyを使用しましたが、前述の通りDifyに関するプラットフォームのデプロイは簡単な構成で実現できます。
また、それだけでなく知識ベースの構築やワークフローの実装に関しても非常に短時間&GUIでのわかりやすい実装が可能でした。

この「構築の容易さ」はエンジニアの可能性を広げるのみではなく、非エンジニアにとってもAIソリューションに手を伸ばしやすくなる大きな動機となると今回の検証をする中で感じました。

バックエンドのことを細かく考えず自分の中で思い描いているAIソリューションのイメージを実現するために非常に有効なツールになると思いますので、皆さんもぜひ活用してみてください!🔥

山本 竜也 (記事一覧)

2025年度新入社員です!AWSについてはほぼ未経験なのでたくさんアウトプットできるよう頑張ります✨