オープンソースのRAG「Dify」にプリザンターのデータを連携する（前半）

こんにちは。
リーデックス小川です。

リーデックスは、渋谷にあるシステム開発の会社です。プリザンターの3社目の公式パートナーとして7年以上プリザンターに携わってきました。Qiitaやブログなどでプリザンターが盛り上がってきていて、とても嬉しく思っています。

毎年、プリザンターのアドベントカレンダーに参加していますが、今年は、オープンソースのRAG「Dify」とプリザンターのデータを自動連携する方法についてご紹介いたします。本ブログでは、前半部分でRAGやDifyについての概要、Difyの設定などをご紹介します。後半は、[弊社のブログ](https://pleasanter.hatenablog.jp)で、プリザンターまわりの設定とサーバスクリプトについてご紹介いたします。

:writing_hand:[オープンソースのRAG「Dify」にプリザンターのデータを連携する（後半）](https://pleasanter.hatenablog.jp/entry/20241219_dify)

RAGを利用することで、プリザンターのデータを有効活用することができます。Difyへの登録も、APIを使用することで簡単に連携することが可能ですので、ぜひご参考ください。

## RAGとは？

まず初めに、RAGについて簡単に説明します。
RAG（Retrieval-Augmented Generation）は、AIを使って効率的に情報を生成するための技術です。
この仕組みでは、まずデータベースや外部の情報源から関連するデータを「検索（Retrieval）」し、それを基にAIが文章や回答を「生成（Generation）」します。
検索エンジンと自然言語処理を組み合わせた効率的な仕組み、とイメージしてもらえると良いかもしれません。

質問と回答の具体的には流れは以下のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932670/53d3b6b0-5686-f1f8-6a1b-aff4c93363b0.png)

例えば、「製品Aの詳細を教えてください」という質問が入力されます(①)。すると、RAGは、事前に準備したデータベースやドキュメント（PDFやテキストなど）から、質問に関連する情報を探します(②)。

検索した情報(③)を元に、ChatGPTのような大規模言語モデル(LLM)が回答を作成します(④)。ただ単にデータを返すのではなく、質問の文脈に合うように自然な形で文章を生成し(⑤)、ユーザに回答します(⑥)。

これにより、事前にAIモデルにすべての情報を詰め込む必要がなく、大量のデータを利用しながら柔軟な回答が可能になります。また、特定の業務やプロジェクトに関する情報もRAGを使用することで簡単に活用することができます。

また、AIが常に最新の情報を利用して回答を生成するため、誤った情報提供（ハルシネーション）のリスクも軽減されます。特に、顧客サポートやナレッジ管理、社内研修など、情報共有が重要な分野での効果が見込まれます。

## Difyとは？

[Dify](https://docs.dify.ai/ja-jp)は、RAGを活用したAIアプリケーション開発を簡単に実現できるオープンソースプラットフォームです。

ノーコードによる直感的な操作や、ChatGPTなどの大規模言語モデル（LLM）への連携が簡単にできるので、専門知識がなくても高度なRAGを構築可能です。

また、RAGの仕組みを使ったチャットボットやワークフローもGUIを使って簡単に作成、設定することができます

さらに、Difyが提供するAPIを利用することで、プリザンターのような既存の業務環境とも簡単に連携することができます。

Qiitaでも[Difyの記事](https://qiita.com/search?q=Dify)は数多くありますので、ぜひご参考ください。

## Difyの準備
### インストール

まずは、インストールやセットアップを進めていきましょう。Difyのインストールについては、公式サイトや他の方のブログが参考に環境を作成してください。私は、Docker環境にインストールしました。

下記が参考にしたサイトです。

+ [Docker Compose デプロイ（公式サイト）](https://docs.dify.ai/ja-jp/getting-started/install-self-hosted/docker-compose")
+ [Windowsローカル環境にDifyをインストールしてみた](https://note.com/sea_webma/n/n1ebacfa593c9#420c9847-889c-4477-bced-16825b401a3a)

### ナレッジの作成

次に、サンプルのナレッジを作成します。
ナレッジとは、RAGで説明した独自データを貯めておくデータベースのようなものです。Difyの画面の上にある「ナレッジ」をクリックすると、下記のような画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932670/a293cd80-6d28-d6d3-5a47-cde496b07eec.png)

「ナレッジを作成」をクリックし、次の画面で「空のナレッジを作成」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932670/4556e065-7a15-5441-6d9c-922d4d7d3668.png)

ナレッジ名を入力するダイアログが表示されますので任意の名前を入力してください（ここでは「プリザンターQA」とします）。これで、空のナレッジが作成されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932670/f062ceca-9c81-1f97-1bb7-35cac0420f1e.png)

### APIキーの取得

続いて、プリザンターとの連携に使用するAPIキーを作成します。先ほどの画面の画面上にある「API」をクリックし、表示された画面の右側「APIキー」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932670/2e41ed55-ffce-a120-f766-6f5c8be70611.png)

下記のような画面が表示されますので、「新しいシークレットキー」をクリックすることで、APIキーを発行することができます。シークレットキーはプリザンターで使用するのでメモを取っておいてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3932670/85c32cc2-cf54-8ec4-d3ad-158eee6424d1.png)

また、作成した（空の）ナレッジのURLに、API連携のときに使用するデータセットIDが表示されているので、こちらもメモをします。データセットIDは、URLの「http://DifyのURL/datasets/XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXX/documents 」の「datasets/」から「/document」の間にある文字列です。

## 後半に続く・・・
Difyの設定については以上となります。後半部分では、プリザンターのサーバスクリプトを利用して、Difyにデータを登録するまでをご紹介いたしますので、ぜひご覧ください。

:writing_hand:[オープンソースのRAG「Dify」にプリザンターのデータを連携する（後半）](https://pleasanter.hatenablog.jp/entry/20241219_dify)