Autentica

Per utilizzare le librerie Python di OpenAI con Vertex AI, devi autenticarti utilizzando le credenziali Google e configurare il client in modo che utilizzi un endpoint Vertex AI. Questo documento mostra come configurare l'ambiente e autenticarti utilizzando due metodi diversi.

Prima di iniziare

Prerequisiti

1. Installa gli SDK

Installa gli SDK OpenAI e Google Auth:

pip install openai google-auth requests

2. Configura l'autenticazione

Per effettuare l'autenticazione in Vertex AI, configura le Credenziali predefinite dell'applicazione (ADC). Per ulteriori informazioni, consulta Configurare le credenziali predefinite dell'applicazione.

3. Identifica l'endpoint

L'endpoint dipende dal tipo di modello che stai chiamando:

  • Modelli Gemini: utilizza openapi come ID endpoint.
  • Modelli di cui è stato eseguito il deployment autonomo: alcuni modelli in Model Garden e i modelli Hugging Face supportati devono essere prima di cui è stato eseguito il deployment prima di poter gestire le richieste. Quando chiami questi modelli, devi specificare l'ID endpoint univoco del tuo deployment.

Metodi di autenticazione

Puoi eseguire l'autenticazione configurando l'oggetto client direttamente nel codice o impostando le variabili di ambiente. Il seguente flusso di lavoro illustra la procedura.

Diagramma di flusso

Scegli il metodo più adatto al tuo caso d'uso.

Metodo Vantaggi Svantaggi Ideali per
Configurazione del client Programmatico e flessibile. Consente la gestione dinamica delle credenziali all'interno dell'applicazione. Richiede più codice per gestire direttamente le credenziali e gli endpoint. Applicazioni che devono gestire più client o aggiornare le credenziali in modo dinamico.
Variabili di ambiente Configurazione semplice che separa la configurazione dal codice. Ideale per lo sviluppo e il test locali. Meno sicure se non gestite correttamente. Meno flessibile per le modifiche dinamiche delle credenziali. Quick start, sviluppo locale e deployment containerizzati in cui le variabili di ambiente sono standard.

Configurazione del client

Puoi ottenere le credenziali Google e configurare il client OpenAI in modo programmatico nel codice Python. Per impostazione predefinita, i token di accesso scadono dopo un'ora. Per le applicazioni a lungo termine, scopri come aggiornare le credenziali.

Visualizza il codice Python per la configurazione del client

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

Variabili di ambiente

Puoi utilizzare Google Cloud CLI per ottenere un token di accesso. La libreria OpenAI legge automaticamente le variabili di ambiente OPENAI_API_KEY e OPENAI_BASE_URL per configurare il client predefinito.

  1. Imposta le variabili di ambiente comuni:

    export PROJECT_ID=PROJECT_ID
    export LOCATION=LOCATION
    export OPENAI_API_KEY="$(gcloud auth application-default print-access-token)"
            
  2. Imposta l'URL di base per il tipo di modello:

    • Per un modello Gemini:

      export MODEL_ID=MODEL_ID
      export OPENAI_BASE_URL="https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/endpoints/openapi"
                  
    • Per un modello di cui è stato eseguito il deployment autonomo da Model Garden:

      export ENDPOINT=ENDPOINT_ID
      export OPENAI_BASE_URL="https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/endpoints/${ENDPOINT}"
                  
  3. Esegui l'inizializzazione del client:

    Il client utilizza le variabili di ambiente impostate.

    client = openai.OpenAI()
            

Per impostazione predefinita, i token di accesso scadono dopo un'ora. Dovrai aggiornare periodicamente il token e la variabile di ambiente OPENAI_API_KEY.

Aggiorna le credenziali

I token di accesso ottenuti dalle Credenziali predefinite dell'applicazione scadono dopo un'ora. Per servizi o applicazioni a lungo termine, devi implementare un meccanismo per aggiornare il token. L'esempio seguente mostra una classe wrapper che aggiorna automaticamente il token alla scadenza.

Visualizzare un esempio di corso di aggiornamento delle credenziali

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)
    

Passaggi successivi