通过 token 配额控制费用
本文档介绍了如何定义和管理生成式 AI 函数使用的输入和输出 token 数量的每日限额。BigQuery 生成式 AI 函数使用大语言模型 (LLM) 在 SQL 查询中执行高级分析。由于 LLM 使用量通常根据处理的 token 数量计费,因此 BigQuery 提供了 token 配额,以帮助您管理和控制与使用这些函数相关的费用。
这些 token 配额适用于专为使用 Gemini LLM 的生成式 AI 推理任务而设计的 BigQuery SQL 函数,例如 AI.CLASSIFY 和 AI.GENERATE_TEXT 函数。词元配额不适用于嵌入生成和语义搜索函数(例如 AI.EMBED),这些函数具有不同的结算结构。
配额详细信息
BigQuery 根据 LLM 词元用量提供以下每日配额。对于使用 Gemini 模型的 BigQuery 生成式 AI 函数,其 Vertex AI 结算费用与 token 用量直接相关。这些配额会在全球所有区域进行跟踪。每日配额将在太平洋时间午夜重置。
这些 token 配额用于控制 LLM 为生成式 AI 函数处理的输入和输出 token 数量:
- 输入 token:发送给模型进行处理的 token。这包括提示文本中的 token 以及作为输入提供给模型的任何其他数据。
- 输出 token:模型在回答中生成的 token。这包括生成的文本中的 token(候选 token)以及在内部推理步骤中生成的 token(思考 token)。
| 配额 | 指标和配额 ID | 默认 | 备注 |
|---|---|---|---|
| 每天的 AI 输入 token 数 |
指标: bigquery.googleapis.com/quota/query/ai_input_tokens配额 ID: GenAiInputTokensPerDay
|
200,000,000,000 | LLM 使用的输入 token。适用于每个项目每天。 |
| 每位用户每天的 AI 输入 token 数 |
指标: bigquery.googleapis.com/quota/query/ai_input_tokens配额 ID: GenAiInputTokensPerUserPerDay
|
150,000,000,000 | LLM 使用的输入 token。适用于每个项目中的每位用户,每天重置。 |
| 每天的 AI 输出 token 数 |
指标: bigquery.googleapis.com/quota/query/ai_output_tokens配额 ID: GenAiOutputTokensPerDay
|
20,000,000,000 | LLM 使用的输出和思考 token。适用于每个项目每天。 |
| 每位用户每天的 AI 输出 token 数 |
指标: bigquery.googleapis.com/quota/query/ai_output_tokens配额 ID: GenAiOutputTokensPerUserPerDay
|
15,000,000,000 | LLM 使用的输出和思考 token。适用于每个项目中的每位用户,每天重置。 |
这些配额以百万个 token 为增量进行跟踪。虽然您可以设置精确的限制,但由于 token 报告和汇总的性质,小于几百万个 token 的值可能无法准确反映。
缓存的 token 不计入配额。
准备工作
如果您使用 Google Cloud CLI、Cloud Quotas API 客户端库或 Terraform 以编程方式管理令牌配额,请在 Google Cloud项目中启用 Cloud Quotas API (cloudquotas.googleapis.com):
gcloud services enable cloudquotas.googleapis.com --project=PROJECT_ID
将 PROJECT_ID 替换为您的 Google Cloud 项目 ID。
所需的角色
如需获得查看和更新 token 配额所需的权限,请让管理员向您授予项目的 Cloud Quotas Admin (roles/cloudquotas.admin) IAM 角色。
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
此预定义角色包含查看和更新令牌配额所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
您需要具备以下权限才能查看和更新 token 配额:
-
cloudquotas.quotas.get -
cloudquotas.quotas.update
管理配额
根据您的资源用量,您可能需要查看或上下调整 token 配额值:
如需查看和更新每日 token 配额,请选择以下选项之一:
控制台
在 Google Cloud 控制台中,前往 IAM 和管理 > 配额和系统限制页面。
输入
Service: BigQuery API以过滤配额。从配额列表中搜索特定配额,例如每天的 AI 输入 token 数 (
GenAiInputTokensPerDay),或对名称列进行排序,将 AI token 配额置于列表顶部。点击 more_vert 更多操作 > 修改配额。
如需增加或减少配额,请在配额更改窗格的新值字段中输入新值,然后点击完成。降低配额会立即生效,无需审批。
点击提交请求。
gcloud
使用 gcloud CLI 管理令牌配额时,请将 bigquery.googleapis.com 指定为服务名称,并使用以下区分大小写的配额 ID:
- 每天的 AI 输入 token 数:
GenAiInputTokensPerDay - 每位用户每天的 AI 输入 token 数:
GenAiInputTokensPerUserPerDay - 每天的 AI 输出 token 数:
GenAiOutputTokensPerDay - 每位用户每天的 AI 输出 token 数:
GenAiOutputTokensPerUserPerDay
可选:如需列出 BigQuery 生成式 AI 词元配额及其当前值,请使用
gcloud quotas info list:gcloud quotas info list \ --service=bigquery.googleapis.com \ --project=PROJECT_ID \ --filter="quotaId:GenAi*"如需为每日 token 限额创建或更新配额偏好设置,请使用
gcloud quotas preferences update。以下示例会检查每个配额是否已存在配额偏好设置(例如,之前是否在Google Cloud 控制台中修改过),并更新或创建偏好设置:PROJECT_ID="PROJECT_ID" for ITEM in \ "GenAiInputTokensPerDay:INPUT_TOKEN_LIMIT" \ "GenAiOutputTokensPerDay:OUTPUT_TOKEN_LIMIT"; do QUOTA_ID="${ITEM%:*}" NEW_LIMIT="${ITEM#*:}" PREF_ID=$(gcloud quotas preferences list \ --project="${PROJECT_ID}" \ --filter="quotaId:${QUOTA_ID}" \ --format="value(name.basename())") PREF_ID="${PREF_ID:-custom-${QUOTA_ID}}" gcloud quotas preferences update "${PREF_ID}" \ --project="${PROJECT_ID}" \ --service=bigquery.googleapis.com \ --quota-id="${QUOTA_ID}" \ --preferred-value="${NEW_LIMIT}" \ --allow-high-percentage-quota-decrease \ --allow-missing done替换以下内容:
PROJECT_ID:您的 Google Cloud 项目 ID。INPUT_TOKEN_LIMIT:目标每日输入 token 限制(例如754000000)。OUTPUT_TOKEN_LIMIT:您的目标每日输出 token 限制(例如8000000)。
您还可以将以下可选标志与
gcloud quotas preferences update搭配使用:--allow-quota-decrease-below-usage:允许将配额限制降低到低于当天的当前用量。--email:指定联系邮箱,在请求将配额提高到默认上限以上时,必须提供此邮箱。--justification:提供配额调整的原因。
如需验证配额偏好设置的状态,请使用
gcloud quotas preferences list:gcloud quotas preferences list \ --project=PROJECT_ID \ --filter="quotaId:GenAiInputTokensPerDay OR quotaId:GenAiOutputTokensPerDay"当
reconciling为false时,系统会主动强制执行grantedValue中的值。
Python
使用适用于 Python 的 Cloud Quotas 客户端库管理 token 配额时,请将 bigquery.googleapis.com 指定为服务名称,并使用以下区分大小写的配额 ID:
- 每天的 AI 输入 token 数:
GenAiInputTokensPerDay - 每位用户每天的 AI 输入 token 数:
GenAiInputTokensPerUserPerDay - 每天的 AI 输出 token 数:
GenAiOutputTokensPerDay - 每位用户每天的 AI 输出 token 数:
GenAiOutputTokensPerUserPerDay
安装 Python 版 Cloud Quotas 客户端库:
pip install --user google-cloud-quotas如需检查现有配额偏好设置资源并创建或更新每日 token 限制,请运行以下 Python 脚本:
from google.cloud import cloudquotas_v1 PROJECT_ID = "PROJECT_ID" QUOTA_LIMITS = { "GenAiInputTokensPerDay": INPUT_TOKEN_LIMIT, "GenAiOutputTokensPerDay": OUTPUT_TOKEN_LIMIT, } # Initialize the client with quota_project_id (required by the Cloud Quotas API). client = cloudquotas_v1.CloudQuotasClient( client_options={"quota_project_id": PROJECT_ID} ) parent = f"projects/{PROJECT_ID}/locations/global" for quota_id, new_limit in QUOTA_LIMITS.items(): # Check for an existing preference ID, or fall back to a default name. list_request = cloudquotas_v1.ListQuotaPreferencesRequest( parent=parent, filter=f"quotaId:{quota_id}", ) prefs = list(client.list_quota_preferences(request=list_request)) pref_name = ( prefs[0].name if prefs else f"{parent}/quotaPreferences/custom-{quota_id}" ) # Update the existing preference or create it if missing (allow_missing=True). update_request = cloudquotas_v1.UpdateQuotaPreferenceRequest( quota_preference=cloudquotas_v1.QuotaPreference( name=pref_name, service="bigquery.googleapis.com", quota_id=quota_id, quota_config=cloudquotas_v1.QuotaConfig(preferred_value=new_limit), ), allow_missing=True, ignore_safety_checks=[ cloudquotas_v1.QuotaSafetyCheck.QUOTA_DECREASE_PERCENTAGE_TOO_HIGH ], ) response = client.update_quota_preference(request=update_request) print(f"Quota ID: {quota_id}") print(f"Preference Name: {response.name}") print(f"Preferred Value: {response.quota_config.preferred_value}") print(f"Granted Value: {response.quota_config.granted_value}") print(f"Reconciling: {response.reconciling}\n")替换以下内容:
PROJECT_ID:您的 Google Cloud 项目 ID。INPUT_TOKEN_LIMIT:目标每日输入 token 限制,以整数表示(例如754000000)。OUTPUT_TOKEN_LIMIT:目标每日输出 token 限制,以整数表示(例如8000000)。
Terraform
使用 Terraform 管理令牌配额时,请将 bigquery.googleapis.com 指定为服务名称,并使用以下区分大小写的配额 ID:
- 每天的 AI 输入 token 数:
GenAiInputTokensPerDay - 每位用户每天的 AI 输入 token 数:
GenAiInputTokensPerUserPerDay - 每天的 AI 输出 token 数:
GenAiOutputTokensPerDay - 每位用户每天的 AI 输出 token 数:
GenAiOutputTokensPerUserPerDay
检查您的项目是否已存在配额偏好设置。 Cloud Quotas 仅允许每个项目的每个配额有一个偏好设置资源。如果之前在Google Cloud 控制台或其他工具中修改过配额,则必须使用其现有的偏好设置 ID:
gcloud quotas preferences list \ --project=PROJECT_ID \ --filter="quotaId:GenAiInputTokensPerDay OR quotaId:GenAiOutputTokensPerDay" \ --format="table(quotaId, name.basename():label=PREFERENCE_ID, quotaConfig.preferredValue)"如需在 Terraform 配置(例如
main.tf)中配置每日令牌限额,请使用google_cloud_quotas_quota_preference资源:terraform { required_providers { google = { source = "hashicorp/google" version = ">= 5.30.0" } } } locals { project_id = "PROJECT_ID" # If you previously modified a quota in the console or another # tool, replace `name` with the existing PREFERENCE_ID from # `gcloud quotas preferences list` and uncomment the `import` block. bq_genai_quotas = { GenAiInputTokensPerDay = { name = "custom-GenAiInputTokensPerDay" preferred_value = "INPUT_TOKEN_LIMIT" # Default: 200,000,000,000 } GenAiOutputTokensPerDay = { name = "custom-GenAiOutputTokensPerDay" preferred_value = "OUTPUT_TOKEN_LIMIT" # Default: 20,000,000,000 } } } # If quota preferences already exist on your project, uncomment this `import` # block so that Terraform imports the existing preferences instead of # attempting to create duplicates. # # import { # for_each = local.bq_genai_quotas # to = google_cloud_quotas_quota_preference.bq_genai[each.key] # id = "projects/${local.project_id}/locations/global/quotaPreferences/${each.value.name}" # } resource "google_cloud_quotas_quota_preference" "bq_genai" { for_each = local.bq_genai_quotas parent = "projects/${local.project_id}" name = each.value.name service = "bigquery.googleapis.com" quota_id = each.key justification = "Managing BigQuery GenAI daily token budget" # Allows decreases greater than 10% when setting a stricter cost cap. ignore_safety_checks = "QUOTA_DECREASE_PERCENTAGE_TOO_HIGH" quota_config { preferred_value = each.value.preferred_value } } output "quota_status" { value = { for k, v in google_cloud_quotas_quota_preference.bq_genai : k => { preferred_value = v.quota_config[0].preferred_value granted_value = v.quota_config[0].granted_value reconciling = v.reconciling } } }替换以下内容:
PROJECT_ID:您的 Google Cloud 项目 ID。INPUT_TOKEN_LIMIT:目标每日输入 token 限制(例如754000000)。OUTPUT_TOKEN_LIMIT:您的目标每日输出 token 限制(例如8000000)。
初始化并应用 Terraform 配置:
terraform init terraform apply
监控配额
为防止意外的查询失败、检测用量高峰并管理费用,请在 Google Cloud 控制台中监控令牌配额消耗情况,具体操作如下:
在 Google Cloud 控制台中,前往 IAM 和管理 > 配额和系统限制页面。
输入
Service: BigQuery API以过滤配额。查看当前用量百分比和当前用量列,了解项目在每天的 AI 输入 token 数 (
GenAiInputTokensPerDay) 和每天的 AI 输出 token 数 (GenAiOutputTokensPerDay) 配额方面的每日 token 消耗量。如需查看一段时间内的历史 token 消耗量,请在项目级 token 配额对应的行中,点击监控 显示用量图表。
用量卡片会显示您配置的上限、当前用量百分比和峰值用量百分比,以及可选择 7 天、14 天、30 天和自定义时间范围的历史消耗量图表:
可选:设置基本的配额用量提醒,以便在 token 消耗量达到每日限额的指定百分比时,通过电子邮件、短信或 Pub/Sub 向您发送通知。
可选:在 Cloud Monitoring 中创建图表,以直观呈现 token 使用趋势并构建自定义信息中心。如需详细了解如何监控配额和配置提醒政策,请参阅设置配额提醒和监控。
如需在运行查询之前估算输入 token 用量,请使用 AI.COUNT_TOKENS 函数。您还可以在查询结果窗格的作业信息标签页中查看单个查询处理的 token 数量。
配额强制执行行为
BigQuery 会在查询执行的多个阶段监控您的 token 消耗情况:
- 执行前检查:BigQuery 会在执行包含生成式 AI 函数的查询之前检查可用的词元配额。如果相关配额(例如项目每日输入 token 数)已用尽,则查询会被拒绝,并返回
QuotaExceeded错误。 - 执行期间:如果查询正在运行,并且消耗的 token 耗尽了任何已配置的配额(输入或输出,每个项目或每个用户),则该查询中的新 LLM 调用将被拒绝。
- 依赖于 LLM 调用的任何剩余行都会遇到配额耗尽错误。
- 如果查询在
AI.IF等函数中使用,则其结果取决于max_error_ratio实参。如果错误率保持在允许的限值内,则可能会返回部分结果。否则,整个查询都会失败。 - 在每日配额重置之前,后续尝试使用生成式 AI 函数的查询将失败,并显示
QuotaExceeded错误。
重要注意事项
- 全球配额:定义的配额是全球配额。系统会汇总项目运营所在的所有区域的 token 用量,从而提供统一的费用控制机制。这样可以防止因在不同区域使用而产生意外费用。
- 预配吞吐量:如果您使用的是具有预配吞吐量的 Gemini Enterprise Agent Platform 模型,则结算不基于 token 用量。您应将这些 BigQuery 令牌配额设置为较高的值,以避免不必要地阻止查询。
- 配额缩减安全检查:默认情况下,Cloud Quotas API 会阻止任何一次性将有效配额限制缩减超过 10% 的程序化更新。由于默认词元上限为数千亿,因此设置更严格的每日上限通常会超过 10% 的降幅,并因
QUOTA_DECREASE_PERCENTAGE_TOO_HIGH错误而失败,除非您替换此安全检查:- gcloud CLI:添加
--allow-high-percentage-quota-decrease标志。 - Python 客户端库:传递
ignore_safety_checks=[cloudquotas_v1.QuotaSafetyCheck.QUOTA_DECREASE_PERCENTAGE_TOO_HIGH]。 - Terraform:设置
ignore_safety_checks = "QUOTA_DECREASE_PERCENTAGE_TOO_HIGH"。
- gcloud CLI:添加
后续步骤
- 详细了解如何优化 AI 函数费用。
- 阅读 BigQuery 中的生成式 AI 概览。
- 了解如何设置配额提醒和监控。