Eseguire la migrazione dall'SDK OpenAI all'SDK Gen AI

Questa pagina spiega come eseguire la migrazione del codice progettato per l'SDK OpenAI all'SDK Google Gen AI per utilizzare i modelli Gemini su Vertex AI.

Panoramica della migrazione

Il seguente notebook mostra una migrazione pratica dalla libreria openai alla libreria google-genai:

API e mappatura della sintassi

La seguente tabella confronta i componenti, i metodi e i parametri principali dell'SDK OpenAI con l'SDK Gen AI.

Funzionalità SDK OpenAI (openai) SDK Gen AI (google-genai)
Inizializzazione del client client = OpenAI(api_key=...) client = genai.Client(vertexai=True, ...)
Metodo di generazione client.chat.completions.create client.models.generate_content
Metodo di streaming stream=True (parametro) client.models.generate_content_stream (metodo)
User Input messages=[{"role": "user", "content": "..."}] contents="..." (stringa) o contents=[...] (elenco)
Istruzioni di sistema messages=[{"role": "system", "content": "..."}] config=types.GenerateContentConfig(system_instruction=...)
Accesso alle risposte response.choices[0].message.content response.text
Cronologia chat Gestione manuale degli elenchi (messages.append) client.chats.create() (oggetto stateful)
Max Tokens max_tokens max_output_tokens (all'interno di config)
Temperatura temperature temperature (all'interno di config)
Modalità JSON response_format={"type": "json_object"} response_mime_type="application/json" (all'interno di config)

Installazione e configurazione

Disinstalla la libreria OpenAI e installa l'SDK Gen AI.

pip install google-genai

2. Autenticazione e inizializzazione

Mentre OpenAI utilizza una chiave API, Vertex AI utilizza le credenziali Identity and Access Management (IAM) (Credenziali predefinite dell'applicazione). Devi definire in modo esplicito l'ID progetto e la località.

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'
)
        
Suggerimento:puoi anche impostare le variabili di ambiente per inizializzare il client senza argomenti, in modo simile a come il client OpenAI legge la chiave API dall'ambiente.

Imposta GOOGLE_GENAI_USE_VERTEXAI, GOOGLE_CLOUD_PROJECT e GOOGLE_CLOUD_LOCATION, come mostrato:

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

Una volta configurato, puoi inizializzare il client senza passare parametri:

from google import genai

client = genai.Client()

Esempi di codice

I seguenti esempi di codice mostrano le differenze tra l'SDK OpenAI e l'SDK Google Gen AI per le attività comuni.

Generazione di testo a turno singolo

I seguenti esempi di codice mostrano come generare testo. Tieni presente che nell'SDK Google Gen AI, le istruzioni di sistema vengono gestite come parametro di configurazione anziché come ruolo del messaggio nell'elenco di input.

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)
        

Generazione di testo con parametri

I seguenti esempi di codice mostrano le differenze nella definizione dei parametri di configurazione. Nell'SDK Google Gen AI, i parametri come temperature, max_output_tokens (in precedenza max_tokens) e la formattazione JSON sono raggruppati in un oggetto 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 (multi-turno)

I seguenti esempi di codice mostrano le differenze nella gestione della cronologia della chat. L'SDK Google Gen AI semplifica questa operazione fornendo un oggetto chat stateful, mentre OpenAI richiede l'aggiunta manuale dei messaggi a un elenco.

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

I seguenti esempi di codice mostrano le differenze nelle risposte di streaming. Google Gen AI SDK utilizza un metodo specifico (generate_content_stream) anziché un flag booleano.

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="")
        

Passaggi successivi