使用 OpenAI 库调用 Gemini

借助 Gemini Chat Completions API,您可以使用 Python 和 REST 的 OpenAI 库向 Vertex AI Gemini API 发送请求。如果您已经在使用 OpenAI 库,则可以使用此 API 在调用 OpenAI 模型和 Gemini 模型之间切换,以比较输出、成本和可伸缩性,而无需更改现有代码。如果您尚未使用 OpenAI 库,我们建议您直接调用 Gemini API

支持的模型

模型 版本
Gemini 1.5 Flash google/gemini-1.5-flash-001
Gemini 1.5 Pro google/gemini-1.5-pro-001
Gemini 1.0 Pro Vision google/gemini-1.0-pro-vision
google/gemini-1.0-pro-vision-001
Gemini 1.0 Pro google/gemini-1.0-pro-002
google/gemini-1.0-pro-001
google/gemini-1.0-pro

身份验证

如需使用 OpenAI Python 库,请安装 OpenAI SDK:

pip install openai

要使用 Gemini Chat Completions API 进行身份验证,您可以修改客户端设置或更改环境配置以使用 Google 身份验证和 Vertex AI 端点。请选择以下方式之一,以方便者为准:

客户端设置

要在 Python 中以编程方式获取 Google 凭据,您可以使用 google-auth Python SDK:

pip install google-auth
pip install requests

将 OpenAI SDK 更改为指向 Vertex AI 聊天补全端点:

# Programmatically get an access token
creds, project = google.auth.default()
auth_req = google.auth.transport.requests.Request()
creds.refresh(auth_req)
# Note: the credential lives for 1 hour by default (https://cloud.google.com/docs/authentication/token-types#at-lifetime); after expiration, it must be refreshed.

# Pass the Vertex endpoint and authentication to the OpenAI SDK
PROJECT = 'PROJECT_ID'
LOCATION = 'LOCATION'
MODEL_ID = 'MODEL_ID'
client = openai.OpenAI(
    base_url = f'https://{LOCATION}-aiplatform.googleapis.com/v1beta1/projects/{PROJECT}/locations/{LOCATION}/endpoints/openapi',
    api_key = creds.token)

默认情况下,访问令牌的有效期为 1 小时。您可以延长访问令牌的有效期,也可以定期刷新令牌并更新 openai.api_key 变量。

环境变量

安装 Google Cloud CLI。 OpenAI 库可以读取 OPENAI_API_KEYOPENAI_BASE_URL 环境变量,以更改其默认客户端中的身份验证和端点。 设置以下变量:

$ export PROJECT=PROJECT_ID
$ export LOCATION=LOCATION
$ export MODEL_ID=MODEL_ID
$ export OPENAI_API_KEY="$(gcloud auth application-default print-access-token)"
$ export OPENAI_BASE_URL="https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT}/locations/${LOCATION}/endpoints/openapi"

接下来,初始化客户端:

client = openai.OpenAI()

Gemini Chat Completions API 使用 OAuth 和短期有效的访问令牌进行身份验证。 默认情况下,访问令牌的有效期为 1 小时。您可以延长访问令牌的有效期,也可以定期刷新令牌并更新 OPENAI_API_KEY 环境变量。

调用 Gemini Chat Completions API

以下示例展示了如何发送非流式传输请求:

curl

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/endpoints/openapi/chat/completions \
-d '{
  "model": "google/${MODEL_ID}",
  "messages": [{
    "role": "user",
    "content": "Write a story about a magic backpack."
  }]
}'

Python

import openai

client = openai.OpenAI()
model_response = client.chat.completions.create(
  model = f"google/{MODEL_ID}",
  messages = [{"role": "user", "content": "Write a story about a magic backpack." }]
)

print(model_response)

以下示例展示了如何发送流式传输请求:

curl

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/endpoints/openapi/chat/completions \
-d '{
  "model": "google/${MODEL_ID}",
  "stream": true,
  "messages": [{
    "role": "user",
    "content": "Write a story about a magic backpack."
  }]
}'

Python

import openai

client = openai.OpenAI()
model_response = client.chat.completions.create(
  model = f"google/{MODEL_ID}",
  stream = True,
  messages = [{"role": "user", "content": "Write a story about a magic backpack." }]
)

print(model_response)

支持的参数

Gemini Chat Completions API 支持以下 OpenAI 参数。如需了解每个参数的说明,请参阅 OpenAI 有关创建聊天补全的文档。

messages
  • System message
  • User message:支持 textimage_url 类型。 image_url 类型仅支持存储在 Cloud Storage 中的图片。如需了解如何创建 Cloud Storage 存储桶并向其中上传文件,请参阅探索对象存储。 不支持 detail 选项。
  • Assistant message
  • Tool message
  • Function message:此字段已弃用,但仍受支持,以实现向后兼容性。
model
max_tokens
n
response_format
  • json_object:解释为将“application/json”传递给 Gemini API。
  • text:解释为将“text/plain”传递给 Gemini API。
  • 任何其他 MIME 类型都会按原样传递给模型,例如直接传递“application/json”。
stop
stream
temperature
top_p
tools
  • type
  • function
    • name
    • description
    • parameters:使用 OpenAPI 规范指定参数。该字段与 OpenAPI 参数字段不同,后者被描述为 JSON 架构对象。如需了解 OpenAPI 和 JSON 架构的关键字有何差异,请参阅 OpenAPI 指南
tool_choice
  • none
  • auto
  • required:对应于 FunctionCallingConfig 中的 ANY 模式。
function_call 此字段已弃用,但仍受支持,以实现向后兼容性。
functions 此字段已弃用,但仍受支持,以实现向后兼容性。

如果您传递任何不受支持的参数,系统会忽略该参数。

后续步骤