Consulta los registros de Gemini para Google Cloud

En este documento, se describe cómo habilitar la recopilación y el almacenamiento de la actividad en Gemini para Google Cloud , lo que incluye lo siguiente:

  • Registros de Gemini para Google Cloud indicaciones y respuestas, como entradas del usuario, información contextual y respuestas
  • Gemini para los registros de metadatos de Google Cloud , como los metadatos de telemetría y las líneas de código aceptadas por el usuario.

Si necesitas generar métricas de Gemini Code Assist, consulta Supervisa el uso de Gemini para Google Cloud .

Gemini para Google Cloud no recopila ni envía a Cloud Logging ninguna otra interacción que el usuario pueda haber tenido con Gemini para Google Cloud, incluidos los comentarios escritos. Los datos recopilados se envían a Cloud Logging para su almacenamiento. Puedes revisar estos datos buscando entradas de registro con el tipo de recurso cloudaicompanion.googleapis.com/Instance.

Esta función no registra las instrucciones ni las respuestas en Gemini en Vertex AI. Para habilitar los registros de Gemini en Vertex AI, consulta Habilita los registros de auditoría de acceso a los datos.

Los roles de Identity and Access Management (IAM) controlan la capacidad de una principal para acceder a los registros. Puedes otorgar roles predefinidos a las entidades principales o crear roles personalizados. Para obtener más información sobre los permisos obligatorios, consulta Control de acceso.

De forma predeterminada, Cloud Logging encripta el contenido del cliente almacenado en reposo. Los datos que Logging almacena en los buckets de registros se encriptan con claves de encriptación de claves, un proceso conocido como encriptación de sobre. Acceder a tus datos de registro requiere acceso a esas claves de encriptación de claves, que Google administra sin que tengas que realizar ninguna acción.

Tu organización puede tener requisitos de encriptación avanzados, regulatorios o relacionados con el cumplimiento que nuestra encriptación en reposo predeterminada no proporciona. Para cumplir con los requisitos de tu organización, en lugar de que Google administre las claves de encriptación que protegen tus datos, puedes administrar tus claves.

Para obtener información específica sobre el uso de las claves de encriptación administradas por el cliente (CMEK), incluidas las ventajas y limitaciones, consulta Claves de encriptación administradas por el cliente.

Limitaciones

La grabación de datos de registro de Gemini en Google Cloud se limita a las interacciones del usuario con Gemini Code Assist dentro del IDE.

Además, si el usuario final desactiva el parámetro de configuración de telemetría de VS Code, Gemini para Google Cloud no registrará metadatos. Sin embargo, los registros de instrucciones y respuestas se siguen generando cuando los administradores habilitan el registro de instrucciones y respuestas.

Antes de comenzar

Consulta los registros de usuarios y los registros de metadatos de Gemini para Google Cloud

Para ver los registros de usuarios y los registros de metadatos de Gemini, haz una de las siguientes acciones: Google Cloud

Console

  1. En la consola de Google Cloud , ve a la página Explorador de registros.

    Ir al Explorador de registros

    Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo es Logging.

  2. En la barra de herramientas, selecciona un proyecto de la consola de Google Cloud .
  3. En la barra de herramientas, expande el menú Todos los recursos y selecciona el recurso Instancia de Cloud AI Companion.

gcloud

Ejecuta el siguiente comando:

gcloud logging read "resource.type=cloudaicompanion.googleapis.com/Instance" --project PROJECT_ID  --limit 3

Reemplaza PROJECT_ID por el ID del proyecto cuyos registros de Gemini para Google Cloud quieres ver.

API

  1. Crea un archivo JSON que contenga la siguiente información:

      {
        "resourceNames": [
          "projects/PROJECT_ID"
        ],
        "pageSize": 5,
        "filter": "resource.type: cloudaicompanion.googleapis.com/Instance"
      }
    

    Reemplaza PROJECT_ID por el ID del proyecto cuyos registros de Gemini para Google Cloud quieres ver.

  2. Obtén un token de autenticación:

    TOKEN=$(gcloud auth print-access-token)
    
  3. Usa cURL para llamar al método entries.list:

    curl -X POST --data-binary @JSON_FILE_NAME \
      -H "Authorization: Bearer $TOKEN" \
      -H "Content-Type: application/json" \
      "https://logging.googleapis.com/v2/entries:list"

    Reemplaza JSON_FILE_NAME por la ruta de acceso al archivo JSON que creaste en el paso anterior.

    Para obtener más información sobre la autenticación, consulta Autentica para usar REST.

    La respuesta devuelve un conjunto de entradas de registro.

Gemini para registros de Google Cloud

Un LogEntry es la unidad básica de datos en Cloud Logging. En las siguientes secciones, se proporcionan listas de los campos que se encuentran en LogEntry para un evento de la plataforma de Gemini para Google Cloud , como solicitudes del usuario y respuestas de Gemini para Google Cloud .

