Difyのv1.0.1でOracle Autonomous Database(ADB)がサポートされたので、使うために接続方法についてこちらの記事で記載したいと思います。
以前投稿した記事の続きで、OCI Compute上にデプロイしたDify環境との接続を目指します。
前提条件
- OCIのアカウントを持っていること
- VCN(仮想クラウドネットワーク)の作成が完了していること
- OCI Computeの作成が完了していること
ADBの作成
下記を参考にADBを作成します。
注意点としては、データベース・バージョンを23aiにする必要があります。
それ以外はOCIチュートリアルの通りで概ね問題ないかと思います。
LEXERの作成
今回はOracle TEXTという全文検索の機能を使いたかったので、WORLD_LEXER
という多言語対応されたものを使用しています。
ADBの詳細画面で、データベース・アクション→SQLをクリックするなどして、下記を実行します。
BEGIN
CTX_DDL.CREATE_PREFERENCE('world_lexer','WORLD_LEXER');
END;
/
ウォレットのダウンロード
ADBの詳細画面で、データベース接続をクリックします。
データベース接続の画面で、ウォレットのダウンロードをクリックします。
次にウォレットのパスワードを作成し、ダウンロードをクリックします。
ダウンロード後に、接続文字列のTNS名(例:xxx_high
)をコピーします。
Docker、docker-composeのインストール
下記を参考に実施してください。
Difyのインストール
バージョン1.1.0のDifyをクローンし、ディレクトリに移動します。
前述の通り、v1.0.1からOracle Autonomous Databaseがサポートされるようになっています。
git clone -b 1.1.0 https://github.com/langgenius/dify.git
cd dify/docker
環境設定ファイルを作成します。
cp .env.example .env
Oracle Autonomous Databaseをベクトルストアとして使用するには、環境設定ファイルを下記のように編集します。
# Supported values are `weaviate`, `qdrant`, `milvus`, `myscale`, `relyt`, `pgvector`, `pgvecto-rs`, `chroma`, `opensearch`, `tidb_vector`, `oracle`, `tencent`, `elasticsearch`, `elasticsearch-ja`, `analyticdb`, `couchbase`, `vikingdb`, `oceanbase`.
VECTOR_STORE=oracle
・
・
・
# Oracle configuration, only available when VECTOR_STORE is `oracle`
ORACLE_USER=admin
ORACLE_PASSWORD=<ADMINユーザーのパスワード>
ORACLE_DSN=<接続文字列のTNS名>
ORACLE_CONFIG_DIR=/app/api/storage/wallet # 固定
ORACLE_WALLET_LOCATION=/app/api/storage/wallet # 固定
ORACLE_WALLET_PASSWORD=<ウォレットのパスワード>
ORACLE_IS_AUTONOMOUS=true
また、以前のバージョンから利用できるようになっていた、Oracle Database 23ai FreeのDockerコンテナが起動しないように、profiles
の値をたとえばoracle-skip
に変更します。
# Oracle vector database
oracle:
image: container-registry.oracle.com/database/free:latest
profiles:
- oracle-skip
restart: always
volumes:
- source: oradata
type: volume
target: /opt/oracle/oradata
- ./startupscripts:/opt/oracle/scripts/startup
environment:
ORACLE_PWD: ${ORACLE_PWD:-Dify123456}
ORACLE_CHARACTERSET: ${ORACLE_CHARACTERSET:-AL32UTF8}
Dockerコンテナを起動します。
docker compose up -d
先ほどダウンロードしたADBのウォレットのzipファイルをscpツールやscpコマンドでインスタンスの/tmp
へ転送します。
sudo apt install unzip -y
cd /tmp
unzip <ウォレットのzipファイル>.zip -d wallet
ウォレットをDifyのdocker-worker-1コンテナにコピーします。
docker cp wallet docker-worker-1:/app/api/storage/wallet
以上でDifyのインストールおよびADBとの接続設定が完了しました。
おまけ:RAGができていることを確認する
OraBoosterという架空のロケットエンジンの概要が記載されたrocket.txtをアップロードし、埋め込みモデルにOCIで提供されているcohere.embed-multilingual-v3.0
を利用してナレッジを作成しました。
チャットボットに質問をすると、期待通りの回答が返ってくることが確認できました。