Llama a Gemini con la biblioteca de OpenAI

La API de Gemini Chat Completions te permite enviar solicitudes a la API de Gemini de Vertex AI a través de las bibliotecas de OpenAI para Python y REST. Si ya usas las bibliotecas de OpenAI, puedes usar esta API para cambiar entre las llamadas a los modelos de OpenAI y los modelos de Gemini para comparar el resultado, el costo y la escalabilidad, sin cambiar tu código existente. Si todavía no usas las bibliotecas de OpenAI, te recomendamos que llames a la API de Gemini directamente.

Modelos compatibles

Modelo Versión
Gemini 1.5 Flash google/gemini-1.5-flash-001
Gemini 1.5 Pro 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

Autenticar

Para usar las bibliotecas de OpenAI para Python, instala el SDK de OpenAI:

pip install openai

Para autenticar con la API de Gemini Chat Completions, puedes modificar la configuración del cliente o cambiar el entorno configuración para usar la autenticación de Google y un extremo de Vertex AI. Elige una de las siguientes opciones, lo que te resulte más fácil:

Configuración del cliente

Para obtener credenciales de Google en Python de manera programática, puedes usar el SDK de Python google-auth:

pip install google-auth
pip install requests

Cambia el SDK de OpenAI para que apunte al extremo de finalización del chat de 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)

De forma predeterminada, los tokens de acceso duran 1 hora. Puedes extender la vida útil de tu token de acceso o actualizarlo de forma periódica y actualizar la variable openai.api_key.

Variables de entorno

Instala Google Cloud CLI. La biblioteca de OpenAI puede leer las variables de entorno OPENAI_API_KEY y OPENAI_BASE_URL para cambiar la autenticación y el extremo en su cliente predeterminado. Configura las siguientes variables:

$ 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"

A continuación, inicializa el cliente:

client = openai.OpenAI()

La API de Gemini Chat Completions usa OAuth para autenticarse con un token de acceso de corta duración. De forma predeterminada, los tokens de acceso duran 1 hora. Puedes extender la vida útil de tu token de acceso o actualizar tu token de forma periódica y actualizar la variable de entorno OPENAI_API_KEY.

Llama a la API de Gemini Chat Completions

En el siguiente ejemplo, se muestra cómo enviar solicitudes sin transmisión:

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

print(model_response)

En el siguiente ejemplo, se muestra cómo enviar solicitudes de transmisión:

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

print(model_response)

Parámetros admitidos

La API de Gemini Chat Completions admite los siguientes parámetros de OpenAI. Para obtener una descripción de cada parámetro, consulta la documentación de OpenAI sobre cómo crear finalizaciones de chat.

messages
  • System message
  • User message: Se admiten los tipos text y image_url. El tipo image_url solo admite imágenes almacenadas en Cloud Storage. Para obtener información sobre cómo crear un bucket de Cloud Storage y subir un archivo a él, consulta Descubre el almacenamiento de objetos. No se admite la opción detail.
  • Assistant message
  • Tool message
  • Function message: Este campo es obsoleto, pero se admite para versiones anteriores.
model
max_tokens
n
response_format
  • json_object: Se interpreta como pasar “application/json” a la API de Gemini.
  • text: Se interpreta como pasar “text/plain” a la API de Gemini.
  • Cualquier otro tipo de MIME se pasa tal como está al modelo, por ejemplo, pasar “application/json” directamente.
stop
stream
temperature
top_p
tools
  • type
  • function
    • name
    • description
    • parameters: Especifica los parámetros a usando la especificación de OpenAPI. Esto difiere del campo de parámetros de OpenAI, que se describe como un objeto de esquema JSON. Para obtener información sobre las diferencias de palabras clave entre el esquema de OpenAPI y JSON, consulta la guía de OpenAPI.
tool_choice
  • none
  • auto
  • required: Corresponde al modo ANY en FunctionCallingConfig.
function_call Este campo es obsoleto, pero se admite para versiones anteriores.
functions Este campo es obsoleto, pero se admite para versiones anteriores.

Si pasas cualquier parámetro no compatible, se ignorará.

¿Qué sigue?