Solicitudes del usuario

En la siguiente tabla, se muestra una lista de los campos que se encuentran en una entrada de registro de solicitud del usuario.

Campo Valores y notas
LogEntry.resource.type Gemini para el Google Cloud tipo de recurso: cloudaicompanion.googleapis.com/Instance.
LogEntry.resource.labels.resource_container ID único del contenedor de recursos en el que se usó Gemini para Google Cloud .
LogEntry.resource.labels.location Ubicación en la que se usó Gemini para Google Cloud .
LogEntry.resource.labels.instance_id Es el ID único del recurso en el que se usó Gemini para Google Cloud .
LogEntry.labels.method Puede ser una de las siguientes opciones, según lo que invocó a logEntry:

CompleteTask: Por ejemplo, una solicitud de chat de Gemini Code Assist o de otro servicio de Gemini para Google Cloud .

GenerateCode: Por ejemplo, una solicitud para generar código, como una solicitud de transformación de código dentro de Gemini Code Assist.

CompleteCode: Por ejemplo, una solicitud para completar código cuando se trabaja en el IDE, como con sugerencias intercaladas dentro de Gemini Code Assist.
LogEntry.labels.product Gemini para Google Cloud nombre del servicio. Si el producto de Gemini para Google Cloud es Gemini Code Assist, este valor es code_assist. Si el producto de Gemini para Google Cloud es Gemini Cloud Assist, este valor es cloud_assist. De lo contrario, este valor es unknown.
LogEntry.labels.request_id Es un identificador único para correlacionar una solicitud con una entrada de registro de respuesta.
LogEntry.labels.user_id Es el identificador del usuario que inició esta solicitud.
LogEntry.jsonPayload Es la carga útil de la entrada de registro.
LogEntry.logName Identifica el registro.

En el siguiente ejemplo, se muestra una entrada de registro de ejemplo para un evento de instrucción de chat.

{
  "insertId": "654581e30003b19e340bbd96",
  "resource": {
    "type": "cloudaicompanion.googleapis.com/Instance",
    "labels": {
        instance_id: "default"
        location: "global"
        resource_container: "my-project-id"
     }
  },
  "timestamp": "2023-11-03T23:27:31.242078Z",
  "labels": {
    "product": "code_assist",
    "request_id": "4ea1e265-ea5d-4d11-b3c8-39bad9c96326"
    "user_id": "my-user@example.com"
  },
  "jsonPayload" : {
    @type: "type.googleapis.com/google.cloud.cloudaicompanion.logging.v1.RequestLog"
    "taskCompletionRequest":
      input: {
        messages: [{
          author: "USER"
          content: "What are some best practices to save cost on my Google Cloud bill?"
        }]
        preamble: ""
      }
  }
  "logName": "projects/my-project-id/logs/cloudaicompanion.googleapis.com%2Frequest",
  "receiveTimestamp": "2023-11-03T23:27:31.255648319Z"
  "severity": "INFO"
}

En el siguiente ejemplo, se muestra una entrada de RequestLog para las indicaciones de sugerencia de código intercalado automáticas y pedirle a Gemini que Google Cloud en un archivo de código.

Los datos de la instrucción para las sugerencias de código intercalado usan el objeto codeCompletionRequest (como se muestra en el siguiente ejemplo), mientras que la generación activada manualmente usa codeGenerationRequest.

{
  "insertId": "654581e30003b19e340bbd96",
  "resource": {
    "type": "cloudaicompanion.googleapis.com/Instance",
    "labels": {
        instance_id: "default"
        location: "global"
        resource_container: "my-project-id"
     }
  },
  "timestamp": "2023-11-03T23:27:31.242078Z",
  "labels": {
    "product": "code_assist",
    "request_id": "4ea1e265-ea5d-4d11-b3c8-39bad9c96326"
    "user_id": "my-user@example.com"
  },
  "jsonPayload" : {
    @type: "type.googleapis.com/google.cloud.cloudaicompanion.logging.v1.RequestLog"
    "codeCompletionRequest": {
      "input_data_context": {
        "additional_context": {
          "files": [
            {
              "language": "go",
              "path": "{/path/to/../current-file.go",
              "segments": [
                {
                  "content": "...Prefix Text..."
                },
                {
                  "content": "...Suffix Text..."
                }
              ],
              "state": ["EDITED"]
            },
            {
              "language": "go",
              "path": "/path/to/../recent-file.go",
              "segments": [
                {
                  "content": "...File Text..."
                }
              ],
              "state": ["RECENTLY_OPENED"]
            }
          ]
        }
      }
    }
  }
  "logName": "projects/my-project-id/logs/cloudaicompanion.googleapis.com%2Frequest",
  "receiveTimestamp": "2023-11-03T23:27:31.255648319Z"
  "severity": "INFO"
}

