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

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

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

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

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

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

תכונה ‫OpenAI SDK ‏ (openai) 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 ומתקינים את Gen AI SDK.

pip install google-genai

2. אימות והפעלה

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

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

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

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