2023年12月21日木曜日

GoogleのGemini APIをOracle APEXから呼び出す

最近GoogleからリリースされたGemini APIを、Oracle APEXから呼び出してみます。

本記事の主な内容は、API呼び出しのために使用するWeb資格証明の作成手順になります。

Gemini APIとしては同じみたいですが、2通りの呼び出し方法があるようです。Googleの以下のページに、Google AI Gemini APIGoogle Cloud Vertex AI Gemini APIの違いが説明されています。

Google AI の Gemini から Vertex AI に移行する

Google AI Gemini APIの認証はAPIキーVertex AI Gemini APIではGoogle Cloudサービスアカウントによる認証が必要になります。その他、無料枠の設定があるのはGoogle AI Gemini APIのみ、エンタープライズ・サポートがあるのはVertex AIのみとなっています。特に、データ プライバシーのコミットメントはVertex AIのみなので、Gemini APIを企業で利用する場合は、Vertex AIを呼び出すことになると思われます。

最初に、Google AI Gemini APIを呼び出すためのWeb資格証明を作成します。

Google側の準備から始めます。プロジェクトは作成済みとします。

APIとサービスの画面を開き、APIとサービスの有効化をクリックします。


Gemini APIは、APIライブラリとしてはGenerative Language APIという名前になっています。Generative Language APIを検索し、選択します。


Generative Language API有効にします。


Generative Language APIが有効になります。認証情報を作成します。


Googleの以下のドキュメントから手順を確認します。

APIキーを取得する

API を使用するには API キーが必要です。Google AI Studio でワンクリックで鍵を作成できます。と記載されていて、実際にGoogle AI Studioからワンクリックで鍵を作成できます。

本記事の目的はAPEXからGemini APIを呼び出すことなのでGoogle AI Studioは使わず、Google CloudのコンソールからAPIキーを作成します。

APIとサービス認証情報の画面を開き、認証情報の作成をクリックします。メニューが開くのでAPIキーを選択します。


APIキーが作成されます。コピーしてすぐに使用することもできますが、ダイアログを閉じて、APIキーに制限を加えます。


APIキー1をクリックして、編集画面を開きます。


名前Generative Language API Keyに変更します。APIの制限としてキーを制限を選択し、制限するAPIとしてGenerative Language APIを選択します。

APIキーをコピーし、保存をクリックします。


APIキーの準備ができたので、APEXでWeb資格証明を作成します。

ワークスペース・ユーティリティからWeb資格証明を開きます。

作成済みのWeb資格証明の一覧より、作成をクリックします。


作成するWeb資格証明の名前Google Gemini API Keyとします。静的IDGOOGLE_GEMINI_API_KEY認証タイプとしてHTTPヘッダーを選択します。

資格証明名としてx-goog-api-key資格証明シークレットとして先ほどGoogle側で作成したAPIキーを設定します。認証タイプとしてURL問合せ文字列を選択し、資格証明名keyとしてAPIキーを渡すこともできます。呼び出し時のURLにkey=APIキーが付加されますが、APEX_WEBSERVICE_LOGにWeb資格証明が記載されることはありません。


Web資格証明としてGoogle Gemini API Keyが作成されます。


確認のためにSQLワークショップSQLコマンドから、以下のコードを実行します。引数p_credential_static_idに先ほど作成したGOOGLE_GEMINI_API_KEYを渡します。

正常にレスポンスを受け取れるため、APIの認証は正しいことが確認できます。


次に、Vertex AI Gemini APIを呼び出すためのWeb資格証明を作成します。

以前の記事「GoogleのDocument AIのAPIを呼び出してOCRを実行する」と同じ手順で、認証情報のサービスアカウントを作成します。

サービスアカウント名mygeminiとしました。P12形式の秘密鍵のダウンロードまでを実施します。

PKCS#12の秘密鍵をPEMフォーマットに変換します。

openssl pkcs12 -in ダウンロードされたファイル -nocerts -nodes -out 出力ファイル

Enter Import Password:には秘密鍵のパスワードを入力します。

以下の例では、秘密鍵をmy-gemini-api.keyというファイルに出力しています。

% openssl pkcs12 -in my-gemini-project-8a3056725154.p12 -nocerts -nodes -out my-gemini-api.key

Enter Import Password: ********

MAC verified OK

% 


以前の記事ではUTIL_GOOGLE_APIというパッケージを作成し、それを使ってWeb資格証明を作っていました。今回はこのパッケージを少し改変しUTL_CRED_GOOGLEというパッケージを作成しました。APEXのWeb資格証明の作成と更新を行うプロシージャCREATE_OR_UPDATE_APEX_CREDENTIALを追加しています。

記事の最後に添付しているパッケージUTL_CRED_GOOGLEのコードを実行し、パッケージUTL_CRED_GOOGLEを作成しておきます。

作成したサービスアカウントメールをコピーしておきます。Web資格証明を作成するときに使用します。



以下のコードを実行し、Web資格証明GOOGLE_GEMINI_API_TOKENを作成します。C_RSA_APIの内容はPEM形式の秘密鍵に置き換えます。その他、サービスアカウントのメールも置き換えます。

プロシージャcreate_or_update_apex_credentialの引数p_credential_static_idとして、作成または更新するWeb資格証明の静的IDを指定します。指定した静的IDのWeb資格証明が無い場合は、Web資格証明が新規に作成されます。引数p_workspace_nameにWeb資格証明を作成するAPEXのワークスペース名を指定します。デフォルトで現在のワークスペースが選択されるため、APEXのアプリケーションやSQLコマンドから呼び出す場合は、p_workspace_nameを指定する必要はありません。

APEXの画面から、新規に作成されたWeb資格証明を確認できます。


APIリファレンスの以下のページに記載されているGemini APIのサンプルを実行し、Vertex AI Gemini APIを呼び出せることを確認します。

Gemini API

正常にレスポンスを受け取れるため、APIの認証は正しいことが確認できます。


以上でGoogle AI Gemini APIおよびVertex AI Gemini APIの両方ともに、Oracle APEXから呼び出せることが確認できました。

ちなみにVertex AIをAPIキーで呼び出すと、以下のようなレスポンスが返されます。
[{
  "error": {
    "code": 401,
    "message": "API keys are not supported by this API. Expected OAuth2 access token or other authentication credentials that assert a principal. See https://cloud.google.com/docs/authentication",
    "status": "UNAUTHENTICATED",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.ErrorInfo",
        "reason": "CREDENTIALS_MISSING",
        "domain": "googleapis.com",
        "metadata": {
          "method": "google.cloud.aiplatform.v1beta1.PredictionService.StreamGenerateContent",
          "service": "aiplatform.googleapis.com"
        }
      }
    ]
  }
}
]
Oracle APEXのアプリケーション作成の参考になれば幸いです。