Realiza un seguimiento del uso de tokens de modelos de terceros

Puedes calcular el consumo de tokens por modelo, día y usuario para los modelos de terceros en las herramientas para desarrolladores de IA, como Anthropic Claude Opus 5.5 y Anthropic Claude Sonnet 5.5, con Cloud Logging y Estadísticas de observabilidad.

Guía de inicio rápido

Si el bucket de registros _Default de tu proyecto ya se actualizó para Estadísticas de observabilidad, ejecuta la siguiente consulta en Logging > Observability Analytics (reemplaza [PROJECT_ID] por el ID de tu proyecto Google Cloud ) para obtener el uso de tokens durante 30 días en los modelos externos de Anthropic:

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

Antes de comenzar

Antes de ejecutar los pasos del instructivo, asegúrate de que tu proyecto cumpla con los siguientes requisitos:

  • El registro de metadatos está habilitado. Los controles del administrador de tus herramientas para desarrolladores de IA deben tener habilitado el registro de metadatos para que los registros de inference_response incluyan el bloque de tokens jsonPayload.metadata.
  • Tienes, al menos, el rol de Visualizador de registros (roles/logging.viewer). El rol estándar roles/logging.viewer otorga acceso a SQL a la vista de registros _Default._Default que se usa en toda esta guía. Para consultar la vista _Default._AllLogs, se requiere roles/logging.privateLogViewer o roles/logging.viewAccessor.
  • Tu bucket de registros _Default se actualizó para Estadísticas de observabilidad.
    1. En la consola de Google Cloud , ve a Logging > Almacenamiento de registros, busca el bucket_Default y marca la columna Estadísticas de observabilidad.
    2. Si no está habilitada, haz clic en Más > Actualizar para usar Estadísticas de observabilidad. La actualización modifica _Default en su lugar y no se puede deshacer.
    3. Permite la propagación inicial: Después de actualizar un bucket, Cloud Logging tarda entre 30 y 60 minutos en actualizar las memorias caché de enrutamiento para las entradas de registro nuevas y varias horas en reabastecer los registros históricos (el reabastecimiento comienza 1 hora después de que se completa la actualización).

Cómo se estructura el registro

Cada llamada de inferencia emite una sola entrada InferenceResponseLog en el registro businessaicode.googleapis.com%2Finference_response. La identidad del modelo se registra en labels, y los recuentos de tokens se registran en 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"
    }
  }
}

Reglas de referencia y recuento de campos

Campo LogEntry (Explorador de registros y métricas basadas en registros) Expresión SQL (Estadísticas de observabilidad) Descripción
labels.model JSON_VALUE(labels.model) Es el identificador del modelo (por ejemplo, claude-sonnet-5-5 para Anthropic Claude Sonnet 5.5 o claude-opus-5-5 para Anthropic Claude Opus 5.5).
labels.model_provider JSON_VALUE(labels.model_provider) Nombre del proveedor (por ejemplo, Anthropic o Google)
labels.user_id JSON_VALUE(labels.user_id) Es el principal autenticado (por ejemplo, user:user@example.com).
labels.trajectory_id JSON_VALUE(labels.trajectory_id) Es el ID de la conversación o la trayectoria del agente. Por lo general, un turno del usuario abarca varias llamadas request_id en un solo trajectory_id.
jsonPayload.metadata.promptTokenCount SAFE_CAST(JSON_VALUE(json_payload.metadata.promptTokenCount) AS INT64) Es la cantidad total de tokens de entrada para la llamada (incluidos los tokens almacenados en caché).
jsonPayload.metadata.cachedContentTokenCount SAFE_CAST(JSON_VALUE(json_payload.metadata.cachedContentTokenCount) AS INT64) Subconjunto de promptTokenCount que se entrega desde la caché de instrucciones. Se omite cuando es cero. No agregues a promptTokenCount ni a totalTokenCount.
jsonPayload.metadata.candidatesTokenCount SAFE_CAST(JSON_VALUE(json_payload.metadata.candidatesTokenCount) AS INT64) Son los tokens de salida que genera el modelo.
jsonPayload.metadata.thoughtsTokenCount SAFE_CAST(JSON_VALUE(json_payload.metadata.thoughtsTokenCount) AS INT64) Tokens de razonamiento, cuando corresponda Se omite para los modelos de Anthropic.
jsonPayload.metadata.totalTokenCount SAFE_CAST(JSON_VALUE(json_payload.metadata.totalTokenCount) AS INT64) Es el total autorizado para la llamada. Es igual a promptTokenCount + candidatesTokenCount (más thoughtsTokenCount cuando está presente).

