DifyでOCIの最新の生成AIモデルを使ってみた

Difyのv1.1.0にて、複数のOCI関連のサービスに関してのアップデートがあったので、いくつかの記事にわたって書いていこうと思います！

## 前提条件
* OCIのアカウントを持っていること
* OCIでVCN、Computeをすでに作成していること

## Difyとは
オープンソースのAIアプリ開発プラットフォームです。
SaaS版だけでなく、ローカル環境にデプロイできたり、多様なLLMをサポートしていて、かつノーコードでアプリが作成できるということで人気みたいです。

https://dify.ai/jp

## インスタンス作成
Dify側では、以下が最小インストール要件になっています。
* **CPU >= 2 Core**
* **RAM >= 4 GiB**

これを参考にインスタンスを作成すると良いと思います。

## Dockerのインストール
~~~linux
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

sudo dnf install -y docker-ce docker-ce-cli containerd.io

sudo systemctl start docker

sudo systemctl enable docker

sudo usermod -aG docker opc
~~~

## docker-composeのインストール
~~~
sudo wget -O /usr/local/bin/docker-compose https://github.com/docker/compose/releases/download/v2.31.0/docker-compose-linux-x86_64
sudo chmod 755 /usr/local/bin/docker-compose
~~~

## Difyのインストール
v1.1.0のDifyをクローンします。
~~~
sudo dnf install -y git
git clone -b 1.1.0 https://github.com/langgenius/dify.git
cd dify/docker
~~~

環境設定ファイルを作成します。
~~~
cp .env.example .env
~~~

Oracle Database 23ai FreeのDockerコンテナをベクトルストアとして使用する場合は、環境設定ファイルを以下のように編集します。
~~~vi .env
---
VECTOR_STORE=oracle
---
~~~

Dockerコンテナを起動します。
~~~
docker compose up -d
~~~

以下のコマンドを実行して、Difyにアクセスするために、80番ポートを解放します。
~~~
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --reload
~~~

## APIキーの作成
OCIコンソール画面で、右上のプロファイルのアイコンをクリックし、ユーザーのIDをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3742484/ebb7c0b0-c7e8-4ee8-b95d-ea0629daeb2f.png)

ユーザーの詳細画面で、リソース→APIキーをクリックして、**APIキーの追加**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3742484/dbbfcf32-4c9e-48d4-9100-0d6bf0532bb1.png)

**秘密キーのダウンロード**と**公開キーのダウンロード**をクリックして、秘密キーと公開キーをダウンロードして、保存します。
**追加**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3742484/1edce88d-32d6-49da-8952-badf7b47a55c.png)

構成ファイルのプレビューをコピーして、**閉じる**のボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3742484/105a4001-d239-4418-93e3-80c526b1752e.png)

## OCI Generative AIのDify用の認証情報の作成
Dify用の認証情報を作成するために、`oci-dify-credentials-generator.sh`のシェルを作成します。

ダウンロードしたAPI秘密鍵と以下のスクリプトをインスタンスにコピーして、user, fingerprint, tenancy を先ほどメモ帳に貼り付けた情報を記入します。
~~~
#!/bin/bash

#以下を書き換える
user="ocid1.user.oc1..xxx"
fingerprint="xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"
tenancy="ocid1.tenancy.oc1..xxx"
pem_file_path="xxx.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"
~~~

スクリプトを実行します。
~~~
sh oci-dify-credentials-generator.sh
~~~

生成された**Dify: oci api key config file's content**と**Dify: oci api key config file's content**は後ほど使用するので、メモしておきます。

## Difyの設定
ブラウザでDifyにアクセスします。
~~~
http://<インスタンスのパブリックIPアドレス>/install
~~~

メールアドレス、ユーザー名およびパスワードを入力して、**セットアップ**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3742484/b918611c-92b2-45d9-9ef5-daba3a07231c.png)

OCI Generative AI Serviceを使用するために、**プラグイン**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3742484/032b56e7-b083-436d-ad56-bad4430a3466.png)

**マーケットプレイスを探索**をクリックし、**Oracle**で検索し、**OCIGenerativeAI**をにカーソルを合わせ、**インストール**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3742484/806c572e-2808-4ef4-91d9-84e0b57e560f.png)

OCIGenerativeAIの**インストール**をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3742484/5483ad28-04e0-49df-b9c2-7ea0c53a39b6.png)

インストール完了後、画面右上のユーザーのアイコンをクリックし、**設定**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3742484/6ba1f568-a22b-4326-afd1-09ff7044a084.png)

ワークスペース⇒**モデルプロバイダー**を選択して、OCIGenerativeAIの**セットアップ**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3742484/6625516a-2c34-4ec0-bbcc-71ccff8acd13.png)

先ほど生成された**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/3742484/acf9deba-bc8e-4c99-9db4-ddd15971ff9d.png)

接続が正常に確立されると、OCI Generative AIが利用可能なモデルが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3742484/4a65e811-2bd6-4fbc-97e5-217205572e18.png)

最新の``meta.llama-3.3-70b-instruct``も利用可能になっていることがわかります。


これで設定が完了しました。