预览
本产品或功能须遵守 服务专用条款 中“非正式版产品条款”部分的规定。
正式发布前,产品和功能均按原样提供,可能仅提供有限支持。欲了解详情,请参阅 发布阶段说明。
本文详细介绍如何使用 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:支持 text 和 image_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:其子参数包括 name、description,以及按 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。