Paso 1: Verifica los registros entrantes en el Explorador de registros

Antes de ejecutar consultas en SQL, confirma que los registros de inference_response con metadatos de token lleguen a tu proyecto:

  1. En la consola de Google Cloud , abre Logging > Explorador de registros.
  2. Pega la siguiente consulta en el editor de consultas y reemplaza [PROJECT_ID] por el ID de tu proyecto:

    logName="projects/[PROJECT_ID]/logs/businessaicode.googleapis.com%2Finference_response"
    labels.model_provider="Anthropic"
    
  3. Haz clic en Ejecutar consulta.

  4. En el panel Log fields, haz clic en model para ver la distribución de solicitudes en los modelos de Anthropic. Esta vista cuenta las solicitudes, no los tokens.

Paso 2: Suma los tokens por modelo en Estadísticas de observabilidad

  1. En la consola de Google Cloud , abre Registro > Estadísticas de observabilidad.
  2. Establece el selector de período en Últimos 30 días (el selector de período limita los resultados de la consulta además de la cláusula WHERE de SQL).
  3. Pega y ejecuta la siguiente consulta, reemplazando [PROJECT_ID] por el ID de tu proyecto:

    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
    

Paso 3: Recetas comunes de SQL

Usa las siguientes consultas en SQL en Registro > Estadísticas de observabilidad para analizar las tendencias diarias de tokens y la atribución de tokens por usuario.

Tendencia diaria de tokens por modelo

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

Atribución por usuario y por modelo

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

Paso 4: Fija el gráfico a un panel de Cloud Monitoring

Tienes dos opciones para crear paneles, según si necesitas desgloses históricos o ad hoc de SQL, o una métrica continua ligera:

Enfoque Ideal para ¿Conserva el historial por más de 30 días? ¿Admite el agrupamiento de user_id?
Opción A: Guarda el gráfico de SQL desde Estadísticas de observabilidad Tablas y gráficos por modelo, diarios y por usuario sin configuración de métricas Limitado por la retención del bucket de registros (30 días de forma predeterminada) Sí (sin límite de cardinalidad)
Opción B: Métrica de distribución basada en registros Series temporales de Supervisión continua y alertas sobre etiquetas de baja cardinalidad Sí (se almacena en Monitoring) No (la alta cardinalidad agota la cuota de métricas)

Opción A: Guarda directamente desde Estadísticas de observabilidad

  1. Ejecuta la consulta del paso 2 o la consulta Tendencia diaria de tokens por modelo en Estadísticas de observabilidad.
  2. Cambia el panel de resultados de Tabla a Gráfico si deseas un gráfico de barras o de series temporales visual.
  3. En la barra de herramientas del panel de resultados, haz clic en Guardar en el panel y, luego, elige un panel de Monitoring existente o crea uno nuevo.

Opción B: Crea una métrica de distribución basada en registros

  1. En la consola de Google Cloud , ve a Logging > Métricas basadas en registros y, luego, haz clic en Crear métrica.
  2. Selecciona Distribución como el tipo de métrica.
  3. Pega la consulta del paso 1 en el campo Filtro y establece Nombre del campo en jsonPayload.metadata.totalTokenCount.
  4. Agrega dos etiquetas:
    • model se asignó a labels.model
    • model_provider asignado a labels.model_provider

¿Qué sigue?