利用 OpenAI 库调用 Vertex AI 模型解析与实战指南

预览
本产品或功能须遵守 服务专用条款 中“非正式版产品条款”部分的规定。
正式发布前,产品和功能均按原样提供,可能仅提供有限支持。欲了解详情,请参阅 发布阶段说明。

本文详细介绍如何使用 Python 版 OpenAI 库,通过 Chat Completions API 调用 Vertex AI 模型。借助这种方法,开发者可以在调用 OpenAI 模型与 Vertex AI 托管模型之间灵活切换,从而便于比较输出效果、成本及可伸缩性。对于尚未使用 OpenAI 库的开发者,也可直接调用 Gemini API。

👉 野卡 | 一分钟注册,轻松订阅海外线上服务

支持的模型

Chat Completions API 同时支持 Gemini 模型及部分来自 Model Garden 的自行部署模型。

来自 Model Garden 的自行部署模型

身份验证

使用 OpenAI Python 库前,请先安装 OpenAI SDK:

bash
pip install openai

在使用 Chat Completions API 进行身份验证时,您可以修改客户端设置或调整环境配置,以利用 Google 身份验证和 Vertex AI 端点。根据需要调用 Gemini 模型或 Model Garden 自行部署模型,请遵循相应的设置步骤。在 Python 中,您可以使用 google-auth 库获取 Google 凭据。默认情况下,访问令牌的有效期为 1 小时,您可以延长令牌有效期或定期刷新令牌,并更新 openai.api_key 变量。

调用 Gemini 模型时,请设置 MODEL_ID 变量,并使用 openapi 端点;若调用来自 Model Garden 的模型,则设置 ENDPOINT 变量,并在 URL 中使用该变量。初始化客户端示例如下:

python
client = openai.OpenAI()

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

使用 Chat Completions API 调用 Gemini 模型

Python 示例

了解如何安装或更新 Vertex AI SDK for Python及更多使用细节,请参考相关 Python API 参考文档。以下示例展示了如何使用 Chat Completions API 向 Gemini 模型发送流式传输请求。

curl 示例

您也可以使用 curl 命令发送请求,实现类似操作。

Python 示例(流式传输)

通过 Python 调用向 Gemini 模型发送流式传输请求是一种高效的方式,详细的安装与使用步骤请参阅 Vertex AI SDK for Python 指南。

使用 Chat Completions API 调用自行部署的模型

以下示例展示了如何发送非流式和流式请求。下面的 curl 命令示例演示了如何向自行部署的模型发送流式传输请求:

bash
curl -X POST \
-H “Authorization: Bearer $(gcloud auth print-access-token)” \
-H “Content-Type: application/json” \
https://us-central1-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/endpoints/${ENDPOINT}/chat/completions \
-d ‘{
“stream”: true,
“messages”: [{
“role”: “user”,
“content”: “Write a story about a magic backpack.”
}]
}’

支持的参数

对于 Google 模型,Chat Completions API 支持以下常用 OpenAI 参数;各参数具体说明请参照 OpenAI 创建聊天补全文档。对于第三方模型,各参数的支持情况可能有所不同,详情请参考相应模型文档。

| 参数 | 说明 |
| —————– | —————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— |
| messages | 包含:
– System message
– User message:支持 textimage_url 类型。其中,image_url 类型支持以 "data:<MIME-TYPE>;base64,<BASE64-ENCODED-BYTES>" 形式的 Cloud Storage URI 或 Base64 编码存储图片(上传文件和创建 Cloud Storage 存储桶的方法请参见 探索对象存储)。
– Assistant message
– Tool message
– Function message(已弃用,但为向后兼容保留) |
| model | 指定要调用的模型名称。 |
| max_tokens | 定义模型生成内容时的最大 token 数量。 |
| n | 生成候选回复的数量。 |
| frequency_penalty | 控制模型生成内容时的重复概率。 |
| presence_penalty | 控制生成回复时新内容出现的概率。 |
| response_format | 格式类型:
json_object:传递 “application/json” 到 Gemini API。
text:传递 “text/plain” 到 Gemini API。
– 其它 MIME 类型将原样传递。 |
| stop | 定义模型停止生成内容的标识符。 |
| stream | 是否启用流式传输模式。 |
| temperature | 控制生成内容时的随机性。 |
| top_p | 控制生成内容时的采样多样性。 |
| tools | 包含两个字段:
type
function:其子参数包括 namedescription,以及按 OpenAPI 规范指定的 parameters(与 JSON 架构参数不同)。 |
| tool_choice | 取值选项:
none
auto
required(对应 FunctionCallingConfig 中的 ANY 模式)。 |
| function_call | 已弃用,但仍支持以实现向后兼容。 |
| functions | 已弃用,但仍支持以实现向后兼容。 |

传递任何不受支持的参数时,系统会自动忽略该参数。

刷新凭据

以下示例展示了如何在需要时自动刷新认证凭据,以保证认证信息始终有效。

Python 示例

python
from typing import Any

import google.auth
import google.auth.transport.requests
import openai

class OpenAICredentialsRefresher:
def init(self, kwargs: Any) -> None:
# 设置一个虚拟的 API Key
self.client = openai.OpenAI(
kwargs, api_key=”DUMMY”)
self.creds, self.project = google.auth.default(
scopes=[“https://www.googleapis.com/auth/cloud-platform”]
)

def __getattr__(self, name: str) -> Any:
    if not self.creds.valid:
        auth_req = google.auth.transport.requests.Request()
        self.creds.refresh(auth_req)

        if not self.creds.valid:
            raise RuntimeError("无法刷新认证信息")

        self.client.api_key = self.creds.token
    return getattr(self.client, name)

python

请更新下方代码中的 PROJECT_ID

PROJECT_ID = “your-project-id”

location = “us-central1”

client = OpenAICredentialsRefresher(
base_url=f”https://{location}-aiplatform.googleapis.com/v1beta1/projects/{PROJECT_ID}/locations/{location}/endpoints/openapi”,
)

response = client.chat.completions.create(
model=”google/gemini-1.5-flash-002″,
messages=[{“role”: “user”, “content”: “Why is the sky blue?”}],
)

print(response.choices[0].message.content)

后续步骤

  • 查看使用 OpenAI 兼容语法调用 Inference API 的示例。
  • 查看使用 OpenAI 兼容语法调用 Function Calling API 的示例。
  • 详细了解 Gemini API 及其应用场景。
  • 深入了解如何从 Azure OpenAI 迁移到 Gemini API。
(0)
上一篇 2025年7月25日
下一篇 2025年7月25日

相关推荐