Ver Gemini para los registros de Google Cloud

Este documento describe cómo puede habilitar la recopilación y el almacenamiento de Gemini para Google Cloud actividad, incluyendo lo siguiente:

  • Géminis para Google Cloud indicaciones y registros de respuestas, como entrada del usuario, información contextual y respuestas.
  • Géminis para Google Cloud registros de metadatos, como metadatos de telemetría y líneas de código aceptadas por el usuario.

Si necesita generar métricas de Gemini Code Assist, consulte Monitor Gemini para Google Cloud uso .

Géminis para Google Cloud no recopila ni envía a Cloud Logging ninguna otra interacción del usuario que el usuario pueda haber tenido con Gemini. Google Cloud, incluyendo comentarios por escrito. Los datos recopilados se envían a Cloud Logging para su almacenamiento. Puede revisar estos datos buscando entradas de registro con el tipo de recurso cloudaicompanion.googleapis.com/Instance .

Esta función no registra solicitudes ni respuestas en Gemini en Vertex AI. Para habilitar los registros de Gemini en Vertex AI, consulte "Habilitar registros de auditoría de acceso a datos" .

Los roles de Administración de Identidad y Acceso (IAM) controlan la capacidad de una entidad de seguridad para acceder a los registros. Puede otorgar roles predefinidos a las entidades de seguridad o crear roles personalizados. Para obtener más información sobre los permisos necesarios, consulte Control de acceso .

De forma predeterminada, Cloud Logging cifra el contenido de los clientes almacenado en reposo . Los datos que Logging almacena en los depósitos de registro se cifran mediante claves de cifrado de claves, un proceso conocido como cifrado de sobre . Para acceder a sus datos de registro, es necesario acceder a dichas claves de cifrado de claves, que Google gestiona automáticamente sin que usted tenga que hacer nada.

Es posible que su organización tenga requisitos de cifrado regulatorios, de cumplimiento o avanzados que nuestro cifrado en reposo predeterminado no cubre. Para cumplir con los requisitos de su organización, en lugar de que Google administre las claves de cifrado que protegen sus datos, puede administrarlas usted mismo.

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

Limitaciones

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

Además, si el usuario final desactiva la configuración de telemetría de VS Code, Gemini para Google Cloud No registra metadatos. Sin embargo, se siguen generando registros de solicitudes y respuestas cuando los administradores los habilitan.

Antes de empezar

Ver Gemini para Google Cloud registros de usuarios y registros de metadatos

Para ver Gemini por Google Cloud registros de usuario y registros de metadatos, realice una de las siguientes acciones:

Consola

  1. En el Google Cloud consola, vaya a la página del Explorador de registros :

    Ir al Explorador de registros

    Si utiliza la barra de búsqueda para encontrar esta página, seleccione el resultado cuyo subtítulo sea Registro .

  2. En la barra de herramientas, seleccione una Google Cloud proyecto de consola.
  3. En la barra de herramientas, expanda el menú Todos los recursos y seleccione el recurso Cloud AI Companion Instance .

nube g

Ejecute el siguiente comando:

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

Reemplace PROJECT_ID con el ID del proyecto para el cual Gemini está diseñado. Google Cloud registros que desea 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"
      }
    

    Reemplace PROJECT_ID con el ID del proyecto para el cual Gemini está diseñado. Google Cloud registros que desea ver.

  2. Obtener un token de autenticación :

    TOKEN=$(gcloud auth print-access-token)
    
  3. Utilice 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"

    Reemplace JSON_FILE_NAME con la ruta del archivo JSON que creó en el paso anterior.

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

    La respuesta devuelve un conjunto de entradas de registro.

Géminis para Google Cloud registros

Una LogEntry es la unidad básica de datos en Cloud Logging. Las siguientes secciones proporcionan listas de campos que se encuentran en la LogEntry de un Gemini. Google Cloud evento de la plataforma, como solicitudes de usuarios y Gemini para Google Cloud respuestas .

