OpenAI ライブラリを使用して Gemini を呼び出す

Gemini Chat Completions API を使用すると、Python と REST 用の OpenAI ライブラリを使用して、Vertex AI Gemini API にリクエストを送信できます。すでに OpenAI ライブラリを使用している場合は、この API を使用して、OpenAI モデルと Gemini モデルの呼び出しを切り替えることで、既存のコードを変更することなく、出力、コスト、スケーラビリティを比較できます。OpenAI ライブラリを使用していない場合は、Gemini API を直接呼び出すことをおすすめします。

サポートされているモデル

モデル バージョン
Gemini 1.5 Flash google/gemini-1.5-flash-preview-0514
google/gemini-1.5-flash-001
Gemini 1.5 Pro google/gemini-1.5-pro-preview-0514
google/gemini-1.5-pro-preview-0409
google/gemini-1.5-pro-001
Gemini 1.0 Pro Vision google/gemini-1.0-pro-vision
google/gemini-1.0-pro-vision-001
Gemini 1.0 Pro google/gemini-1.0-pro-002
google/gemini-1.0-pro-001
google/gemini-1.0-pro

認証

OpenAI Python ライブラリを使用するには、OpenAI SDK をインストールします。

pip install openai

Gemini Chat Completions API で認証するには、クライアントの設定を変更するか、Google 認証と Vertex AI エンドポイントを使用するように環境構成を変更します。次のいずれか、簡単な方を選択します。

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

Python で Google 認証情報をプログラムで取得するには、google-auth Python SDK を使用します。

pip install google-auth
pip install requests

Vertex AI チャット補完エンドポイントを参照するように OpenAI SDK を変更します。

# Programmatically get an access token
creds, project = google.auth.default()
auth_req = google.auth.transport.requests.Request()
creds.refresh(auth_req)
# 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.

# Pass the Vertex endpoint and authentication to the OpenAI SDK
PROJECT = 'PROJECT_ID'
LOCATION = 'LOCATION'
client = openai.OpenAI(
    base_url = f'https://{LOCATION}-aiplatform.googleapis.com/v1beta1/projects/{PROJECT}/locations/{LOCATION}/endpoints/openapi',
    api_key = creds.token)

デフォルトでは、アクセス トークンの有効期間は 1 時間です。アクセス トークンの有効期間を延長するか、トークンを定期的に更新して openai.api_key 変数を更新します。

環境変数

Google Cloud CLI をインストールします。OpenAI ライブラリは、OPENAI_API_KEY 環境変数と OPENAI_BASE_URL 環境変数を読み取って、デフォルト クライアントの認証とエンドポイントを変更できます。以下の変数を設定します。

$ export PROJECT=PROJECT_ID
$ export LOCATION=LOCATION
$ export OPENAI_API_KEY="$(gcloud auth application-default print-access-token)"
$ export OPENAI_BASE_URL="https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT}/locations/${LOCATION}/endpoints/openapi"

次に、クライアントを初期化します。

client = openai.OpenAI()

Gemini Chat Completions API は、OAuth を使用して有効期間の短いアクセス トークンで認証します。デフォルトでは、アクセス トークンの有効期間は 1 時間です。アクセス トークンの有効期間を延長するか、トークンを定期的に更新して OPENAI_API_KEY 環境変数を更新します。

Gemini Chat Completions API を呼び出す

次のサンプルは、ストリーミング以外のリクエストを送信する方法を示しています。

curl

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/endpoints/openapi/chat/completions \
-d '{
  "model": "google/${MODEL_ID}",
  "messages": [{
    "role": "user",
    "content": "Write a story about a magic backpack."
  }]
}'

Python

import openai

client = openai.OpenAI()
model_response = client.chat.completions.create(
  model = "${MODEL_ID}",
  messages = [{"role": "user", "content": "Write a story about a magic backpack." }]
)

print(model_response)

次のサンプルは、ストリーミング リクエストを送信する方法を示しています。

curl

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/endpoints/openapi/chat/completions \
-d '{
  "model": "google/gemini-1.5-flash-001",
  "stream": true,
  "messages": [{
    "role": "user",
    "content": "Write a story about a magic backpack."
  }]
}'

Python

import openai

client = openai.OpenAI()
model_response = client.chat.completions.create(
  model = "${MODEL_ID}",
  stream = True,
  messages = [{"role": "user", "content": "Write a story about a magic backpack." }]
)

print(model_response)

サポートされるパラメータ

Gemini Chat Completions API は、次の OpenAI パラメータをサポートしています。各パラメータの説明については、OpenAI のチャット コンプリケーションの作成に関するドキュメントをご覧ください。

  • messages
    • System message
    • User message: text タイプと image_url タイプがサポートされています。image_url 型は、Cloud Storage に保存されている画像のみをサポートします。Cloud Storage バケットを作成してファイルをアップロードする方法については、オブジェクト ストレージの概要をご覧ください。detail オプションはサポートされていません。
    • Assistant message
  • model
  • max_tokens
  • n
  • response_format
    • json_object: Gemini API に「application/json」を渡すものとして解釈されます。
    • text: Gemini API に「text/plain」を渡すものとして解釈されます。
    • 他の MIME タイプはそのままモデルに渡されます(「application/json」を直接渡すなど)。
  • stop
  • stream
  • temperature
  • top_p
  • tools
    • type
    • function
      • name
      • description
      • parameters
  • tool_choice
    • none
    • auto
    • required: FunctionCallingConfig のモード ANY に対応します。
  • function_call: このフィールドは非推奨ですが、下位互換性のためにサポートされています。
  • functions: このフィールドは非推奨ですが、下位互換性のためにサポートされています。

サポートされていないパラメータを渡した場合、そのパラメータは無視されます。

次のステップ