Vertex AI-Modelle mithilfe der OpenAI-Bibliothek aufrufen

Mit der Chat Completions API können Sie Anfragen an Vertex AI-Modelle mithilfe der OpenAI-Bibliotheken für Python und REST senden. Wenn Sie bereits die OpenAI-Bibliotheken verwenden, können Sie mit dieser API zwischen dem Aufrufen von OpenAI-Modellen und von Vertex AI gehosteten Modellen wechseln, um Ausgabe, Kosten und Skalierbarkeit zu vergleichen, ohne den vorhandenen Code ändern zu müssen. Wenn Sie noch keine OpenAI-Bibliotheken nutzen, sollten Sie die Gemini API direkt aufrufen.

Unterstützte Modelle

Die Chat Autocomplete API unterstützt sowohl Gemini-Modelle als auch selbst bereitgestellte Modelle aus Model Garden.

Gemini-Modelle

In der folgenden Tabelle sind die unterstützten Gemini-Modelle aufgeführt:

Modell Version
Gemini 1.5 Flash google/gemini-1.5-flash
Gemini 1.5 Pro, google/gemini-1.5-pro
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

Selbst bereitgestellte Modelle aus Model Garden

Die HuggingFace Text Generation Interface (HF TGI) und die vordefinierten vLLM-Container von Vertex AI Model Garden unterstützen die Chat Completions API. Allerdings unterstützt nicht jedes in diesen Containern bereitgestellte Modell die Chat Completions API. Die folgende Tabelle enthält die am häufigsten unterstützten Modelle nach Container:

HF TGI

vLLM

Authentifizieren

Installieren Sie das OpenAI SDK, um die OpenAI-Python-Bibliotheken zu verwenden:

pip install openai

Für die Authentifizierung bei der Chat Completions API haben Sie folgende Möglichkeiten: Sie können entweder die Client-Einrichtung ändern oder die Umgebungskonfiguration ändern, um die Google-Authentifizierung und einen Vertex AI-Endpunkt zu verwenden. Wählen Sie die für Sie einfachere Methode aus und folgen Sie der Anleitung für die Einrichtung, je nachdem, ob Sie Gemini-Modelle oder selbst bereitgestellte Model Garden-Modelle aufrufen möchten.

Bestimmte Modelle in Model Garden und unterstützte Hugging Face-Modelle müssen zuerst auf einem Vertex AI-Endpunkt bereitgestellt werden, bevor sie Anfragen verarbeiten können. Wenn Sie diese selbst bereitgestellten Modelle über die Chat Completions API aufrufen, müssen Sie die Endpunkt-ID angeben. Verwenden Sie den Befehl gcloud ai endpoints list, um Ihre vorhandenen Vertex AI-Endpunkte aufzulisten.

Client-Setup

Um Google-Anmeldedaten programmatisch in Python abzurufen, können Sie das google-auth Python SDK verwenden:

pip install google-auth
pip install requests

Ändern Sie das OpenAI SDK so, dass es auf den Vertex AI-Chat Abschlussendpunkt verweist:

# 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_ID = 'PROJECT_ID'
LOCATION = 'LOCATION'

##############################
# Choose one of the following:
##############################

# If you are calling a Gemini model, set the MODEL_ID variable and set
# your client's base URL to use openapi.
MODEL_ID = 'MODEL_ID'
client = openai.OpenAI(
    base_url = f'https://{LOCATION}-aiplatform.googleapis.com/v1beta1/projects/{PROJECT_ID}/locations/{LOCATION}/endpoints/openapi',
    api_key = creds.token)

# If you are calling a self-deployed model from Model Garden, set the
# ENDPOINT_ID variable and set your client's base URL to use your endpoint.
MODEL_ID = 'MODEL_ID'
client = openai.OpenAI(
    base_url = f'https://{LOCATION}-aiplatform.googleapis.com/v1beta1/projects/{PROJECT_ID}/locations/{LOCATION}/endpoints/{ENDPOINT}',
    api_key = creds.token)

Standardmäßig sind Zugriffstokens eine Stunde lang gültig. Sie können die Lebensdauer des Zugriffstokens verlängern oder das Token regelmäßig aktualisieren und die Variable openai.api_key updaten.

Umgebungsvariablen

Installieren Sie die Google Cloud CLI. Die OpenAI-Bibliothek kann die Umgebungsvariablen OPENAI_API_KEY und OPENAI_BASE_URL lesen, um die Authentifizierung und den Endpunkt im Standardclient zu ändern. Legen Sie die folgenden Variablen fest:

$ export PROJECT_ID=PROJECT_ID
$ export LOCATION=LOCATION
$ export OPENAI_API_KEY="$(gcloud auth application-default print-access-token)"

Wenn Sie ein Gemini-Modell aufrufen möchten, legen Sie die Variable MODEL_ID fest und verwenden Sie den Endpunkt openapi:

$ export MODEL_ID=MODEL_ID
$ export OPENAI_BASE_URL="https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/endpoints/openapi"

Wenn Sie ein selbst bereitgestelltes Modell aus Model Garden aufrufen möchten, legen Sie die Variable ENDPOINT fest und verwenden Sie diese stattdessen in Ihrer URL:

$ export ENDPOINT=ENDPOINT_ID
$ export OPENAI_BASE_URL="https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/endpoints/${ENDPOINT}"

Initialisieren Sie als Nächstes den Client:

client = openai.OpenAI()

Die Gemini Chat Completions API verwendet OAuth zur Authentifizierung mit einem kurzlebigen Zugriffstoken. Standardmäßig sind Zugriffstokens eine Stunde lang gültig. Sie können die Lebensdauer des Zugriffstokens verlängern oder das Token regelmäßig aktualisieren und die Umgebungsvariable OPENAI_API_KEY updaten.

