Appeler Gemini à l'aide de la bibliothèque OpenAI

L'API Gemini Chat Completions vous permet d'envoyer des requêtes à l'API Vertex AI Gemini à l'aide des bibliothèques OpenAI pour Python et REST. Si vous utilisez déjà les bibliothèques OpenAI, vous pouvez utiliser cette API pour basculer entre les appels de modèles OpenAI et Gemini afin de comparer les résultats, les coûts et l'évolutivité, sans modifier votre code existant. Si vous n'utilisez pas déjà les bibliothèques OpenAI, nous vous recommandons d'appeler directement l'API Gemini.

Modèles compatibles

Modèle Version
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

Authentifier

Pour utiliser les bibliothèques OpenAI Python, installez le SDK OpenAI :

pip install openai

Pour vous authentifier auprès de l'API Gemini Chat Completions, vous pouvez modifier la configuration de votre client ou modifier la configuration de votre environnement afin d'utiliser l'authentification Google et un point de terminaison Vertex AI. Choisissez l'une des options suivantes, selon la situation la plus facile:

Configuration du client

Pour obtenir des identifiants Google de manière programmatique dans Python, vous pouvez utiliser le SDK Python google-auth:

pip install google-auth
pip install requests

Modifiez le SDK OpenAI pour qu'il pointe vers le point de terminaison de complétion de chat Vertex AI :

# 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'
MODEL_ID = 'MODEL_ID'
client = openai.OpenAI(
    base_url = f'https://{LOCATION}-aiplatform.googleapis.com/v1beta1/projects/{PROJECT}/locations/{LOCATION}/endpoints/openapi',
    api_key = creds.token)

Par défaut, les jetons d'accès durent une heure. Vous pouvez prolonger la durée de validité de votre jeton d'accès ou actualiser régulièrement votre jeton et mettre à jour la variable openai.api_key.

Variables d'environnement

Installez Google Cloud CLI. La bibliothèque OpenAI peut lire les variables d'environnement OPENAI_API_KEY et OPENAI_BASE_URL pour modifier l'authentification et le point de terminaison dans son client par défaut. Définissez les variables suivantes :

$ export PROJECT=PROJECT_ID
$ export LOCATION=LOCATION
$ export MODEL_ID=MODEL_ID
$ 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"

Ensuite, initialisez le client:

client = openai.OpenAI()

L'API Gemini Chat Completions utilise OAuth pour s'authentifier avec un jeton d'accès de courte durée. Par défaut, les jetons d'accès durent une heure. Vous pouvez prolonger la durée de validité de votre jeton d'accès ou actualiser régulièrement votre jeton et mettre à jour la variable d'environnement OPENAI_API_KEY.

Appeler l'API Gemini Chat Completions

L'exemple suivant montre comment envoyer des requêtes non streaming :

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 = "google/${MODEL_ID}",
  messages = [{"role": "user", "content": "Write a story about a magic backpack." }]
)

print(model_response)

L'exemple suivant montre comment envoyer des requêtes de streaming :

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}}",
  "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 = "google/${MODEL_ID}",
  stream = True,
  messages = [{"role": "user", "content": "Write a story about a magic backpack." }]
)

print(model_response)

Paramètres possibles

L'API Gemini Chat Completions est compatible avec les paramètres OpenAI suivants. Pour obtenir une description de chaque paramètre, consultez la documentation d'OpenAI sur la création de réponses automatiques.

messages
  • System message
  • User message : les types text et image_url sont acceptés. Le type image_url n'est compatible qu'avec les images stockées dans Cloud Storage. Pour apprendre à créer un bucket Cloud Storage et à y importer un fichier, consultez Découvrir le stockage d'objets. L'option detail n'est pas prise en charge.
  • Assistant message
model
max_tokens
n
response_format
  • json_object: interprété comme la transmission de "application/json" à l'API Gemini.
  • text : interprété comme une transmission de "text/plain" à l'API Gemini.
  • Tout autre type MIME est transmis tel quel au modèle, par exemple en transmettant directement "application/json".
stop
stream
temperature
top_p
tools
  • type
  • function
    • name
    • description
    • parameters
tool_choice
  • none
  • auto
  • required: correspond au mode ANY dans FunctionCallingConfig.
function_call Ce champ est obsolète, mais est compatible avec la rétrocompatibilité.
functions Ce champ est obsolète, mais est compatible avec la rétrocompatibilité.

Si vous transmettez un paramètre non compatible, il est ignoré.

Étapes suivantes