Solicitudes de los usuarios

La siguiente tabla muestra una lista de campos encontrados en una entrada de registro de solicitud de usuario.

Campo Valores y notas
LogEntry.resource.type Géminis para Google Cloud tipo de recurso : cloudaicompanion.googleapis.com/Instance .
LogEntry.resource.labels.resource_container Identificador único del contenedor de recursos donde se encuentra Gemini Google Cloud fue utilizado
LogEntry.resource.labels.location Ubicación donde se encuentra Géminis Google Cloud fue utilizado
LogEntry.resource.labels.instance_id Identificador único del recurso donde se encuentra Gemini Google Cloud fue utilizado
LogEntry.labels.method Puede ser uno de los siguientes, dependiendo de lo que haya invocado logEntry :

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

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

CompleteCode : por ejemplo, una solicitud para completar el código cuando se trabaja en el IDE, como con sugerencias en línea dentro de Gemini Code Assist.
LogEntry.labels.product Géminis para Google Cloud Nombre del servicio. Si el Gemini para Google Cloud El producto es Gemini Code Assist, entonces este valor es code_assist . Si Gemini para Google Cloud Si el producto es Gemini Cloud Assist, este valor es cloud_assist . De lo contrario, este valor es unknown .
LogEntry.labels.request_id Un identificador único para correlacionar una solicitud con una entrada de registro de respuesta.
LogEntry.labels.user_id El identificador del usuario que inició esta solicitud.
LogEntry.jsonPayload La carga útil de la entrada de registro.
LogEntry.logName Identifica el registro.

El siguiente ejemplo muestra una entrada de registro de ejemplo para un evento de aviso 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"
}

El siguiente ejemplo muestra un ejemplo de entrada RequestLog para solicitudes de sugerencias de código en línea automáticas y solicitudes de Gemini para Google Cloud en un archivo de código .

Los datos de solicitud para sugerencias de código en línea utilizan el objeto codeCompletionRequest (como se muestra en el siguiente ejemplo), mientras que la generación activada manualmente utiliza 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"
}

Géminis para Google Cloud respuestas

La siguiente tabla muestra Géminis para Google Cloud campos de respuesta y descripciones.

Campo Valores y notas
LogEntry.resource.type Géminis para Google Cloud tipo de recurso : cloudaicompanion.googleapis.com/Instance .
LogEntry.resource.labels.resource_container Identificador único del contenedor de recursos donde se encuentra Gemini Google Cloud fue utilizado
LogEntry.resource.labels.location Ubicación donde se encuentra Géminis Google Cloud fue utilizado
LogEntry.resource.labels.instance_id Identificador único del recurso donde se encuentra Gemini Google Cloud fue utilizado
LogEntry.labels.method Puede ser uno de los siguientes, dependiendo de lo que haya invocado logEntry :

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

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

CompleteCode : por ejemplo, una solicitud para completar el código cuando se trabaja en el IDE, como con sugerencias en línea dentro de Gemini Code Assist.
LogEntry.labels.product Géminis para Google Cloud Nombre del servicio. Si el Gemini para Google Cloud El producto es Gemini Code Assist, entonces este valor es code_assist . Si Gemini para Google Cloud Si el producto es Gemini Cloud Assist, este valor es cloud_assist . De lo contrario, este valor es unknown .
LogEntry.labels.request_id Un identificador único para correlacionar una solicitud con una entrada de registro de respuesta.
LogEntry.labels.user_id El identificador del usuario que inició esta solicitud.
LogEntry.jsonPayload La carga útil de la entrada de registro. Las citas de fuentes utilizadas para generar la respuesta se incluyen en este objeto como attribution_context .
LogEntry.logName Identifica el registro.

Géminis para Google Cloud registros de metadatos

Para generar los registros de metadatos, la configuración de telemetría de la extensión Gemini Code Assist debe estar habilitada tanto para VS Code como para IntelliJ. Además, para VS Code, también debe estar habilitada la configuración de recopilación de telemetría global .

