こんにちは、サイオステクノロジーの遠藤です。
生成AIが身近になり、多くの場面で活用されるようになってきました。しかし、「もっと自分の業務に特化した情報をAIに学習させられたら…」「社内のナレッジを活かして、より正確な回答を返せたら…」と思ったことはありませんか?
そんな課題を解決するのが RAG(Retrieval Augmented Generation) という技術です。RAGを活用すると、AIが外部のデータを検索し、その情報をもとに回答を生成できるようになります。これにより、一般的な知識に基づくだけでなく、最新の情報や専門性の高い内容、さらに社内独自のデータに基づいた回答にも対応可能になります。
本記事では、Difyを使ってRAGを簡単に構築する方法を紹介します。具体的な活用例として、就業規則をデータソースとして登録を行い、就業規則に関する質問に答えられるAIアシスタントを作成していきます。それでは、始めていきます!
RAG(Retrieval Augmented Generation)とは?
RAG(Retrieval Augmented Generation)は、事前学習済みの生成AI(例えばGPTなど)に外部データを組み合わせることで、より正確で文脈に沿った回答を生成する技術です。通常の大規模言語モデル(LLM)は、トレーニングデータに基づいて回答を生成しますが、その情報は最新ではなかったり、特定のドメイン知識が不足していることがあります。RAGは、この問題を解決するために、次の3つのステップで情報を処理します。
1. 検索(Retrieval)
クエリに関連する外部データ(例えば、企業のナレッジベース、ドキュメント、データベースなど)を検索し、必要な情報を取得します。
2. 拡張(Augmentation)
取得した情報をもとに、言語モデルが回答を生成する前にデータを補強・整理します。これにより、ノイズの少ない、より関連性の高い情報をモデルに提供することが可能になります。
3. 生成(Generation)
補強された情報を活用して、言語モデルが回答を生成します。これにより、より最新かつ信頼性の高い応答が可能になります。
DifyでRAGを実装するには
Difyではナレッジベース機能を利用することで、企業の内部文書、FAQ、規格情報をデータソースとして登録し、大規模言語モデル(LLM)が問い合わせる際の情報源として利用することができるようになります。
Dify公式ドキュメントによるとナレッジベース機能を利用することで以下の利点があると挙げられています
- リアルタイム更新:ナレッジベースの内容はいつでも最新のものに更新することができ、モデルが最新情報を得られるようにします。
- 高精度:関連する文書を検索することで、LLMは実際の内容に基づき高品質な回答を生み出すことができ、誤情報を減らします。
- 柔軟性:開発者はナレッジベースの内容をカスタマイズでき、実際のニーズに合わせて知識の範囲を調整できます。
データは以下の3つの方法でアップロードすることが出来ます。いろいろな方法でデータが登録できるのは助かりますね。
- 長文コンテンツ(TXT、Markdown、DOCX、HTML、JSON、さらにはPDF)
- 構造化データ(CSV、Excelなど)
- オンラインデータソース(ウェブサイトからの情報収集、Notionからのデータ取得など)
実際にDifyでRAGアプリを作成してみる
RAGに関する事前知識が身についたところで、ここからはDify上でRAGアプリケーションを作成してみましょう!今回は、「楽に」「わかりやすく」を目指して、Difyでできる一番簡単な方法でアプリケーションの作成を行っていきます。
まずはDifyアプリケーション上の「ナレッジ」タブをクリックします。押したら「ナレッジを作成」をクリックしましょう。
そうするとデータを登録する画面に入りますので、「テキストファイルからインポート」を選択してファイルのアップロードを行います。
今回は厚生労働省が出しているモデル就業規則から解説部分を取り除き、就業時間などのサンプルデータを入れたRAGテスト用就業規則を利用します。
登録するドキュメント : RAGテスト用就業規則
ドキュメントが登録できたら「次へ」を押しましょう。
そうするとドキュメントをどんな設定で登録するかの画面に入ります。今回はインデックス方法から「経済的」を選択してドキュメントの登録を行います。「経済的」は無料で利用可能で、ドキュメント登録用のAIモデルの利用が必要無くなるので、初めてRAGを触る方におすすめです。他にもパラメータがいじれそうな箇所がいっぱいありますが、このあたりのパラメーターをいじると何が変わるの?だったり、インデックス方法で高品質を指定した場合はどのような設定が必要なの?といった話はDify RAG徹底解説のブログを別途作成しようと考えているので、そちらも合わせて読んでいただければと思います。
ナレッジの作成が完了したら、「ドキュメントに移動」をクリックします。
そうすると、ドキュメント一覧に移動することができ、しっかり登録したPDFが登録されたことが確認できます。
ここからは、実際にアプリケーションの作成に入って行きましょう。画面上部の「スタジオ」タブから「最初から作成」を選択します。
アプリの種類として「チャットボット」を選択し、アプリのアイコンと名前で「就業規則RAG」と入力します
アプリの作成画面に入ったら、先ほどナレッジベースで登録したドキュメントをデータソースとして使用できるようにコンテキストの「追加」をクリックします。
そうするとポップアップが表示されるので、先程追加したPDFを選択して追加を押します。
それが完了したら、手順に以下のプロンプトを設定しましょう。
あなたはコンテキストに基づいてユーザーからの質問に回答するチャットボットです。
コンテキストに基づいて回答できない場合には「コンテキストに基づいて回答が出来ませんでした。質問を変更してください。」と返答してください。
ここまで完了したら、画面左のプレイグラウンドを利用してアプリが正しく動作しているか確認してみましょう。
まず試しに「Azure OpenAIについて教えて」というpdfに入っていない知識について質問してみました。
そうすると、プロンプトに設定したとおりに「コンテキストに基づいて回答が出来ませんでした。質問を変更してください。」と返答してくれました。
次にPDFに記載のある「有給休暇について教えて」と質問を投げてみます。
そうすると、しっかりPDFの内容を参照して回答を生成してくれ、引用として登録しているPDFが表示されていることを確認することが出来ました!
まとめ
今回のブログでは、RAGとは何か、そしてDifyを使って最もシンプルな方法でRAGアプリケーションを構築する手順を紹介しました。実装の中でも触れましたが、今後は「このパラメータを変更するとどんな影響があるのか?」や「精度を向上させるにはどうすればいいのか?」といった、より深掘りした内容もDify RAG上級編としてまとめていく予定です。そちらもぜひチェックしてみてください!
ではまた~