Bermigrasi dari OpenAI SDK ke Gen AI SDK

Halaman ini menjelaskan cara memigrasikan kode yang dirancang untuk OpenAI SDK ke Google Gen AI SDK untuk memanfaatkan model Gemini di Vertex AI.

Ringkasan Migrasi

Notebook berikut menunjukkan migrasi praktis dari library openai ke library google-genai:

Pemetaan API & Sintaksis

Tabel berikut membandingkan komponen inti, metode, dan parameter OpenAI SDK dengan Gen AI SDK.

Fitur SDK OpenAI (openai) Gen AI SDK (google-genai)
Inisialisasi Klien client = OpenAI(api_key=...) client = genai.Client(vertexai=True, ...)
Metode Pembuatan client.chat.completions.create client.models.generate_content
Metode Streaming stream=True (parameter) client.models.generate_content_stream (metode)
Input Pengguna messages=[{"role": "user", "content": "..."}] contents="..." (str) atau contents=[...] (list)
Petunjuk Sistem messages=[{"role": "system", "content": "..."}] config=types.GenerateContentConfig(system_instruction=...)
Akses Respons response.choices[0].message.content response.text
Histori Chat Pengelolaan daftar manual (messages.append) client.chats.create() (Objek penting)
Token Maksimal max_tokens max_output_tokens (di dalam config)
Temperatur temperature temperature (di dalam config)
Mode JSON response_format={"type": "json_object"} response_mime_type="application/json" (di dalam config)

Penginstalan dan Penyiapan

Uninstal library OpenAI dan instal Gen AI SDK.

pip install google-genai

2. Autentikasi & Inisialisasi

Meskipun OpenAI menggunakan Kunci API, Vertex AI menggunakan kredensial Identity and Access Management (IAM) (Kredensial Default Aplikasi). Anda harus menentukan Project ID dan Lokasi secara eksplisit.

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'
)
        
Tips: Anda juga dapat menetapkan variabel lingkungan untuk menginisialisasi klien tanpa argumen, mirip dengan cara klien OpenAI membaca kunci API dari lingkungan.

Tetapkan GOOGLE_GENAI_USE_VERTEXAI, GOOGLE_CLOUD_PROJECT, dan GOOGLE_CLOUD_LOCATION, seperti yang ditunjukkan:

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

Setelah dikonfigurasi, Anda dapat melakukan inisialisasi klien tanpa meneruskan parameter:

from google import genai

client = genai.Client()

Contoh Kode

Contoh kode berikut menunjukkan perbedaan antara OpenAI SDK dan Google Gen AI SDK untuk tugas umum.

Pembuatan teks sekali interaksi

Contoh kode berikut menunjukkan cara membuat teks. Perhatikan bahwa di Google Gen AI SDK, petunjuk sistem ditangani sebagai parameter konfigurasi, bukan peran pesan dalam daftar input.

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)
        

Pembuatan teks dengan parameter

Contoh kode berikut menunjukkan perbedaan dalam menentukan parameter konfigurasi. Di Google Gen AI SDK, parameter seperti temperature, max_output_tokens (sebelumnya max_tokens), dan pemformatan JSON dikelompokkan ke dalam objek GenerateContentConfig.

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 (Multi-turn)

Contoh kode berikut menunjukkan perbedaan dalam mengelola histori chat. Google Gen AI SDK menyederhanakannya dengan menyediakan objek chat yang memiliki status, sedangkan OpenAI mengharuskan penambahan pesan secara manual ke daftar.

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

Contoh kode berikut menunjukkan perbedaan dalam respons streaming. Google Gen AI SDK menggunakan metode tertentu (generate_content_stream), bukan tanda boolean.

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

Langkah berikutnya