En este documento se describe cómo habilitar la recogida y el almacenamiento de la actividad de Gemini para Google Cloud , lo que incluye lo siguiente:
- Gemini para Google Cloud registros de peticiones y respuestas, como las entradas de los usuarios, la información contextual y las respuestas.
- Gemini para los registros de metadatos, como los metadatos de telemetría y las líneas de código aceptadas por el usuario. Google Cloud
Si necesitas generar métricas de Gemini Code Assist, consulta Monitorizar el uso de Gemini Google Cloud .
Gemini para Google Cloud no recoge 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 recogidos se envían a Cloud Logging para almacenarlos. Puede consultar estos datos buscando entradas de registro con el tipo de recurso cloudaicompanion.googleapis.com/Instance
.
Esta función no registra las peticiones ni las respuestas en Gemini en Vertex AI. Para habilitar los registros de Gemini en Vertex AI, consulta Habilitar registros de auditoría de acceso a datos.
Los roles de Gestión de Identidades y Accesos (IAM) controlan la capacidad de una entidad de acceder a los registros. Puedes conceder roles predefinidos a los principales o crear roles personalizados. Para obtener más información sobre los permisos necesarios, consulta Control de acceso.
De forma predeterminada, Cloud Logging encripta el contenido de los clientes almacenado en reposo. Los datos que Logging almacena en los contenedores de registro se cifran mediante claves de cifrado de claves, un proceso conocido como cifrado envolvente. Para acceder a tus datos de registro, es necesario tener acceso a esas claves de cifrado de claves, que Google gestiona por ti sin que tengas que hacer nada.
Es posible que tu organización tenga requisitos normativos, de cumplimiento o de cifrado avanzado que no se cumplan con el cifrado predeterminado en reposo. Para cumplir los requisitos de tu organización, puedes gestionar tus claves en lugar de que Google gestione las claves de cifrado que protegen tus datos.
Para obtener información específica sobre el uso de claves de cifrado gestionadas por el cliente (CMEK), incluidas las ventajas y las limitaciones, consulta Claves de cifrado gestionadas por el cliente.
Limitaciones
Gemini en el registro de datos de registro se limita a las interacciones de los usuarios con Gemini Code Assist en el IDE. Google Cloud
Antes de empezar
-
Para obtener los permisos que necesitas para ver los registros de Gemini para Google Cloud , pide a tu administrador que te conceda el rol de gestión de identidades y accesos Lector de registros (
roles/logging.viewer
) en tu proyecto. Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
Consulta los precios de Cloud Logging y los precios de Gemini para Google Cloud antes de habilitar Gemini para el registro de Google Cloud .
Ver los registros de usuario y los registros de metadatos de Gemini Google Cloud
Para ver los registros de usuario y los registros de metadatos de Gemini para Google Cloud , haz una de las siguientes acciones:
Consola
-
En la Google Cloud consola, ve a la página Explorador de registros:
Ve al Explorador de registros.
Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuya sección sea Registro.
- En la barra de herramientas, selecciona un proyecto de consola Google Cloud .
- En la barra de herramientas, despliega 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
Sustituye PROJECT_ID
por el ID del proyecto cuyos registros de Gemini para Google Cloud quieras ver.
API
Crea un archivo JSON que contenga la siguiente información:
{ "resourceNames": [ "projects/PROJECT_ID" ], "pageSize": 5, "filter": "resource.type: cloudaicompanion.googleapis.com/Instance" }
Sustituye
PROJECT_ID
por el ID del proyecto cuyos registros de Gemini para Google Cloud quieras ver.Obtén un token de autenticación:
TOKEN=$(gcloud auth print-access-token)
Usa
cURL
para llamar al métodoentries.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"
Sustituye
JSON_FILE_NAME
por la ruta del archivo JSON que has creado en el paso anterior.Para obtener más información sobre la autenticación, consulta Autenticación para usar REST.
La respuesta devuelve un conjunto de entradas de registro.
Registros de Gemini para Google Cloud
Un LogEntry
es la unidad básica de datos de Cloud Logging. En las siguientes secciones se incluyen listas de campos que se encuentran en LogEntry
para un evento de la plataforma Gemini for Google Cloud , como solicitudes de usuarios y respuestas de Gemini for Google Cloud .
Solicitudes de usuario
En la siguiente tabla se muestra una lista de los campos que se encuentran en una entrada de registro de solicitudes de usuario.
Campo | Valores y notas |
---|---|
LogEntry.resource.type |
Gemini para Google Cloud tipo de recurso: cloudaicompanion.googleapis.com/Instance . |
LogEntry.resource.labels.resource_container |
ID único del recurso de contenedor en el que se ha usado Gemini para Google Cloud . |
LogEntry.resource.labels.location |
Ubicación en la que se ha usado Gemini para Google Cloud . |
LogEntry.resource.labels.instance_id |
ID único del recurso en el que se ha usado Gemini para Google Cloud . |
LogEntry.labels.method |
Puede ser una de las siguientes opciones, en función de lo que haya invocado a logEntry :CompleteTask : por ejemplo, una solicitud de chat de Gemini Code Assist u otro servicio de Gemini. Google Cloud GenerateCode : por ejemplo, una solicitud para generar código, como una solicitud de transformación de código en Gemini Code Assist.CompleteCode : por ejemplo, una solicitud para completar código al trabajar en el IDE, como las sugerencias insertadas en Gemini Code Assist. |
LogEntry.labels.product |
Gemini para Google Cloud nombre_del_servicio. Si el producto de Gemini es Gemini Code Assist, este valor es code_assist . Google Cloud Si el producto de Gemini es Gemini Cloud Assist, este valor es cloud_assist . Google Cloud En caso contrario, este valor será unknown . |
LogEntry.labels.request_id |
Identificador único para correlacionar una solicitud con una entrada de registro de respuesta. |
LogEntry.labels.user_id |
Identificador del usuario que ha iniciado esta solicitud. |
LogEntry.jsonPayload |
La carga útil de la entrada de registro. |
LogEntry.logName |
Identifica el registro. |
En el siguiente ejemplo se muestra una entrada de registro de un evento de petició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": "user@company.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 RequestLog
para peticiones de sugerencias de código insertado automáticas y para pedir a Gemini Google Cloud en un archivo de código.
Los datos de las peticiones de sugerencias de código insertadas 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": "user@company.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 Google Cloud tipo de recurso: cloudaicompanion.googleapis.com/Instance . |
LogEntry.resource.labels.resource_container |
ID único del recurso de contenedor en el que se ha usado Gemini para Google Cloud . |
LogEntry.resource.labels.location |
Ubicación en la que se ha usado Gemini para Google Cloud . |
LogEntry.resource.labels.instance_id |
ID único del recurso en el que se ha usado Gemini para Google Cloud . |
LogEntry.labels.method |
Puede ser una de las siguientes opciones, en función de lo que haya invocado a logEntry :CompleteTask : por ejemplo, una solicitud de chat de Gemini Code Assist u otro servicio de Gemini. Google Cloud GenerateCode : por ejemplo, una solicitud para generar código, como una solicitud de transformación de código en Gemini Code Assist.CompleteCode : por ejemplo, una solicitud para completar código al trabajar en el IDE, como las sugerencias insertadas en Gemini Code Assist. |
LogEntry.labels.product |
Gemini para Google Cloud nombre_del_servicio. Si el producto de Gemini es Gemini Code Assist, este valor es code_assist . Google Cloud Si el producto de Gemini es Gemini Cloud Assist, este valor es cloud_assist . Google Cloud En caso contrario, este valor será unknown . |
LogEntry.labels.request_id |
Identificador único para correlacionar una solicitud con una entrada de registro de respuesta. |
LogEntry.labels.user_id |
Identificador del usuario que ha iniciado esta solicitud. |
LogEntry.jsonPayload |
La carga útil de la entrada de registro. Las citas de las fuentes que se hayan usado 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, debe habilitar la opción de telemetría de la extensión Gemini Code Assist en las extensiones de VS Code e IntelliJ. Además, en VS Code, también debe habilitarse el ajuste de recogida de telemetría global.
Los registros de metadatos de Gemini siguen la misma estructura que los registros de Gemini Google Cloud , pero especifican campos diferentes. Google Cloud En la siguiente tabla se muestra una lista de los campos que se encuentran en una entrada de registro de solicitudes de usuario:
Campo | Valores y notas |
---|---|
LogEntry.@type |
Gemini para Google Cloud metadatos tipo de recurso: type.googleapis.com/google.cloud.cloudaicompanion.logging.v1.MetadataLog . |
LogEntry.labels.method |
En 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 es Gemini Code Assist, este valor es code_assist . Google Cloud Si el producto de Gemini es Gemini Cloud Assist, este valor es cloud_assist . Google Cloud En caso contrario, este valor será unknown . |
LogEntry.labels.user_id |
Identificador del usuario que ha iniciado esta solicitud. |
LogEntry.jsonPayload |
Indica si se trata de un evento codeExposure o code.Acceptance . Un evento codeExposure indica que se le ha mostrado una sugerencia de código a un usuario. Un evento code.Acceptance indica que el usuario ha aceptado algo, 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 del IDE. |
LogEntry.jsonPayload.codeAcceptance |
Solo para los IDEs VS Code e IntelliJ, indica que el usuario ha aceptado algo, como una sustitución, una tabulación o una aceptación completa. También incluye los siguientes campos:
|
LogEntry.jsonPayload.codeExposure |
Solo para los IDEs de VS Code e IntelliJ, indica que se ha mostrado una sugerencia de código a un usuario. También incluye los siguientes campos:
|
LogEntry.jsonPayload.chatExposure |
Indica que se ha mostrado una respuesta de chat a un usuario. También incluye el siguiente campo:
|
LogEntry.jsonPayload.chatAcceptance |
Indica que el usuario ha aceptado algo en los bloques de código de la respuesta del chat. También incluye los siguientes campos:
|
En el siguiente ejemplo se muestra una entrada de registro 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 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 chatAcceptance
:
{
"insertId": "1oru1grbow",
"jsonPayload": {
"clientVersion": "1.103.2",
"requestId": "32a0b0b8c967d8e8",
"clientName": "CloudCodeVscode",
"chatAcceptance": {
"interactionType": "ACCEPT_CODE_BLOCK",
"programmingLanguage": "go",
"linesCount": "15",
"originalRequestId": "75f7c41e63162567"
},
"@type": "type.googleapis.com/google.cloud.cloudaicompanion.logging.v1.MetadataLog"
},
"resource": {
"type": "cloudaicompanion.googleapis.com/Instance",
"labels": {
"resource_container": "my-project-id",
"instance_id": "default",
"location": "global"
}
},
"timestamp": "2025-08-25T09:34:01.240377123Z",
"severity": "INFO",
"labels": {
"product": "code_assist",
"method": "Export.Metrics",
"user_id": "user@company.com"
},
"logName": "projects/my-project-id/logs/cloudaicompanion.googleapis.com%2Fmetadata",
"receiveTimestamp": "2025-08-25T09:34:01.704925625Z"
}
En el siguiente ejemplo se muestra una 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 de códigos
Para calcular la tasa de aceptación mediante los registros de metadatos de Gemini Code Assist, busca el número total de IDs únicos de eventos con codeAcceptance.originalRequestId
y divídelo entre el número total de IDs únicos de eventos con codeExposure.originalRequestId
. Puedes acotar aún más este cálculo por lenguaje de programación y por usuario mediante los campos de eventos de registro de metadatos correspondientes.
Calcula 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.
A continuación, añade el valor linesCount
de todos los eventos codeAcceptance
finales de cada originalRequestId
para calcular el total de líneas de código aceptadas. Puede refinar aún más este cálculo por lenguaje de programación y por usuario mediante los campos de eventos de registro de metadatos correspondientes.
Siguientes pasos
- Consulta cómo ver, analizar y monitorizar tus registros en Google Cloud.
- Consulta más información sobre cómo monitorizar el uso de Gemini for Google Cloud.