Migrer du SDK OpenAI vers le SDK Gen AI

Cette page explique comment migrer le code conçu pour le SDK OpenAI vers le SDK Google Gen AI afin d'utiliser les modèles Gemini sur Vertex AI.

Présentation de la migration

Le notebook suivant illustre une migration pratique de la bibliothèque openai vers la bibliothèque google-genai :

Mappage des API et de la syntaxe

Le tableau suivant compare les composants, méthodes et paramètres principaux du SDK OpenAI avec ceux du SDK Gen AI.

Fonctionnalité SDK OpenAI (openai) SDK Gen AI (google-genai)
Initialisation du client client = OpenAI(api_key=...) client = genai.Client(vertexai=True, ...)
Méthode de génération client.chat.completions.create client.models.generate_content
Méthode de streaming stream=True (paramètre) client.models.generate_content_stream (méthode)
Entrée utilisateur messages=[{"role": "user", "content": "..."}] contents="..." (str) ou contents=[...] (liste)
Instructions système messages=[{"role": "system", "content": "..."}] config=types.GenerateContentConfig(system_instruction=...)
Accès aux réponses response.choices[0].message.content response.text
Historique des chats Gestion manuelle des listes (messages.append) client.chats.create() (Objet avec état)
Nombre maximal de jetons max_tokens max_output_tokens (dans config)
Température temperature temperature (dans config)
Mode JSON response_format={"type": "json_object"} response_mime_type="application/json" (dans config)

Installation et configuration

Désinstallez la bibliothèque OpenAI et installez le SDK Gen AI.

pip install google-genai

2. Authentification et initialisation

Alors qu'OpenAI utilise une clé API, Vertex AI utilise des identifiants Identity and Access Management (IAM) (Identifiants par défaut de l'application). Vous devez définir explicitement l'ID et l'emplacement de votre projet.

SDK OpenAI SDK Google Gen AI
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'
)
        
Conseil : Vous pouvez également définir des variables d'environnement pour initialiser le client sans arguments, de la même manière que le client OpenAI lit la clé API à partir de l'environnement.

Définissez GOOGLE_GENAI_USE_VERTEXAI, GOOGLE_CLOUD_PROJECT et GOOGLE_CLOUD_LOCATION, comme indiqué :

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

Une fois configuré, vous pouvez initialiser le client sans transmettre de paramètres :

from google import genai

client = genai.Client()

Exemples de code

Les exemples de code suivants montrent les différences entre le SDK OpenAI et le SDK Google Gen AI pour les tâches courantes.

Génération de texte en un seul tour

Les exemples de code suivants montrent comment générer du texte. Notez que dans le SDK Google Gen AI, les instructions système sont traitées comme un paramètre de configuration plutôt que comme un rôle de message dans la liste d'entrée.

SDK OpenAI SDK Google Gen AI
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)
        

Génération de texte avec des paramètres

Les exemples de code suivants montrent les différences dans la définition des paramètres de configuration. Dans le SDK Google Gen AI, les paramètres tels que temperature, max_output_tokens (anciennement max_tokens) et la mise en forme JSON sont regroupés dans un objet GenerateContentConfig.

SDK OpenAI SDK Google Gen AI
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 (multitour)

Les exemples de code suivants montrent les différences dans la gestion de l'historique des discussions. Le SDK Google Gen AI simplifie cette opération en fournissant un objet chat avec état, tandis qu'OpenAI exige d'ajouter manuellement des messages à une liste.

SDK OpenAI SDK Google Gen AI
# 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

Les exemples de code suivants montrent les différences dans les réponses de streaming. Le SDK Google Gen AI utilise une méthode spécifique (generate_content_stream) plutôt qu'un indicateur booléen.

SDK OpenAI SDK Google Gen AI
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="")
        

Étapes suivantes