FURYU Tech Blog - フリュー株式会社

フリュー株式会社の開発者が技術情報を発信するブログです。

Difyを使って簡単にRAGを構築してみた

この記事はフリューAdvent Calendar 2024の7日目の記事となります。

スマートフォンゲーム部の稲富です。 ChatGPT3.5の登場そしてMicrosoft OpenAIに100億ドル規模の投資を発表するなど、2023年は生成AI元年と言われる程に大きなインパクトのある年となりました。2024年12月現在、社内でもChatGPTやGitHub Copilotを使うなど少しずつ生成AIの利用シーンは増えていますが、まだまだ足りていないと感じています。部内で生成AIの業務利用を促進したいと考えていたところ、あるエンジニアより「Dify」(ディファイ)というAIアプリ開発プラットフォームの存在を知り、実際に触ってみることにしました。 Dify: https://dify.ai/jp

Difyの紹介

Difyは、AIアプリケーションの開発を簡素化するために設計されたオープンソースのプラットフォームです。一番の特徴としてはノーコードでの開発が可能であり、プログラミングの知識がなくても簡単にAIアプリケーションを構築できます。Difyは オープンソースのため、ローカル環境でDifyを動かしたり自社サーバー上に構築して使うなどの自由度があります。 さらにDifyはRAGの構築がしやすく、例えばよくある質問を検索対象データとして回答してくれるチャットボットをサクッと作れるのが魅力です。

DifyのUI

下記のスクリーンショットをご覧いただくと分かるのですが、DifyのUIはノード(部品)をコネクターでつなぐことでに直感的にアプリケーションが作れます。

DifyのUI

Difyのテンプレート

各種テンプレートも事前に多数用意されています。

Difyの各種テンプレート

実際にオリジナルのAIアプリを作成してみる

雰囲気を掴むためにシンプルなオリジナルAIを作ってみます。

  1. Difyのスタジオ画面(ログイン直後の画面)にて「最初から作成」→「チャットボット」→「チャットフロー」→「アプリのアイコンと名前」に適当に"My Chat AI"のように入力して「作成する」を選びます。
    新規アプリ構築
  2. すると左から「開始」「LLM」「回答」の合計3つのノード(部品)が既にコネクターで繋がれている状態になっています。

    オリジナルのAI

  3. 真ん中の「LLM」を選択して、「SYSTEM」のテキスト欄に下記文字列を記入してください。ここはLLMに対して好きな(適当な)指示で構いません。

    あなたは楽観的で陽気なアドバイザーです。 人生は楽しみに満ちており素晴らしいものであると信じています。 相談者がどんなにネガティブに発言をしても、超絶ポジティブに返すことができます。

  4. 右上の「プレビュー」を押すと、簡単にアプリの動作が確認できます。

    Difyアプリプレビュー

実際に業務で利用するにはDifyが用意しているノード(部品)の動きそれぞれを理解していく必要がありますが、公式ドキュメント https://docs.dify.ai/ja-jp を参考にして少しずつ覚えていくのがよいでしょう。先ほどご紹介した豊富なテンプレートを試してみるのもよいですね。

ここまではDifyの簡単な紹介でした。次はDify上でRAGの構築を行う話へと進みます。

RAGとは

Difyを使うとRAGの構築もノーコードで作成できます。 RAGとは、LLMに外部情報を組み合わせて回答(テキスト)を生成させる技術です。事前に用意した情報を使って生成AIの回答精度を上げることができます。 利用例として想定できるのは、カスタマーサポートや社内文書を元に回答してくれる業務アシスタントなどです。

RAGの概要

概略図を使って仕組みを簡単に説明します。 RAGの処理の流れとしてはユーザーが入力した内容を元に情報を検索し、検索結果を元に回答を生成してユーザーに結果を返します。 図からも分かるように、データベース(外部から与えた情報)も検索対象としています。 (実際は質問と関連性が高い情報を抽出するなど多くの処理を実施していますが、本記事においては全体像をざっくり掴むことを目的として割愛します)

RAGの概要図
ここまではRAGの概要を説明しましたが、次は実際にRAGを構築してみたいと思います。