Géminis para Google Cloud Los registros de metadatos siguen la misma estructura que Gemini para Google Cloud Los registros, pero especifican campos diferentes. La siguiente tabla muestra una lista de campos encontrados en una entrada del registro de solicitud de usuario:

Campo Valores y notas
LogEntry.@type Géminis para Google Cloud Tipo de recurso de metadatos: type.googleapis.com/google.cloud.cloudaicompanion.logging.v1.MetadataLog .
LogEntry.labels.method Para los registros de metadatos, este valor de etiqueta es Export.Metrics .
LogEntry.labels.product Géminis para Google Cloud Nombre del servicio. Si el Gemini para Google Cloud El producto es Gemini Code Assist, entonces este valor es code_assist . Si Gemini para Google Cloud Si el producto es Gemini Cloud Assist, este valor es cloud_assist . De lo contrario, este valor es unknown .
LogEntry.labels.user_id El identificador del usuario que inició esta solicitud.
LogEntry.jsonPayload Indica un evento codeExposure o code.Acceptance . Un evento codeExposure indica la exposición de una sugerencia de código al usuario. Un evento code.Acceptance indica que el usuario ha aceptado algún evento, como una sobreescritura, una tabulación o una aceptación completa.
LogEntry.jsonPayload.clientName El nombre del IDE, como CloudCodeVscode .
LogEntry.jsonPayload.clientVersion El número de versión IDE.
LogEntry.jsonPayload.codeAcceptance Solo para IDEs de VS Code e IntelliJ, indica que el usuario aceptó algún evento, como una sobreescritura, una tabulación o una aceptación completa. También incluye los siguientes campos:
  • linesCount : el número total de líneas de código aceptadas por el usuario.
  • commentLinesCount : el número de líneas de comentario en el código aceptadas por el usuario. Esta propiedad solo aparece si Gemini Code Assist puede determinar cuántas de las líneas aceptadas son líneas de comentario.
  • originalRequestId : un identificador que vincula un evento codeExposure a cero o más eventos codeAcceptance . Esto se puede usar para calcular la tasa de aceptación y las medidas de líneas de código aceptadas .
  • programmingLanguage : lenguaje de programación del código aceptado, como por ejemplo python .
LogEntry.jsonPayload.codeExposure Solo para IDEs de VS Code e IntelliJ, indica que se expuso una sugerencia de código a un usuario. También incluye los siguientes campos:
  • programmingLanguage : lenguaje de programación de la exposición, como por ejemplo python .
  • originalRequestId : un identificador que vincula un evento codeExposure a cero o más eventos codeAcceptance . Esto se puede usar para calcular la tasa de aceptación y las medidas de 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:

El siguiente ejemplo muestra un ejemplo de entrada del 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"
}

El siguiente ejemplo muestra un ejemplo de entrada de registro 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"
} 

El siguiente ejemplo muestra un ejemplo de entrada de registro 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"
}

Calcular la tasa de aceptación del código

Para calcular la tasa de aceptación con los registros de metadatos de Gemini Code Assist, encuentre el número total de ID únicos de eventos con codeAcceptance.originalRequestId y divídalo entre el número total de ID únicos de eventos con codeExposure.originalRequestId . Puede refinar este cálculo por lenguaje de programación y por usuario utilizando los campos de evento del registro de metadatos correspondientes.

Calcular líneas de código aceptadas

Para calcular las líneas de código aceptadas, encuentre el valor máximo de codeAcceptance.linesCount para un codeAcceptance.originalRequestId único. Luego, sume el valor linesCount de todos los eventos codeAcceptance finales para cada originalRequestId para calcular el total de líneas de código aceptadas. Puede refinar este cálculo por lenguaje de programación y por usuario utilizando los campos de eventos del registro de metadatos correspondientes.

¿Qué sigue?