Gemini mit der Chat Completions API aufrufen

Im folgenden Beispiel wird gezeigt, wie Nicht-Streaming Anfragen gesendet werden:

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

Informationen zur Installation des Vertex AI SDK for Python finden Sie unter Vertex AI SDK for Python installieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Python API.

import vertexai
import openai

from google.auth import default, transport

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# location = "us-central1"

vertexai.init(project=project_id, location=location)

# Programmatically get an access token
credentials, _ = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
auth_request = transport.requests.Request()
credentials.refresh(auth_request)

# # OpenAI Client
client = openai.OpenAI(
    base_url=f"https://{location}-aiplatform.googleapis.com/v1beta1/projects/{project_id}/locations/{location}/endpoints/openapi",
    api_key=credentials.token,
)

response = client.chat.completions.create(
    model="google/gemini-1.5-flash-002",
    messages=[{"role": "user", "content": "Why is the sky blue?"}],
)

print(response)

Im folgenden Beispiel wird gezeigt, wie Sie mit der Chat Completions API Streaminganfragen an ein Gemini-Modell senden:

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

Informationen zur Installation des Vertex AI SDK for Python finden Sie unter Vertex AI SDK for Python installieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Python API.

import vertexai
import openai

from google.auth import default, transport

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# location = "us-central1"

vertexai.init(project=project_id, location=location)

# Programmatically get an access token
credentials, _ = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
auth_request = transport.requests.Request()
credentials.refresh(auth_request)

# OpenAI Client
client = openai.OpenAI(
    base_url=f"https://{location}-aiplatform.googleapis.com/v1beta1/projects/{project_id}/locations/{location}/endpoints/openapi",
    api_key=credentials.token,
)

response = client.chat.completions.create(
    model="google/gemini-1.5-flash-002",
    messages=[{"role": "user", "content": "Why is the sky blue?"}],
    stream=True,
)
for chunk in response:
    print(chunk)

Ein selbst bereitgestelltes Modell mit der Chat Completions API aufrufen

Im folgenden Beispiel wird gezeigt, wie Nicht-Streaming Anfragen gesendet werden:

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

Im folgenden Beispiel wird gezeigt, wie Sie mithilfe der Chat Autocomplete API Streaminganfragen an ein selbst bereitgestelltes Modell senden:

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

Unterstützte Parameter

Bei Google-Modellen unterstützt die Chat Autocomplete API die folgenden OpenAI-Parameter. Eine Beschreibung der einzelnen Parameter finden Sie in der OpenAI-Dokumentation zum Erstellen von Chat-Ergänzungen. Die Parameterunterstützung für Drittanbietermodelle variiert je nach Modell. Welche Parameter unterstützt werden, erfahren Sie in der Dokumentation des Modells.

messages
  • System message
  • User message: Die Typen text und image_url werden unterstützt. Der Typ image_url unterstützt Bilder, die als Cloud Storage-URI oder Base64-Codierung im Format "data:<MIME-TYPE>;base64,<BASE64-ENCODED-BYTES>" gespeichert sind. Informationen dazu, wie Sie einen Cloud Storage-Bucket erstellen und eine Datei darin hochladen, finden Sie unter Objektspeicher entdecken Die Option detail wird nicht unterstützt.
  • Assistant message
  • Tool message
  • Function message: dieses Feld ist veraltet, wird aber für Abwärtskompatibilität unterstützt.
model
max_tokens
n
frequency_penalty
presence_penalty
response_format
  • json_object: Wird als Übergabe von „application/json“ an die Gemini API interpretiert.
  • text: Wird als Übergabe von „text/plain“ an die Gemini API interpretiert.
  • Jeder andere MIME-Typ wird unverändert an das Modell übergeben, z. B. die direkte Übergabe von „application/json“.
stop
stream
temperature
top_p
tools
  • type
  • function
    • name
    • description
    • parameters: Geben Sie Parameter mit der OpenAPI-Spezifikation an. Das unterscheidet sich vom OpenAI-Parameterfeld, das als JSON-Schemaobjekt beschrieben wird. Informationen zu den Unterschieden zwischen OpenAPI und JSON-Schema finden Sie im OpenAPI-Leitfaden.
tool_choice
  • none
  • auto
  • required: Entspricht dem Modus ANY in der FunctionCallingConfig.
function_call Dieses Feld ist veraltet, wird aber für Abwärtskompatibilität unterstützt.
functions Dieses Feld ist veraltet, wird aber für Abwärtskompatibilität unterstützt.

Wenn Sie einen nicht unterstützten Parameter übergeben, wird er ignoriert.

Anmeldedaten aktualisieren

Im folgenden Beispiel wird gezeigt, wie Sie Ihre Anmeldedaten bei Bedarf automatisch aktualisieren:

Python

from typing import Any

import google.auth
import google.auth.transport.requests
import openai


class OpenAICredentialsRefresher:
    def __init__(self, **kwargs: Any) -> None:
        # Set a dummy key here
        self.client = openai.OpenAI(**kwargs, api_key="DUMMY")
        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:
            auth_req = google.auth.transport.requests.Request()
            self.creds.refresh(auth_req)

            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/v1beta1/projects/{project_id}/locations/{location}/endpoints/openapi",
)

response = client.chat.completions.create(
    model="google/gemini-1.5-flash-002",
    messages=[{"role": "user", "content": "Why is the sky blue?"}],
)

print(response)

Nächste Schritte