Gemini AI through Vertex AI 的付费与查询限制
结论
通过 Vertex AI 调用 Gemini 模型时,通常可以按量付费(pay-as-you-go)。费用一般由所选模型及输入、输出的 token 数量决定,部分功能还会按图片、音频、视频或缓存用量计费。
“每分钟最多 60 次查询”并不是所有 Vertex AI Gemini 调用的统一上限。实际限制取决于以下因素:
- Google Cloud 项目
- 模型及模型版本
- 调用区域
- 使用的 API 和部署方式
- 项目当前配额
- 模型使用固定配额还是 Dynamic Shared Quota
- 是否购买 Provisioned Throughput
因此,chatbot application 上线前,应以目标项目的 Quotas & System Limits 页面所显示的配额和 API 实际返回的限流信息为准。
付费方式
启用 Google Cloud Billing,并在项目中启用 Vertex AI API 后,通常可以直接按实际用量付费,无需预先购买固定调用套餐。
基本流程如下:
- 创建或选择 Google Cloud 项目。
- 为项目关联有效的 Billing Account。
- 启用 Vertex AI API。
- 创建具有适当权限的 Service Account,或使用 Application Default Credentials。
- 调用 Gemini 模型。
- 通过 Billing Budgets、Usage Reports 和 Cloud Monitoring 监控费用与调用量。
不同 Gemini 模型的价格可能不同,预览版、正式版和多模态能力的计费规则也可能变化。不能只根据模型名称判断费用。上线前,应在 Google Cloud 官方 Vertex AI pricing 页面核对相应模型、区域和输入类型的价格。
按量付费不等于没有容量限制。它表示费用按用量结算,但请求频率、token 吞吐量和共享服务容量仍可能受到限制。
如何确认查询限额
进入 Google Cloud Console,选择 chatbot 实际使用的项目,然后打开:
IAM & Admin → Quotas & System Limits
也可以从 Vertex AI 的相关配额页面进入。筛选时建议检查:
Service: Vertex AI API
Region: chatbot 实际调用的区域
Model: 实际使用的 Gemini 模型
不要只查看“每分钟请求数”。生成式模型常见的限制维度还包括:
- Requests per minute
- Input tokens per minute
- Output tokens per minute
- Concurrent requests
- 每个项目或每个区域的吞吐量
- Batch prediction 或其他专项 API 的限制
某些 Gemini 模型使用 Dynamic Shared Quota。在这种模式下,Google 可能不会为项目提供一个简单、固定的“60 RPM”额度。请求能否立即处理还会受到所在区域共享容量的影响。即使控制台没有显示 60 RPM,也仍可能收到 429 Resource Exhausted。
如果业务需要稳定且可预测的吞吐量,可以评估 Provisioned Throughput。它的容量保障方式不同于普通的按量调用,更适合流量稳定或有明确服务等级要求的生产应用,但通常需要单独配置和付费。
Python 调用示例
下面的示例使用 Google Gen AI SDK,通过 Vertex AI 调用 Gemini。模型名称和区域应替换为项目当前实际可用的值:
from google import genai
client = genai.Client(
vertexai=True,
project="YOUR_PROJECT_ID",
location="us-central1",
)
response = client.models.generate_content(
model="YOUR_GEMINI_MODEL",
contents="请简要介绍退款流程。",
)
print(response.text)
认证可以使用 Application Default Credentials:
gcloud auth application-default login
在 Cloud Run、GKE 或 Compute Engine 等生产环境中,更适合为运行服务绑定权限最小化的 Service Account,不要保存个人凭据或长期密钥文件。
处理限流和临时容量不足
chatbot 不能假设每次请求都会立即成功。遇到 HTTP 429、503 或短暂的网络错误时,可以采用指数退避并加入随机抖动,避免大量实例同时重试。
import random
import time
from google import genai
from google.api_core.exceptions import ResourceExhausted, ServiceUnavailable
client = genai.Client(
vertexai=True,
project="YOUR_PROJECT_ID",
location="us-central1",
)
def generate_with_retry(prompt, max_attempts=5):
for attempt in range(max_attempts):
try:
return client.models.generate_content(
model="YOUR_GEMINI_MODEL",
contents=prompt,
)
except (ResourceExhausted, ServiceUnavailable):
if attempt == max_attempts - 1:
raise
delay = min(2 ** attempt, 16) + random.random()
time.sleep(delay)
response = generate_with_retry("你好,请介绍一下你的功能。")
print(response.text)
具体异常类型取决于 SDK 版本和调用方式。如果使用 REST API,应根据 HTTP 状态码和响应中的错误详情判断是否重试。认证失败、参数错误等 4xx 问题通常不应盲目重试。
Chatbot 集成建议
生产环境至少应采取以下措施:
- 在应用侧设置每个用户和全局的速率限制。
- 控制对话历史长度,避免每次请求重复发送过多 token。
- 合理缓存可复用的系统提示词或结果。
- 为
429和503设置有限次数的指数退避。 - 设置请求超时、并发上限和熔断策略。
- 记录请求次数、token 用量、延迟和错误码。
- 设置 Billing Budget 和费用告警。
- 压力测试时使用独立项目,或设置严格的预算保护。
- 流量较大时可以评估多个区域,但不要把跨区域切换当作绕过配额的方式。
还要区分 Google AI Studio / Gemini Developer API 与 Gemini on Vertex AI。两者可能提供相似的模型,但认证方式、计费账户、配额体系和速率限制并不相同。其他平台文档中的“60 requests per minute”不能直接套用于 Vertex AI 项目。
简而言之,Vertex AI 上的 Gemini 可以按量付费,但没有一个适用于所有项目和模型的统一 60 次/分钟上限。最终应以目标项目、模型和区域对应的配额控制台、官方定价信息及实际错误响应为准。
备注:内容仅供参考。
