🅾️

DifyからOCI Generative AIに接続する

2024/11/22に公開

Difyを新規にインストールして、Ollamaの設定をしようとDifyのモデルプロバイダー一覧を開くと、プロバイダーにOCIが入っていました。
リリースノートを見ると、2024-09にリリースされたV0.8.0で入ったそうで。

モデルプロバイダー

Ollamaの設定はさておき、DifyからOCI Generative AI(以降OCI GenAI)に接続して、CohereのCommand Rを使っていきたいと思います。

前提条件

  • Difyがインストール済であること(公式Docなどを参照ください)
  • OCIのアカウントを持ち、OCI GenAIが利用できるリージョン(us-chicago-1,uk-london-1等)をサブスクライブしていること
  • OCI GenAIのプレイグラウンドが利用できるよう、OCIのポリシーを設定してあること

OCI側の準備

  1. OCIのコンソールに、GenAIが利用できるユーザでログインします。
  2. 自分のプロファイル -> APIキーで、新たにAPIキーを生成します。
  3. 秘密鍵ファイルをダウンロードし、「Dify-GenAI.pem」など、わかりやすい名前をつけて保存します。

  1. 新たに作成したAPIキーのフィンガープリントの右側にある、団子アイコンから「構成ファイルの表示」を選びます。構成ファイルのテンプレートができますので、丸ごとコピーして「Dify-GenAI-Conf」など、わかりやすい名前を付けて保存します。

  1. GenAIを使用するコンパートメントIDの値も必要です。こちらは構成ファイルには含まれていませんので、「アイデンティティとセキュリティ」の「コンパートメント」より控えておきます。

モデルプロバイダー情報の設定

  • Difyの設定->モデルプロバイダーから、ORACLEを選びます。

  • 入力箇所はapi key configと api key file's contentの2か所です。プレースホルダに例が記載されていますが、見切れてしまっています。

  • ソースコード(dify/api/core/model_runtime/model_providers/oci
    /oci.yaml)を確認すると、

Enter your oci api key config file's content(base64.b64encode("user_ocid/fingerprint/tenancy_ocid/region/compartment_ocid".encode('utf-8'))

Enter your oci api key file's content(base64.b64encode("pem file content".encode('utf-8')))

となっていました。
構成ファイルの各項目をスラッシュで結合した文字列をBASE64でエンコードしてやればよい、ということになります。

Base64化するWebツールもありますが、秘密鍵ファイルの中身をかけるのは気になるので、pythonでbase64化するコードを書きました。
このpythonスクリプトと同じフォルダに、先ほどダウンロードした秘密鍵ファイルを配置します。

import base64

# configファイルを元に入力します。入っている値はダミーです。
user="ocid1.user.oc1..aaaaaaaaputyouruserid"
fingerprint="dd:0d:2e:40:e6:fa:pu:ty:ou:rf:in:ge:rp:ri:nt:ef"
tenancy="ocid1.tenancy.oc1..aaaaaputyourtenancyid"

#先ほど控えたコンパートメントIDを指定します。このコンパートメントに課金されます
compartment_ocid="ocid1.compartment.oc1..putcompartmentid"

#Regionはホームリージョンではなく、GenAIを使用するリージョンを指定します。
#GenAIが利用できないリージョンを指定すると404エラーが返ってきました。。。
region="us-chicago-1"

# 文字列をスラッシュで結合
combined_string = f"{user}/{fingerprint}/{tenancy}/{region}/{compartment_ocid}"

# UTF-8でエンコードしてからBase64エンコード
encoded_bytes = base64.b64encode(combined_string.encode('utf-8'))

# バイト列を文字列に変換
encoded_string = encoded_bytes.decode('utf-8')

print("---config param---")
print(encoded_string)

# PEMファイルのパス
# プライベートキーが必要です。
pem_file_path = "Dify-GenAI.pem"

# PEMファイルの内容を読み込む
with open(pem_file_path, 'r') as pem_file:
    pem_content = pem_file.read()

# UTF-8でエンコードしてからBase64エンコード
encoded_bytes = base64.b64encode(pem_content.encode('utf-8'))

# バイト列を文字列に変換
encoded_string = encoded_bytes.decode('utf-8')

print("---key contents---")
print(encoded_string)

  • スクリプトを実行すると、Config ParamとKey ContentsをBase64化した文字列が出力されます。
    これをそれぞれDifyの設定欄にコピペします。

  • Configパラメータが400字程度、 Keyパラメータは2000字程度となります。

  • 正しく接続できれば、使用できるモデルが表示されます。

以上でOCI GenAIへの接続設定は完了です。お疲れ様でした。

Discussion