OpenAI SDK から Gen AI SDK に移行する

このページでは、OpenAI SDK 用に設計されたコードを Google Gen AI SDK に移行して、Vertex AI で Gemini モデルを利用する方法について説明します。

移行の概要

次のノートブックは、openai ライブラリから google-genai ライブラリへの実際的な移行を示しています。

API と構文のマッピング

次の表は、OpenAI SDK と Gen AI SDK のコア コンポーネント、メソッド、パラメータを比較したものです。

機能 OpenAI SDK(openai Gen AI SDK(google-genai
クライアントの初期化 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.choices[0].message.content response.text
チャットの履歴 手動リスト管理(messages.append client.chats.create()(ステートフル オブジェクト)
最大トークン数 max_tokens max_output_tokensconfig 内)
Temperature(温度) temperature temperatureconfig 内)
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 は Identity and Access Management(IAM)認証情報(アプリケーションのデフォルト認証情報)を使用します。プロジェクト ID とロケーションを明示的に定義する必要があります。

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_VERTEXAIGOOGLE_CLOUD_PROJECTGOOGLE_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 では、temperaturemax_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="")
        

次のステップ