🅾️
DifyからOCI Generative AIに接続する
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側の準備
- OCIのコンソールに、GenAIが利用できるユーザでログインします。
- 自分のプロファイル -> APIキーで、新たにAPIキーを生成します。
- 秘密鍵ファイルをダウンロードし、「Dify-GenAI.pem」など、わかりやすい名前をつけて保存します。
- 新たに作成したAPIキーのフィンガープリントの右側にある、団子アイコンから「構成ファイルの表示」を選びます。構成ファイルのテンプレートができますので、丸ごとコピーして「Dify-GenAI-Conf」など、わかりやすい名前を付けて保存します。
- 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