从 OpenAI SDK 迁移到 Gen AI SDK

本页介绍了如何将为 OpenAI SDK 设计的代码迁移到 Google Gen AI SDK,以便在 Vertex AI 上使用 Gemini 模型。

迁移概览

以下笔记本展示了从 openai 库到 google-genai 库的实际迁移:

API 和语法映射

下表比较了 OpenAI SDK 与生成式 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_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 使用 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)
        

Chat(多轮)

以下代码示例展示了聊天记录管理方面的差异。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="")
        

后续步骤