Von OpenAI SDK zu Gen AI SDK migrieren

Auf dieser Seite wird beschrieben, wie Sie Code, der für das OpenAI SDK entwickelt wurde, zum Google Gen AI SDK migrieren, um Gemini-Modelle in Vertex AI zu verwenden.

Übersicht zur Migration

Das folgende Notebook veranschaulicht eine praktische Migration von der openai-Bibliothek zur google-genai-Bibliothek:

API- und Syntaxzuordnung

In der folgenden Tabelle werden die Kernkomponenten, Methoden und Parameter des OpenAI SDK mit dem Gen AI SDK verglichen.

Funktion OpenAI SDK (openai) Gen AI SDK (google-genai)
Client-Initialisierung client = OpenAI(api_key=...) client = genai.Client(vertexai=True, ...)
Generierungsmethode client.chat.completions.create client.models.generate_content
Streamingmethode stream=True (Parameter) client.models.generate_content_stream (Methode)
Nutzereingabe messages=[{"role": "user", "content": "..."}] contents="..." (str) oder contents=[...] (list)
Systemanweisungen messages=[{"role": "system", "content": "..."}] config=types.GenerateContentConfig(system_instruction=...)
Zugriff auf Antworten response.choices[0].message.content response.text
Chatprotokoll Manuelle Listenverwaltung (messages.append) client.chats.create() (zustandsorientiertes Objekt)
Maximale Anzahl an Tokens max_tokens max_output_tokens (in config)
Temperatur temperature temperature (in config)
JSON-Modus response_format={"type": "json_object"} response_mime_type="application/json" (in config)

Installation und Einrichtung

Deinstallieren Sie die OpenAI-Bibliothek und installieren Sie das Gen AI SDK.

pip install google-genai

2. Authentifizierung und Initialisierung

Während OpenAI einen API-Schlüssel verwendet, nutzt Vertex AI IAM-Anmeldedaten (Standardanmeldedaten für Anwendungen). Sie müssen Ihre Projekt-ID und Ihren Standort explizit angeben.

OpenAI SDK Google Gen AI SDK
from openai import OpenAI
import os

# Relies on OPENAI_API_KEY environment variable
client = OpenAI()
        
from google import genai

# Use vertexai=True to use the Vertex AI platform
client = genai.Client(
    vertexai=True,
    project='your-project-id',
    location='us-central1'
)
        
Tipp:Sie können auch Umgebungsvariablen festlegen, um den Client ohne Argumente zu initialisieren. Das funktioniert ähnlich wie beim OpenAI-Client, der den API-Schlüssel aus der Umgebung liest.

Legen Sie GOOGLE_GENAI_USE_VERTEXAI, GOOGLE_CLOUD_PROJECT und GOOGLE_CLOUD_LOCATION wie gezeigt fest:

export GOOGLE_GENAI_USE_VERTEXAI=true
export GOOGLE_CLOUD_PROJECT='your-project-id'
export GOOGLE_CLOUD_LOCATION='global'

Nach der Konfiguration können Sie den Client initialisieren, ohne Parameter zu übergeben:

from google import genai

client = genai.Client()

Codebeispiele

Die folgenden Codebeispiele zeigen die Unterschiede zwischen dem OpenAI SDK und dem Google Gen AI SDK für gängige Aufgaben.

Textgenerierung in einem Schritt

Die folgenden Codebeispiele zeigen, wie Sie Text generieren. Im Google Gen AI SDK werden Systemanweisungen als Konfigurationsparameter und nicht als Nachrichtenrolle in der Eingabeliste behandelt.

OpenAI SDK Google Gen AI SDK
response = client.chat.completions.create(
    model="gpt-4",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Explain quantum physics."}
    ]
)
print(response.choices[0].message.content)
        
from google.genai import types

response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents="Explain quantum physics.",
    config=types.GenerateContentConfig(
        system_instruction="You are a helpful assistant."
    )
)
print(response.text)
        

Textgenerierung mit Parametern

Die folgenden Codebeispiele zeigen die Unterschiede beim Definieren von Konfigurationsparametern. Im Google Gen AI SDK werden Parameter wie temperature, max_output_tokens (früher max_tokens) und die JSON-Formatierung in einem GenerateContentConfig-Objekt gruppiert.

OpenAI SDK Google Gen AI SDK
response = client.chat.completions.create(
    model="gpt-4",
    messages=[
        {"role": "user", "content": "List 3 types of apples in JSON."}
    ],
    temperature=0.7,
    max_tokens=1000,
    response_format={"type": "json_object"}
)

print(response.choices[0].message.content)
        
from google.genai import types

config = types.GenerateContentConfig(
    temperature=0.7,
    max_output_tokens=1000,
    response_mime_type="application/json"
)

response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents="List 3 types of apples in JSON.",
    config=config
)

print(response.text)
        

Chat (wechselseitig)

Die folgenden Codebeispiele zeigen die Unterschiede bei der Verwaltung des Chathistorie. Das Google Gen AI SDK vereinfacht dies, da es ein statusbehaftetes chat-Objekt bereitstellt. Bei OpenAI müssen Nachrichten manuell an eine Liste angehängt werden.

OpenAI SDK Google Gen AI SDK
# You must manually manage the list state
messages = [{"role": "user", "content": "Hi"}]

response = client.chat.completions.create(
    model="gpt-4",
    messages=messages
)

# Append the response to history manually
messages.append(response.choices[0].message)
messages.append({"role": "user", "content": "Next question"})

response2 = client.chat.completions.create(
    model="gpt-4",
    messages=messages
)
print(response2.choices[0].message.content)
        
# The SDK manages history for you
chat = client.chats.create(
    model="gemini-2.5-flash",
    config=types.GenerateContentConfig(
        system_instruction="You are a helpful assistant."
    )
)

response1 = chat.send_message("Hi")
print(response1.text)

# History is retained automatically in the chat object
response2 = chat.send_message("Next question")
print(response2.text)
        

Streaming

Die folgenden Codebeispiele zeigen die Unterschiede bei Streaming-Antworten. Das Google Gen AI SDK verwendet eine bestimmte Methode (generate_content_stream) anstelle eines booleschen Flags.

OpenAI SDK Google Gen AI SDK
stream = client.chat.completions.create(
    model="gpt-4",
    messages=[{"role": "user", "content": "Write a story."}],
    stream=True
)

for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")
        
stream = client.models.generate_content_stream(
    model="gemini-2.5-flash",
    contents="Write a story."
)

for chunk in stream:
    print(chunk.text, end="")
        

Nächste Schritte