Autenticar

Para usar las bibliotecas de Python de OpenAI con Vertex AI, debes autenticarte con credenciales de Google y configurar tu cliente para que use un extremo de Vertex AI. En este documento, se muestra cómo configurar tu entorno y autenticar con dos métodos diferentes.

Antes de comenzar

Requisitos previos

1. Instala los SDKs

Instala los SDKs de OpenAI y Google Auth:

pip install openai google-auth requests

2. Configura la autenticación

Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación (ADC). Para obtener más información, consulta Configura credenciales predeterminadas de la aplicación.

3. Identifica tu extremo

Tu extremo depende del tipo de modelo al que llames:

  • Modelos de Gemini: Usa openapi como el ID del extremo.
  • Modelos implementados por el usuario: Ciertos modelos de Model Garden y los modelos de Hugging Face compatibles primero deben implementarse antes de que puedan entregarse solicitudes. Cuando llames a estos modelos, debes especificar el ID de extremo único de tu implementación.

Métodos de autenticación

Para autenticarte, configura el objeto cliente directamente en tu código o establece variables de entorno. En el siguiente flujo de trabajo, se describe el proceso.

Diagrama de flujo

Elige el método que mejor se adapte a tu caso de uso.

Método Ventajas Desventajas Clientes ideales
Configuración del cliente Programática y flexible. Permite la administración dinámica de credenciales dentro de la aplicación. Requiere más código para administrar credenciales y extremos directamente. Aplicaciones que necesitan administrar varios clientes o actualizar credenciales de forma dinámica.
Variables de entorno Configuración sencilla que separa la configuración del código. Ideal para el desarrollo y las pruebas locales. Son menos seguros si no se administran correctamente. Menos flexible para los cambios de credenciales dinámicos. Guías de inicio rápido, desarrollo local e implementaciones en contenedores en las que las variables de entorno son estándar

Configuración del cliente

Puedes obtener credenciales de Google de manera programática y configurar el cliente de OpenAI en tu código de Python. De forma predeterminada, los tokens de acceso vencen después de una hora. En el caso de las aplicaciones de larga duración, consulta cómo actualizar tus credenciales.

Cómo ver el código de Python para la configuración del cliente

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,
)
    

Variables de entorno

Puedes usar Google Cloud CLI para obtener un token de acceso. La biblioteca de OpenAI lee automáticamente las variables de entorno OPENAI_API_KEY y OPENAI_BASE_URL para configurar el cliente predeterminado.

  1. Configura las siguientes variables de entorno comunes:

    export PROJECT_ID=PROJECT_ID
    export LOCATION=LOCATION
    export OPENAI_API_KEY="$(gcloud auth application-default print-access-token)"
            
  2. Establece la URL base para tu tipo de modelo:

    • Para un modelo Gemini:

      export MODEL_ID=MODEL_ID
      export OPENAI_BASE_URL="https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/endpoints/openapi"
                  
    • Para un modelo que se implementó por sí solo desde Model Garden:

      export ENDPOINT=ENDPOINT_ID
      export OPENAI_BASE_URL="https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/endpoints/${ENDPOINT}"
                  
  3. Inicializa el cliente:

    El cliente usa las variables de entorno que configuraste.

    client = openai.OpenAI()
            

De forma predeterminada, los tokens de acceso vencen después de una hora. Deberás actualizar el token periódicamente y actualizar la variable de entorno OPENAI_API_KEY.

Actualiza tus credenciales

Los tokens de acceso obtenidos de las credenciales predeterminadas de la aplicación vencen después de una hora. En el caso de los servicios o las aplicaciones de larga duración, debes implementar un mecanismo para actualizar el token. En el siguiente ejemplo, se muestra una clase de wrapper que actualiza automáticamente el token cuando vence.

Consulta un ejemplo de una clase de actualización de credenciales

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)
    

¿Qué sigue?