您可以使用 Cloud Logging 和 Observability Analytics,在 AI 開發人員工具中,計算第三方模型 (例如 Anthropic Claude Opus 5.5 和 Anthropic Claude Sonnet 5.5) 的權杖消耗量 (依模型、日期和使用者)。
快速入門導覽課程
如果專案的記錄檔 bucket「_Default」已升級為使用 Observability Analytics,請在「記錄」>「Observability Analytics」中執行下列查詢 (將 [PROJECT_ID] 替換為專案 ID Google Cloud ),即可取得第三方 Anthropic 模型 30 天的權杖用量:
SELECT
JSON_VALUE(labels.model) AS model,
COUNT(*) AS requests,
SUM(SAFE_CAST(JSON_VALUE(json_payload.metadata.promptTokenCount) AS INT64)) AS input_tokens,
SUM(SAFE_CAST(JSON_VALUE(json_payload.metadata.candidatesTokenCount) AS INT64)) AS output_tokens,
IFNULL(SUM(SAFE_CAST(JSON_VALUE(json_payload.metadata.cachedContentTokenCount) AS INT64)), 0) AS cached_tokens,
IFNULL(SUM(SAFE_CAST(JSON_VALUE(json_payload.metadata.thoughtsTokenCount) AS INT64)), 0) AS thoughts_tokens,
SUM(SAFE_CAST(JSON_VALUE(json_payload.metadata.totalTokenCount) AS INT64)) AS total_tokens
FROM
`[PROJECT_ID].global._Default._Default`
WHERE
log_id = "businessaicode.googleapis.com/inference_response"
AND JSON_VALUE(labels.model_provider) = "Anthropic"
AND timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
GROUP BY
model
ORDER BY
total_tokens DESC
事前準備
執行教學課程步驟前,請確認專案符合下列規定:
- 中繼資料記錄功能已啟用。AI 開發人員工具管理員必須啟用「中繼資料記錄」控制項,
inference_response記錄才會包含jsonPayload.metadata權杖區塊。 - 您至少擁有「記錄檢視器」角色 (
roles/logging.viewer)。標準roles/logging.viewer角色會授予 SQL 存取權,讓您查看本指南中使用的_Default._Default記錄檢視畫面。查詢_Default._AllLogs檢視畫面需要roles/logging.privateLogViewer或roles/logging.viewAccessor。 - 您的
_Default記錄檔 bucket 已升級,可供 Observability Analytics 使用。- 在 Google Cloud 控制台中,依序前往「Logging」>「Logs Storage」,找出
_Defaultbucket,然後查看「Observability Analytics」欄。 - 如果尚未啟用,請依序點選「更多」>「升級以使用 Observability Analytics」。升級會就地修改
_Default,且無法復原。 - 允許初始傳播:升級 bucket 後,Cloud Logging 需要 30 到 60 分鐘來重新整理新記錄項目的路由快取,並需要數小時來回填歷史記錄 (回填作業會在升級完成後 1 小時開始)。
- 在 Google Cloud 控制台中,依序前往「Logging」>「Logs Storage」,找出
記錄檔記錄的結構
每次推論呼叫都會向 businessaicode.googleapis.com%2Finference_response 記錄檔發出單一 InferenceResponseLog 項目。模型 ID 會記錄在 labels 中,權杖計數則會記錄在 jsonPayload.metadata 中:
{
"logName": "projects/[PROJECT_ID]/logs/businessaicode.googleapis.com%2Finference_response",
"timestamp": "2026-10-07T17:23:03.495323480Z",
"labels": {
"model": "claude-sonnet-5-5",
"model_provider": "Anthropic",
"client_name": "antigravity_cli",
"user_id": "user:user@example.com",
"trajectory_id": "25cd0b58-58ea-4beb-b2d7-42e0d3fdd96d",
"request_id": "25cd0b58-58ea-4beb-b2d7-42e0d3fdd96d-19"
},
"jsonPayload": {
"@type": "type.googleapis.com/google.cloud.businessaicode.logging.v1.InferenceResponseLog",
"metadata": {
"promptTokenCount": "70825",
"cachedContentTokenCount": "69079",
"candidatesTokenCount": "14215",
"totalTokenCount": "85040"
}
}
}
欄位參考資料和計數規則
| LogEntry 欄位 (Logs Explorer 和記錄指標) | SQL 運算式 (Observability Analytics) | 說明 |
|---|---|---|
labels.model |
JSON_VALUE(labels.model) |
模型 ID (例如 Anthropic Claude Sonnet 5.5 的 claude-sonnet-5-5 或 Anthropic Claude Opus 5.5 的 claude-opus-5-5)。 |
labels.model_provider |
JSON_VALUE(labels.model_provider) |
供應商名稱 (例如 Anthropic 或 Google)。 |
labels.user_id |
JSON_VALUE(labels.user_id) |
經過驗證的主體 (例如 user:user@example.com)。 |
labels.trajectory_id |
JSON_VALUE(labels.trajectory_id) |
對話或服務專員軌跡 ID。一個使用者回合通常會跨越單一 trajectory_id 下的多個 request_id 呼叫。 |
jsonPayload.metadata.promptTokenCount |
SAFE_CAST(JSON_VALUE(json_payload.metadata.promptTokenCount) AS INT64) |
通話的輸入詞元總數 (包括快取詞元)。 |
jsonPayload.metadata.cachedContentTokenCount |
SAFE_CAST(JSON_VALUE(json_payload.metadata.cachedContentTokenCount) AS INT64) |
部分 promptTokenCount是從提示快取提供。如果為零,則會省略。請勿新增至 promptTokenCount 或 totalTokenCount。 |
jsonPayload.metadata.candidatesTokenCount |
SAFE_CAST(JSON_VALUE(json_payload.metadata.candidatesTokenCount) AS INT64) |
模型生成的輸出內容詞元。 |
jsonPayload.metadata.thoughtsTokenCount |
SAFE_CAST(JSON_VALUE(json_payload.metadata.thoughtsTokenCount) AS INT64) |
推論權杖 (如適用)。Anthropic 模型不適用。 |
jsonPayload.metadata.totalTokenCount |
SAFE_CAST(JSON_VALUE(json_payload.metadata.totalTokenCount) AS INT64) |
通話的權威總計。等於 promptTokenCount + candidatesTokenCount (如有則為 + thoughtsTokenCount)。 |
步驟 1:在 Logs Explorer 中驗證傳入的記錄
執行 SQL 查詢前,請先確認含有權杖中繼資料的 inference_response 記錄是否已送達專案:
- 在 Google Cloud 控制台中,依序開啟「記錄」>「記錄檔探索工具」。
將下列查詢貼到查詢編輯器,並將
[PROJECT_ID]替換成您的專案 ID:logName="projects/[PROJECT_ID]/logs/businessaicode.googleapis.com%2Finference_response" labels.model_provider="Anthropic"點選「執行查詢」。
在「記錄檔欄位」窗格中,按一下「model」,即可查看 Anthropic 模型的要求分配情形。這項檢視畫面會計算要求,而非權杖。
步驟 2:在 Observability Analytics 中依模型加總權杖
- 在 Google Cloud 控制台中,開啟「記錄」>「Observability Analytics」。
- 將「日期範圍選取器」設為「過去 30 天」 (日期範圍選取器會限制查詢結果,SQL
WHERE子句也會限制查詢結果)。 貼上下列查詢並執行,將
[PROJECT_ID]替換為您的專案 ID:SELECT JSON_VALUE(labels.model) AS model, COUNT(*) AS requests, SUM(SAFE_CAST(JSON_VALUE(json_payload.metadata.promptTokenCount) AS INT64)) AS input_tokens, SUM(SAFE_CAST(JSON_VALUE(json_payload.metadata.candidatesTokenCount) AS INT64)) AS output_tokens, IFNULL(SUM(SAFE_CAST(JSON_VALUE(json_payload.metadata.cachedContentTokenCount) AS INT64)), 0) AS cached_tokens, IFNULL(SUM(SAFE_CAST(JSON_VALUE(json_payload.metadata.thoughtsTokenCount) AS INT64)), 0) AS thoughts_tokens, SUM(SAFE_CAST(JSON_VALUE(json_payload.metadata.totalTokenCount) AS INT64)) AS total_tokens FROM `[PROJECT_ID].global._Default._Default` WHERE log_id = "businessaicode.googleapis.com/inference_response" AND JSON_VALUE(labels.model_provider) = "Anthropic" AND timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY) GROUP BY model ORDER BY total_tokens DESC
步驟 3:常見的 SQL 查詢範本
在「記錄」>「Observability Analytics」中,使用下列 SQL 查詢分析每日權杖趨勢和每位使用者的權杖歸因。
各模型的每日詞元趨勢
SELECT
TIMESTAMP_TRUNC(timestamp, DAY) AS day,
JSON_VALUE(labels.model) AS model,
COUNT(*) AS requests,
SUM(SAFE_CAST(JSON_VALUE(json_payload.metadata.totalTokenCount) AS INT64)) AS total_tokens
FROM
`[PROJECT_ID].global._Default._Default`
WHERE
log_id = "businessaicode.googleapis.com/inference_response"
AND JSON_VALUE(labels.model_provider) = "Anthropic"
AND timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
GROUP BY
day, model
ORDER BY
day DESC, total_tokens DESC
依使用者和依模型歸因
SELECT
JSON_VALUE(labels.user_id) AS user_id,
JSON_VALUE(labels.model) AS model,
COUNT(*) AS requests,
SUM(SAFE_CAST(JSON_VALUE(json_payload.metadata.totalTokenCount) AS INT64)) AS total_tokens
FROM
`[PROJECT_ID].global._Default._Default`
WHERE
log_id = "businessaicode.googleapis.com/inference_response"
AND JSON_VALUE(labels.model_provider) = "Anthropic"
AND JSON_VALUE(labels.user_id) IS NOT NULL
AND timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
GROUP BY
user_id, model
ORDER BY
total_tokens DESC
步驟 4:釘選至 Cloud Monitoring 資訊主頁
您可以選擇兩種方式建立資訊主頁,具體取決於您需要歷史或臨時 SQL 細目,還是輕量級的連續指標:
| 做法 | 適用情境 | 保留超過 30 天的記錄? | 是否支援 user_id 分組? |
|---|---|---|---|
| 選項 A:從 Observability Analytics 儲存 SQL 圖表 | 無須設定指標,即可查看各模型、每日和每位使用者的表格和圖表 | 受記錄 bucket 保留期限 (預設為 30 天) 限制 | 是 (無基數限制) |
| 方法 B:以記錄為準的分配指標 | 持續監控時間序列,並針對低基數標籤發出快訊 | 可以 (儲存在「監控」中) | 否 (高基數會用盡指標配額) |
方法 A:直接從 Observability Analytics 儲存
- 在 Observability Analytics 中,執行步驟 2 的查詢,或「每日依模型劃分的權杖趨勢」查詢。
- 如要以視覺化方式呈現時間序列或長條圖,請將結果窗格從「表格」切換為「圖表」。
- 在結果窗格工具列中,按一下「儲存至資訊主頁」,然後選擇現有的監控資訊主頁或建立新的資訊主頁。
做法 B:建立記錄分布指標
- 在 Google Cloud 控制台,依序前往「Logging」>「記錄指標」,然後點選「Create metric」。
- 選取「發布」做為指標類型。
- 將步驟 1 中的查詢貼到「篩選器」欄位,並將「欄位名稱」設為
jsonPayload.metadata.totalTokenCount。 - 新增兩個標籤:
model對應至「labels.model」model_provider對應至「labels.model_provider」