Migra del SDK de OpenAI al SDK de IA generativa

En esta página, se explica cómo migrar código diseñado para el SDK de OpenAI al SDK de IA generativa de Google para utilizar los modelos de Gemini en Vertex AI.

Descripción general de la migración

En el siguiente notebook, se muestra una migración práctica de la biblioteca de openai a la biblioteca de google-genai:

Asignación de API y sintaxis

En la siguiente tabla, se comparan los componentes, los métodos y los parámetros principales del SDK de OpenAI con el SDK de IA generativa.

Función SDK de OpenAI (openai) SDK de IA generativa (google-genai)
Inicialización del cliente client = OpenAI(api_key=...) client = genai.Client(vertexai=True, ...)
Método de generación client.chat.completions.create client.models.generate_content
Método de transmisión stream=True (parámetro) client.models.generate_content_stream (método)
Entrada del usuario messages=[{"role": "user", "content": "..."}] contents="..." (cadena) o contents=[...] (lista)
Instrucciones del sistema messages=[{"role": "system", "content": "..."}] config=types.GenerateContentConfig(system_instruction=...)
Acceso a las respuestas response.choices[0].message.content response.text
Historial de chat Administración manual de listas (messages.append) client.chats.create() (objeto con estado)
Max Tokens max_tokens max_output_tokens (dentro de config)
Temperatura temperature temperature (dentro de config)
Modo JSON response_format={"type": "json_object"} response_mime_type="application/json" (dentro de config)

Instalación y configuración

Desinstala la biblioteca de OpenAI y, luego, instala el SDK de IA generativa.

pip install google-genai

2. Autenticación e inicialización

Mientras que OpenAI usa una clave de API, Vertex AI usa credenciales de Identity and Access Management (IAM) (credenciales predeterminadas de la aplicación). Debes definir explícitamente el ID y la ubicación del proyecto.

SDK de OpenAI 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'
)
        
Nota: También puedes establecer variables de entorno para inicializar el cliente sin argumentos, de manera similar a como el cliente de OpenAI lee la clave de API del entorno.

Establece GOOGLE_GENAI_USE_VERTEXAI, GOOGLE_CLOUD_PROJECT y GOOGLE_CLOUD_LOCATION, como se muestra a continuación:

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

Una vez que lo configures, podrás inicializar el cliente sin pasar parámetros:

from google import genai

client = genai.Client()

Ejemplos de código

En las siguientes muestras de código, se muestran las diferencias entre el SDK de OpenAI y el SDK de IA generativa de Google para tareas comunes.

Generación de texto de un solo turno

En los siguientes ejemplos de código, se muestra cómo generar texto. Ten en cuenta que, en el SDK de IA generativa de Google, las instrucciones del sistema se controlan como un parámetro de configuración en lugar de un rol de mensaje en la lista de entrada.

SDK de OpenAI 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)
        

Generación de texto con parámetros

En los siguientes ejemplos de código, se muestran las diferencias en la definición de los parámetros de configuración. En el SDK de IA generativa de Google, los parámetros como temperature, max_output_tokens (anteriormente max_tokens) y el formato JSON se agrupan en un objeto GenerateContentConfig.

SDK de OpenAI 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 (varios turnos)

En los siguientes ejemplos de código, se muestran las diferencias en la administración del historial de chat. El SDK de IA generativa de Google simplifica este proceso proporcionando un objeto chat con estado, mientras que OpenAI requiere que se agreguen mensajes manualmente a una lista.

SDK de OpenAI 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)
        

Transmisión

En las siguientes muestras de código, se muestran las diferencias en las respuestas de transmisión. El SDK de IA generativa de Google usa un método específico (generate_content_stream) en lugar de una marca booleana.

SDK de OpenAI 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="")
        

¿Qué sigue?