Respuestas de Gemini para Google Cloud

En la siguiente tabla, se muestran los campos de respuesta y las descripciones de Gemini para Google Cloud .

Campo Valores y notas
LogEntry.resource.type Gemini para el Google Cloud tipo de recurso: cloudaicompanion.googleapis.com/Instance.
LogEntry.resource.labels.resource_container ID único del contenedor de recursos en el que se usó Gemini para Google Cloud .
LogEntry.resource.labels.location Ubicación en la que se usó Gemini para Google Cloud .
LogEntry.resource.labels.instance_id Es el ID único del recurso en el que se usó Gemini para Google Cloud .
LogEntry.labels.method Puede ser una de las siguientes opciones, según lo que invocó a logEntry:

CompleteTask: Por ejemplo, una solicitud de chat de Gemini Code Assist o de otro servicio de Gemini para Google Cloud .

GenerateCode: Por ejemplo, una solicitud para generar código, como una solicitud de transformación de código dentro de Gemini Code Assist.

CompleteCode: Por ejemplo, una solicitud para completar código cuando se trabaja en el IDE, como con sugerencias intercaladas dentro de Gemini Code Assist.
LogEntry.labels.product Gemini para Google Cloud nombre del servicio. Si el producto de Gemini para Google Cloud es Gemini Code Assist, este valor es code_assist. Si el producto de Gemini para Google Cloud es Gemini Cloud Assist, este valor es cloud_assist. De lo contrario, este valor es unknown.
LogEntry.labels.request_id Es un identificador único para correlacionar una solicitud con una entrada de registro de respuesta.
LogEntry.labels.user_id Es el identificador del usuario que inició esta solicitud.
LogEntry.jsonPayload Es la carga útil de la entrada de registro. Las citas de fuentes que se usaron para generar la respuesta se incluyen en este objeto como attribution_context.
LogEntry.logName Identifica el registro.

Registros de metadatos de Gemini para Google Cloud

Para que se generen los registros de metadatos, se debe habilitar el parámetro de configuración de telemetría de la extensión de Gemini Code Assist para las extensiones de VS Code y de IntelliJ. Además, para VS Code, también se debe habilitar el parámetro de configuración de recopilación de telemetría global.

Los registros de metadatos de Gemini para Google Cloud siguen la misma estructura que los registros de Gemini para Google Cloud , pero especifican campos diferentes. En la siguiente tabla, se muestra una lista de los campos que se encuentran en una entrada de registro de solicitud del usuario:

Campo Valores y notas
LogEntry.@type Gemini para el tipo de recurso de metadatos de Google Cloud : type.googleapis.com/google.cloud.cloudaicompanion.logging.v1.MetadataLog.
LogEntry.labels.method Para los registros de metadatos, el valor de esta etiqueta es Export.Metrics.
LogEntry.labels.product Gemini para Google Cloud nombre del servicio. Si el producto de Gemini para Google Cloud es Gemini Code Assist, este valor es code_assist. Si el producto de Gemini para Google Cloud es Gemini Cloud Assist, este valor es cloud_assist. De lo contrario, este valor es unknown.
LogEntry.labels.user_id Es el identificador del usuario que inició esta solicitud.
LogEntry.jsonPayload Indica un evento codeExposure o un evento code.Acceptance. Un evento codeExposure indica la exposición de una sugerencia de código a un usuario. Un evento code.Acceptance indica que el usuario realizó algún evento de aceptación, como escribir, presionar la tecla Tab o aceptar por completo.
LogEntry.jsonPayload.clientName Nombre del IDE, como CloudCodeVscode.
LogEntry.jsonPayload.clientVersion Es el número de versión del IDE.
LogEntry.jsonPayload.codeAcceptance Solo para los IDE de VS Code y IntelliJ, indica que el usuario realizó algún evento de aceptación, como escritura, tabulación o aceptación completa. También incluye los siguientes campos:
  • linesCount: Es la cantidad total de líneas de código que aceptó el usuario.
  • commentLinesCount: Es la cantidad de líneas de comentarios en el código que acepta el usuario. Esta propiedad solo aparece si Gemini Code Assist puede determinar cuántas de las líneas aceptadas son líneas de comentarios.
  • originalRequestId: Es un identificador que vincula un evento codeExposure a cero o más eventos codeAcceptance. Esto se puede usar para calcular las medidas de tasa de aceptación y líneas de código aceptadas.
  • programmingLanguage: Lenguaje de programación del código aceptado, como python.