RAGの構築

ユースケースとして「ゆるキャン△ アニメ*1 」のWikipediaの記事 *2 を元にQ&Aボットを実際に作成してみます。

1. ナレッジ の構築① : Wikipediaのデータ取り込み

ナレッジ は前述RAG概要図で言うところのデータベースです。Difyではナレッジと呼びます。 インターネット上で「ゆるキャン△ アニメ」のWikipediaの記事を探し、メニュー「ツール」内の「pdf形式でダウンロード」によりpdfで保存します。ゆるキャン△_(アニメ).pdfとします。

2. ナレッジ の構築② :ナレッジ作成

Difyのナレッジ画面から「ナレッジを作成」を選びます。 「1」で保存した「ゆるキャン△_(アニメ).pdf」を指定してナレッジとして作成します。

ナレッジ作成
「テキストの前処理とクリーニング」の設定は検索設定に「ハイブリッド検索」を選ぶ以外は初期値のままでかまいません。

3. QAボットの作成

Difyのスタジオ画面から「最初から作成」→「チャットボット」→「チャットフロー」を選びます。 アプリ名には「ゆるキャン△アニメQA」と入れておき「作成する」を押します。

QAボット作成

4. 知識取得ノードの追加

最低限のノード「開始」「LLM」「回答」の3つが最初から用意されています。

「開始」ノードと「LLM」ノードの間にある「+」ボタンを押す

「開始」と「知識取得」の間にあるコネクターの真ん中にマウスポインターを合わせると「+」記号が現れるのでそれを押すと、 ノード選択リストが表示されますので、「知識取得」を選びます。

知識取得ノードを選択する
これで「開始」「LLM」ノードの間に「知識取得」が挿入されます。
「知識取得」が追加された状態

「知識取得」ノードの設定にナレッジとして「ゆるキャン△_(アニメ)」を追加します。

ナレッジを設定する

5. LLMノードへQAボットとしての指示を追加

下記の2項目をLLMノードの設定項目に登録します

  • コンテキスト:知識取得 / result Array[Object]
  • SYSTEM:

    あなたはQAアシスタントです。 コンテキストに基づいて回答してください。 コンテキストに載っていないことは「わかりません」とはっきり回答してください。 {コンテキスト}

下記図となるように設定を登録します。

LLMに指示を追加する

※Tips: {コンテキスト}の箇所は "{" を入力するとリストが表示されるので、その中から「コンテキスト」を選択してください。

動かしてみる

  • 画面内の「プレビュー」ボタンから実際にQAボットを動かしてみます。
  • 質問内容として「アニメゆるキャン△の主題歌をすべて教えて」と入力してみるとナレッジの内容を元に回答結果が得られます。
    実行結果
    ノーコードでお手軽にRAGとしてのQAボットを作成することができました。(アプリとして公開する手順については公式ドキュメントをご確認ください)

まとめ

ここまでの説明で、Difyというプラットフォームのお手軽さを感じていただけたと思います。 生成AIの技術進歩の速さは目まぐるしいものがあります。活用するためのハードルをこのDifyで下げることによって生成AIの利用に集中できるのが最大の利点だと思っています。 私自身も社内でも使える人を増やそうとDifyを紹介して回っているところです。みなさまも無料版で是非一度体験されることをおすすめします。

最後に今後の展望についてお話して本記事を締めくくりたいと思います。 現時点で私自身の知識が足りていないのもあり、本記事ではDify上で扱う設定値の説明をかなり省略しています。 例えばDifyのナレッジを作る際の設定として「ベクトル検索/全文検索/ハイブリッド検索」それぞれの項目がどういった特徴を持つのかなどです。

最近は公式マニュアルはもとより、Difyのユーザーフォーラム(Discord)やDifyエバンジェリストのX(旧Twitter)をチェックすることでDify関連の情報を日々集めています。 また、Difyだけでなく生成AI関連全般についても様々な方法で情報を集めようと考えています。機会があれば、集めた情報を活かして今回説明できなかった部分の解説記事を書きたいと思います。

最後までお読みいただき、ありがとうございます!