Dify: OCI Generative AIでRAGチャットボットを10分で作成してみる


# はじめに

Difyは、コード不要でAIチャットボットやアプリが作れる、オープンソースの生成AIアプリ構築プラットフォームです。  
この記事では、10分でDifyを使ってLLMの設定、参考ドキュメントの登録を行い、登録ドキュメント参照するRAGチャットボットを作成してみました！

### ■ 前提条件
- **Difyのアカウント作成済みで、サインアップしている状態**

※今回私は、**コミュニティ版**でOCI上に環境を用意しました。
セットアップ方法は、以下のを参考にさせて頂きました。
参考：[Qiita - Oracle(OCI)ずくめでDifyしよう！](https://qiita.com/itokazu/items/3c76581fcbf3d022bdb2)
記事内の[VCN作成](https://qiita.com/itokazu/items/3c76581fcbf3d022bdb2#vcn%E4%BD%9C%E6%88%90)～[Difyのインストール](https://qiita.com/itokazu/items/3c76581fcbf3d022bdb2#dify%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)まで完了したところからのスタートです。
なお、以下LLMの設定などは、コミュニティ版の利用を前提とした手順になっています。

:::note info
**Dify環境のセットアップ**
Difyを利用するには、大きく2つの形態があります。
■ ウェブブラウザからアカウント作成ですぐに利用可能な**クラウド版**
■ 自社サーバーなどに無料でインストールして利用可能な**コミュニティ版（セルフホスト版・OSS版）** 
- **クラウド版：** 参考: https://docs.dify.ai/ja-jp/getting-started/cloud
    - 基本的には無料でアカウント作成するだけですぐに利用可能です（プラン名：Sandbox）。
    - さらに、利用規模や目的に応じて有料プランも用意されています。
- **コミュニティ版：** 参考: https://docs.dify.ai/ja-jp/getting-started/install-self-hosted/README
    - オープンソースでGitHub上でソースコードが公開されているので、自分で環境をセットアップすることで、ソフトウェア自体を無料で利用することができます。
:::


# アプリの作成

「アプリを作成する」から「最初から作成」をクリックします。

チャットボットを作成するので「チャットボット」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3963468/d828002b-ea6d-48f6-ab8e-165c01e50e8b.png)

# LLMの設定

LLMの設定をしていなかったので、OCIのGenerative AIを利用できるように設定をします。「設定に移動」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3963468/5a8844dc-3fe7-40de-8c21-5548718b6f9e.png)

モデルプロバイダーから「OCIGenerativeAI」を選択してインストールします。
![スクリーンショット 2025-06-12 101547.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3963468/99198bdd-f401-479b-8603-9dd26a9419a7.png)


OCI上で発行したAPIキーの秘密鍵をインスタンスにコピーします。

さらにインスタンス上に以下のスクリプトを作成します。
```:code.sh
#!/bin/bash

#以下の4つを書き換える
user="ocid1.user.oc1..XXXX"
fingerprint="xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"
tenancy="ocid1.tenancy.oc1..XXXXX"
pem_file_path="XXXXXX.pem"

#以下は修正しない
compartment_ocid=$(oci-metadata |grep compartment | awk '{print $3}')
region="us-chicago-1"

combined_string="$user/$fingerprint/$tenancy/$region/$compartment_ocid"

encoded_combined_string=$(echo -n "$combined_string" | base64 --wrap=0)

echo "[Dify: oci api key config file's content]"
echo "$encoded_combined_string"

if [ ! -f "$pem_file_path" ]; then
    echo "PEM file not found: $pem_file_path"
    exit 1
fi

encoded_pem_content=$(base64 --wrap=0 "$pem_file_path")

echo
echo "[Dify: oci api key file's content]"
echo "$encoded_pem_content"
```

スクリプト内のuser、fingerprint、tenancy
、秘密鍵のパスを、APIキーの情報に基づいてを書き換えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3963468/69136006-e3c9-44aa-8c76-2d6cd906e1f8.png)

スクリプトを実行します。
```
sh code.sh
```
[Dify: oci api key config file's content]と[Dify: oci api key file's content]がそれぞれ出力されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3963468/a0d24061-f7fc-47d2-a18c-ead594f74ce3.png)

Difyの画面に戻って、API Keyセットアップを押して、2つの枠に入力して保存します。

![スクリーンショット 2025-06-12 103755.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3963468/a73f6e32-0583-4b05-9e0a-27a1a37be164.png)

 # ナレッジベースの設定

「ナレッジ」から「ナレッジベースを作成」をクリックします。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3963468/85ca9ebc-6584-49a3-bd08-32da62c89ced.png)

任意のファイルをアップロードします。

チャンク設定や、埋め込みモデル、検索設定を任意の値で設定して、「保存して処理」をクリックします。

# チャットボットの設定

「スタジオ」から先程作成したチャットボットのアプリへ戻ります。

「コンテキスト」で先程ナレッジベースとして登録したドキュメントを選択します。

プロンプトは「自動」から指示を加えて作成してもらいました！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3963468/0af2f3dd-fed9-4de8-83f1-de3f953ffd1a.png)

10分程度ですぐRAGチャットボットが作成できました！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3963468/b91fb6b9-b740-4d26-82d7-6ff222ebaa8b.png)

「アプリを実行」をクリックすると、作成したチャット形式で質問できるページにアクセスすることができます。
回答に登録したドキュメント（ナレッジベース）を利用していることが分かります（CITATIONS）。
正しく動作することが確認できます！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3963468/61651545-5a90-4d1e-85ce-188de03c18d2.png)