LogEntry.jsonPayload.codeExposure Solo para los IDE de IntelliJ y VS Code, indica que se expuso una sugerencia de código a un usuario. También incluye los siguientes campos:
  • programmingLanguage: Es el lenguaje de programación de la exposición, como python.
  • originalRequestId: Es un identificador que vincula un evento codeExposure a cero o más eventos codeAcceptance. Esto se puede usar para calcular las medidas de tasa de aceptación y líneas de código aceptadas.
LogEntry.jsonPayload.chatExposure Indica que se expuso una respuesta de chat a un usuario. También incluye el siguiente campo:

En el siguiente ejemplo, se muestra una entrada de registro de codeExposure:

{
  insertId: "whfrqgc1gj"
  jsonPayload: {
    @type: "type.googleapis.com/google.cloud.cloudaicompanion.logging.v1.MetadataLog"
    clientName: "CloudCodeVscode"
    clientVersion: "1.93.1"
    codeExposure: {
      originalRequestId: "cac019824a0b25ba"
      programmingLanguage: "python"
    }
  requestId: "0c5178fe-446f-4ab6-b996-520dec100cf8"
  }
  labels: {
    method: "Export.Metrics"
    product: "code_assist"
    user_id: "user@company.com"
  }
  logName: "projects/my-project-id/logs/cloudaicompanion.googleapis.com%2Fmetadata"
  receiveTimestamp: "2025-02-03T23:34:35.662837985Z"
  resource: {
    labels: {
      instance_id: "default"
      location: "global"
      resource_container: "my-project-id"
    }
  type: "cloudaicompanion.googleapis.com/Instance"
  }
  severity: "INFO"
  timestamp: "2025-02-03T23:34:35.021564463Z"
}

En el siguiente ejemplo, se muestra una entrada de registro de codeAcceptance:

{
  insertId: "whfrqgc1gk"
  jsonPayload: {
    @type: "type.googleapis.com/google.cloud.cloudaicompanion.logging.v1.MetadataLog"
    clientName: "CloudCodeVscode"
    clientVersion: "1.93.1"
    codeAcceptance: {
      linesCount: 2
      originalRequestId: "cac019824a0b25ba"
      programmingLanguage: "python"
    }
    requestId: "ddf11040-c315-452e-b7cd-928c3f97984e"
  }
  labels: {
    method: "Export.Metrics"
    product: "code_assist"
    user_id: "user@company.com"
  }
  logName: "projects/my-project-id/logs/cloudaicompanion.googleapis.com%2Fmetadata"
  receiveTimestamp: "2025-02-03T23:34:37.632662272Z"
  resource: {
    labels: {
      instance_id: "default"
      location: "global"
      resource_container: "my-project-id"
    }
    type: "cloudaicompanion.googleapis.com/Instance"
  }
  severity: "INFO"
  timestamp: "2025-02-03T23:34:36.778692483Z"
} 

En el siguiente ejemplo, se muestra una entrada de registro de chatExposure:

{
  insertId: "3diaj2c208"
  jsonPayload: {
    @type: "type.googleapis.com/google.cloud.cloudaicompanion.logging.v1.MetadataLog"
    clientName: "CloudCodeVscode"
    clientVersion: "1.93.1"
    chatExposure: {
      originalRequestId: "cac019824a0b25ba"
    }
  requestId: "0c5178fe-446f-4ab6-b996-520dec100cf8"
  }
  labels: {
    method: "Export.Metrics"
    product: "code_assist"
    user_id: "user@company.com"
  }
  logName: "projects/my-project-id/logs/cloudaicompanion.googleapis.com%2Fmetadata"
  receiveTimestamp: "2025-02-03T23:34:35.662837985Z"
  resource: {
    labels: {
      instance_id: "default"
      location: "global"
      resource_container: "my-project-id"
    }
  type: "cloudaicompanion.googleapis.com/Instance"
  }
  severity: "INFO"
  timestamp: "2025-02-03T23:34:35.021564463Z"
}

Cómo calcular el porcentaje de aceptación del código

Para calcular la tasa de aceptación con los registros de metadatos de Gemini Code Assist, busca la cantidad total de IDs únicos de los eventos con codeAcceptance.originalRequestId y divídela por la cantidad total de IDs únicos de los eventos con codeExposure.originalRequestId. Puedes refinar aún más este cálculo por lenguaje de programación y por usuario con los campos de eventos de registro de metadatos respectivos.

Cómo calcular las líneas de código aceptadas

Para calcular las líneas de código aceptadas, busca el valor máximo de codeAcceptance.linesCount para un codeAcceptance.originalRequestId único. Luego, agrega el valor de linesCount para todos los eventos codeAcceptance finales de cada originalRequestId para calcular la cantidad total de líneas de código aceptadas. Puedes refinar aún más este cálculo por lenguaje de programación y por usuario con los campos de eventos de registro de metadatos respectivos.

¿Qué sigue?