認証

Vertex AI で OpenAI Python ライブラリを使用するには、Google 認証情報を使用して認証し、Vertex AI エンドポイントを使用するようにクライアントを構成する必要があります。このドキュメントでは、2 つの異なる方法を使用して環境を設定し、認証する方法について説明します。

始める前に

前提条件

1. SDK をインストールする

OpenAI SDK と Google Auth SDK をインストールします。

pip install openai google-auth requests

2. 認証を設定する

Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報(ADC)を設定します。詳細については、アプリケーションのデフォルト認証情報を設定するをご覧ください。

3. エンドポイントを特定する

エンドポイントは、呼び出すモデルのタイプによって異なります。

  • Gemini モデル: エンドポイント ID として openapi を使用します。
  • セルフデプロイ モデル: Model Garden の一部のモデルとサポートされている Hugging Face モデルは、リクエストを処理する前に、まずデプロイする必要があります。これらのモデルを呼び出す場合は、デプロイの一意のエンドポイント ID を指定する必要があります。

認証方法

認証は、コードでクライアント オブジェクトを直接構成するか、環境変数を設定して行います。次のワークフローは、このプロセスの概要を示しています。

フローチャート

ユースケースに最適な方法を選択します。

メソッド 利点 欠点 推奨デバイス
クライアントの設定 プログラマティックで柔軟。アプリケーション内での認証情報の動的管理が可能になります。 認証情報とエンドポイントを直接管理するために、より多くのコードが必要になります。 複数のクライアントを管理する必要があるアプリケーション、または認証情報を動的に更新する必要があるアプリケーション。
環境変数 構成をコードから分離したシンプルな設定。ローカルでの開発とテストに最適です。 適切に管理されていない場合、セキュリティが低下します。認証情報の動的変更の柔軟性が低い。 環境変数が標準であるクイックスタート、ローカル開発、コンテナ化されたデプロイ。

クライアントのセットアップ

Google 認証情報をプログラムで取得し、Python コードで OpenAI クライアントを構成できます。デフォルトでは、アクセス トークンは 1 時間後に期限切れになります。長時間実行されるアプリケーションの場合は、認証情報を更新する方法をご覧ください。

クライアント設定の Python コードを表示する

import openai

from google.auth import default
import google.auth.transport.requests

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# location = "us-central1"

# Programmatically get an access token
credentials, _ = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
credentials.refresh(google.auth.transport.requests.Request())
# Note: the credential lives for 1 hour by default (https://cloud.google.com/docs/authentication/token-types#at-lifetime); after expiration, it must be refreshed.

##############################
# Choose one of the following:
##############################

# If you are calling a Gemini model, set the ENDPOINT_ID variable to use openapi.
ENDPOINT_ID = "openapi"

# If you are calling a self-deployed model from Model Garden, set the
# ENDPOINT_ID variable and set the client's base URL to use your endpoint.
# ENDPOINT_ID = "YOUR_ENDPOINT_ID"

# OpenAI Client
client = openai.OpenAI(
    base_url=f"https://{location}-aiplatform.googleapis.com/v1/projects/{project_id}/locations/{location}/endpoints/{ENDPOINT_ID}",
    api_key=credentials.token,
)
    

環境変数

Google Cloud CLI を使用してアクセス トークンを取得できます。OpenAI ライブラリは、OPENAI_API_KEY 環境変数と OPENAI_BASE_URL 環境変数を自動的に読み取って、デフォルト クライアントを構成します。

  1. 一般的な環境変数を設定します。

    export PROJECT_ID=PROJECT_ID
    export LOCATION=LOCATION
    export OPENAI_API_KEY="$(gcloud auth application-default print-access-token)"
            
  2. モデルタイプのベース URL を設定します。

    • Gemini モデルの場合:

      export MODEL_ID=MODEL_ID
      export OPENAI_BASE_URL="https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/endpoints/openapi"
                  
    • Model Garden からセルフデプロイされたモデルの場合:

      export ENDPOINT=ENDPOINT_ID
      export OPENAI_BASE_URL="https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/endpoints/${ENDPOINT}"
                  
  3. クライアントを初期化します。

    クライアントは、設定した環境変数を使用します。

    client = openai.OpenAI()
            

デフォルトでは、アクセス トークンは 1 時間後に期限切れになります。トークンを定期的に更新して OPENAI_API_KEY 環境変数を更新する必要があります。

認証情報を更新する

アプリケーションのデフォルト認証情報から取得したアクセス トークンは、1 時間後に期限切れになります。長時間実行されるサービスやアプリケーションの場合は、トークンを更新するメカニズムを実装する必要があります。次の例は、トークンが期限切れになったときに自動的に更新するラッパークラスを示しています。

認定資格更新クラスの例を表示する

from typing import Any

import google.auth
import google.auth.transport.requests
import openai


class OpenAICredentialsRefresher:
    def __init__(self, **kwargs: Any) -> None:
        # Set a placeholder key here
        self.client = openai.OpenAI(**kwargs, api_key="PLACEHOLDER")
        self.creds, self.project = google.auth.default(
            scopes=["https://www.googleapis.com/auth/cloud-platform"]
        )

    def __getattr__(self, name: str) -> Any:
        if not self.creds.valid:
            self.creds.refresh(google.auth.transport.requests.Request())

            if not self.creds.valid:
                raise RuntimeError("Unable to refresh auth")

            self.client.api_key = self.creds.token
        return getattr(self.client, name)



# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# location = "us-central1"

client = OpenAICredentialsRefresher(
    base_url=f"https://{location}-aiplatform.googleapis.com/v1/projects/{project_id}/locations/{location}/endpoints/openapi",
)

response = client.chat.completions.create(
    model="google/gemini-2.0-flash-001",
    messages=[{"role": "user", "content": "Why is the sky blue?"}],
)

print(response)
    

次のステップ

  • OpenAI 互換の構文で Chat Completions API を呼び出す例をご覧ください。
  • OpenAI 互換の構文で Inference API を呼び出す例をご覧ください。
  • OpenAI 互換の構文で Function Calling API を呼び出す例をご覧ください。
  • 詳細については、Gemini API をご覧ください。