מעבר מ-OpenAI SDK ל-Google Gen AI SDK

בדף הזה מוסבר איך להעביר קוד שנועד ל-OpenAI SDK אל Google Gen AI SDK כדי להשתמש במודלים של Gemini ב-Gemini Enterprise Agent Platform.

סקירה כללית על מיגרציה

במחברת הבאה מוצגת העברה מעשית מהספרייה openai לספרייה google-genai:

מיפוי של ממשקי API ותחביר

בטבלה הבאה מוצגת השוואה בין רכיבי הליבה, השיטות והפרמטרים של OpenAI SDK לבין Google Gen AI SDK.

תכונה ‫OpenAI SDK ‏ (openai) ‫Google Gen AI SDK (google-genai)
Client Initialization client = OpenAI(api_key=...) client = genai.Client(vertexai=True, ...)
שיטת יצירה client.chat.completions.create client.models.generate_content
שיטת סטרימינג stream=True (פרמטר) client.models.generate_content_stream (אמצעי תשלום)
קלט משתמש messages=[{"role": "user", "content": "..."}] contents="..." (str) או contents=[...] (list)
הוראות מערכת messages=[{"role": "system", "content": "..."}] config=types.GenerateContentConfig(system_instruction=...)
Response Access response.choices[0].message.content response.text
היסטוריית צ'אט ניהול ידני של רשימות (messages.append) client.chats.create() (אובייקט עם מצב)
מספר הטוקנים המקסימלי max_tokens max_output_tokens (בדומיין של config)
טמפרטורה temperature temperature (בדומיין של config)
מצב JSON response_format={"type": "json_object"} response_mime_type="application/json" (בדומיין של config)

התקנה והגדרה

מסירים את ספריית OpenAI ומתקינים את Google Gen AI SDK.

pip install google-genai

‫2. אימות ואתחול

‫OpenAI משתמש במפתח API, אבל Agent Platform משתמש בפרטי כניסה לניהול זהויות והרשאות גישה (IAM) (Application Default Credentials). צריך להגדיר באופן מפורש את מזהה הפרויקט והמיקום.

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 Agent Platform
client = genai.Client(
    vertexai=True,
    project='your-project-id',
    location='us-central1'
)
        
טיפ: אפשר גם להגדיר משתני סביבה כדי לאתחל את הלקוח בלי ארגומנטים, בדומה לאופן שבו לקוח OpenAI קורא את מפתח ה-API מהסביבה.

מגדירים את GOOGLE_GENAI_USE_ENTERPRISE, GOOGLE_CLOUD_PROJECT וGOOGLE_CLOUD_LOCATION, כמו שמוצג:

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

אחרי ההגדרה, אפשר לאתחל את הלקוח בלי להעביר פרמטרים:

from google import genai

client = genai.Client()

דוגמאות לקוד

בדוגמאות הקוד הבאות אפשר לראות את ההבדלים בין OpenAI SDK לבין Google Gen AI SDK במשימות נפוצות.

יצירת טקסט בשיחה אחת

בדוגמאות הקוד הבאות אפשר לראות איך ליצור טקסט. שימו לב שב-Google Gen AI SDK, הוראות המערכת מטופלות כפרמטר הגדרה ולא כסוג הודעה ברשימת הקלט.

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)
        

יצירת טקסט עם פרמטרים

בדוגמאות הקוד הבאות אפשר לראות את ההבדלים בהגדרת פרמטרים של תצורה. ב-Google Gen AI SDK, פרמטרים כמו temperature, max_output_tokens (לשעבר max_tokens) ועיצוב JSON מקובצים באובייקט 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)
        

צ'אט (רב-שלבי)

בדוגמאות הקוד הבאות אפשר לראות את ההבדלים בניהול היסטוריית הצ'אט. ‫Google Gen AI SDK מפשט את התהליך הזה באמצעות אובייקט chat עם שמירת מצב, בעוד שב-OpenAI צריך להוסיף הודעות לרשימה באופן ידני.

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)
        

סטרימינג

בדוגמאות הקוד הבאות אפשר לראות את ההבדלים בתגובות של הסטרימינג. ‫Google Gen AI SDK משתמש בשיטה ספציפית (generate_content_stream) במקום בדגל בוליאני.

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

המאמרים הבאים