Este documento descreve como pode ativar a recolha e o armazenamento da atividade do Gemini for Google Cloud , incluindo o seguinte:
- Gemini para Google Cloud comandos e registos de respostas, como introdução do utilizador, informações contextuais e respostas.
- Gemini para Google Cloud registos de metadados, como metadados de telemetria e linhas de código aceites pelo utilizador.
Se precisar de gerar métricas do Gemini Code Assist, consulte o artigo Monitorizar a utilização do Google Cloud Gemini.
O Gemini para Google Cloud não recolhe nem envia para o
Cloud Logging quaisquer outras interações que o utilizador possa ter tido com o
Gemini para Google Cloud, incluindo feedback escrito. Os
dados recolhidos são enviados para o Cloud Logging para armazenamento. Pode rever estes dados pesquisando entradas de registo com o tipo de recurso cloudaicompanion.googleapis.com/Instance
.
Esta funcionalidade não regista comandos nem respostas no Gemini na Vertex AI. Para ativar os registos do Gemini na Vertex AI, consulte o artigo Ative os registos de auditoria de acesso a dados.
As funções de gestão de identidade e de acesso (IAM) controlam a capacidade de um principal aceder aos registos. Pode conceder funções predefinidas a responsáveis ou criar funções personalizadas. Para mais informações sobre as autorizações necessárias, consulte o artigo Controlo de acesso.
Por predefinição, o Cloud Logging encripta o conteúdo do cliente armazenado em repouso. Os dados armazenados em contentores de registos pelo Logging são encriptados com chaves de encriptação de chaves, um processo conhecido como encriptação de envelope. O acesso aos seus dados de registo requer acesso a essas chaves de encriptação de chaves, que a Google gere por si sem que tenha de realizar qualquer ação.
A sua organização pode ter requisitos regulamentares, relacionados com a conformidade ou de encriptação avançada que a nossa encriptação em repouso predefinida não oferece. Para cumprir os requisitos da sua organização, em vez de a Google gerir as chaves de encriptação que protegem os seus dados, pode gerir as suas chaves.
Para informações específicas sobre a utilização de chaves de encriptação geridas pelo cliente (CMEK), incluindo vantagens e limitações, consulte o artigo Chaves de encriptação geridas pelo cliente.
Limitações
A gravação de dados de registo do Gemini está limitada às interações do utilizador com o Gemini Code Assist no IDE. Google Cloud
Antes de começar
-
Para obter as autorizações de que precisa para ver os registos do Gemini para o Google Cloud Workspace, peça ao seu administrador para lhe conceder a função de IAM de leitor de registos (
roles/logging.viewer
) no seu projeto. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.
Reveja os preços do Cloud Logging e os preços do Gemini para Google Cloud antes de ativar o Gemini para Google Cloud registo.
Veja os Google Cloud registos de utilizadores e os registos de metadados do Gemini
Para ver os registos de utilizador e os registos de metadados do Gemini for Google Cloud Google Workspace: faça uma das seguintes ações:
Consola
-
Na Google Cloud consola, aceda à página Explorador de registos:
Aceda ao Explorador de registos
Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cuja legenda é Registo.
- Na barra de ferramentas, selecione um Google Cloud projeto da consola.
- Na barra de ferramentas, expanda o menu Todos os recursos e selecione o recurso Instância do Cloud AI Companion.
gcloud
Execute o seguinte comando:
gcloud logging read "resource.type=cloudaicompanion.googleapis.com/Instance" --project PROJECT_ID --limit 3
Substitua PROJECT_ID
pelo ID do projeto cujos registos do
Gemini for Google Cloud quer ver.
API
Crie um ficheiro JSON que contenha as seguintes informações:
{ "resourceNames": [ "projects/PROJECT_ID" ], "pageSize": 5, "filter": "resource.type: cloudaicompanion.googleapis.com/Instance" }
Substitua
PROJECT_ID
pelo ID do projeto cujos registos do Gemini for Google Cloud quer ver.Obtenha um token de autenticação:
TOKEN=$(gcloud auth print-access-token)
Use
cURL
para chamar oentries.list
método:curl -X POST --data-binary @JSON_FILE_NAME \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ "https://logging.googleapis.com/v2/entries:list"
Substitua
JSON_FILE_NAME
pelo caminho do ficheiro JSON que criou no passo anterior.Para mais informações sobre a autenticação, consulte o artigo Autentique-se para usar REST.
A resposta devolve um conjunto de entradas de registo.
Gemini para registos Google Cloud
Uma LogEntry
é a unidade básica de
dados no Cloud Logging. As secções seguintes fornecem listas de campos encontrados no LogEntry
para um evento da plataforma do Gemini para Google Cloud , como pedidos do utilizador e respostas do Gemini para Google Cloud .
Pedidos de utilizadores
A tabela seguinte mostra uma lista de campos encontrados numa entrada do registo de pedidos do utilizador.
Campo | Valores e notas |
---|---|
LogEntry.resource.type |
Gemini para o Google Cloud tipo de recurso: cloudaicompanion.googleapis.com/Instance . |
LogEntry.resource.labels.resource_container |
ID exclusivo do contentor de recursos onde o Gemini for Google Cloud foi usado. |
LogEntry.resource.labels.location |
Localização onde o Gemini para Google Cloud foi usado. |
LogEntry.resource.labels.instance_id |
ID exclusivo do recurso onde o Gemini for Google Cloud foi usado. |
LogEntry.labels.method |
Pode ser uma das seguintes opções, consoante o que invocou logEntry :CompleteTask : por exemplo, um pedido de chat do Gemini Code Assist ou outro serviço do Gemini para Google Cloud .GenerateCode : por exemplo, um pedido para gerar código, como um pedido de transformação de código no Gemini Code Assist.CompleteCode : por exemplo, um pedido para concluir código quando trabalha no IDE, como com sugestões inline no Gemini Code Assist. |
LogEntry.labels.product |
Gemini para Google Cloud service name. Se o produto Gemini for o Gemini Code Assist, este valor é code_assist . Google Cloud Se o produto Gemini for o Gemini Cloud Assist, este valor é cloud_assist . Google Cloud Caso contrário, este valor é unknown . |
LogEntry.labels.request_id |
Um identificador exclusivo para correlacionar um pedido com uma entrada de registo de resposta. |
LogEntry.labels.user_id |
O identificador do utilizador que iniciou este pedido. |
LogEntry.jsonPayload |
O payload da entrada do registo. |
LogEntry.logName |
Identifica o registo. |
O exemplo seguinte mostra uma entrada de registo de exemplo para um evento de comando 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"
}
O exemplo seguinte mostra uma entrada RequestLog
para sugestões de código inline
automáticas
e comandos para
pedir ao Gemini Google Cloud num ficheiro de código.
Os dados de comandos para sugestões de código inline usam o objeto codeCompletionRequest
(conforme mostrado no exemplo seguinte), enquanto a geração acionada 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"
}
Respostas do Gemini para o Google Cloud
A tabela seguinte mostra os campos de resposta do Gemini for Google Cloud e as descrições.
Campo | Valores e notas |
---|---|
LogEntry.resource.type |
Gemini para o Google Cloud tipo de recurso: cloudaicompanion.googleapis.com/Instance . |
LogEntry.resource.labels.resource_container |
ID exclusivo do contentor de recursos onde o Gemini for Google Cloud foi usado. |
LogEntry.resource.labels.location |
Localização onde o Gemini para Google Cloud foi usado. |
LogEntry.resource.labels.instance_id |
ID exclusivo do recurso onde o Gemini for Google Cloud foi usado. |
LogEntry.labels.method |
Pode ser uma das seguintes opções, consoante o que invocou logEntry :CompleteTask : por exemplo, um pedido de chat do Gemini Code Assist ou outro serviço do Gemini para Google Cloud .GenerateCode : por exemplo, um pedido para gerar código, como um pedido de transformação de código no Gemini Code Assist.CompleteCode : por exemplo, um pedido para concluir código quando trabalha no IDE, como com sugestões inline no Gemini Code Assist. |
LogEntry.labels.product |
Gemini para Google Cloud service name. Se o produto Gemini for o Gemini Code Assist, este valor é code_assist . Google Cloud Se o produto Gemini for o Gemini Cloud Assist, este valor é cloud_assist . Google Cloud Caso contrário, este valor é unknown . |
LogEntry.labels.request_id |
Um identificador exclusivo para correlacionar um pedido com uma entrada de registo de resposta. |
LogEntry.labels.user_id |
O identificador do utilizador que iniciou este pedido. |
LogEntry.jsonPayload |
O payload da entrada do registo. Todas as citações de fontes usadas para gerar a resposta estão incluídas neste objeto como attribution_context . |
LogEntry.logName |
Identifica o registo. |
Gemini para Google Cloud registos de metadados
Para que os registos de metadados sejam gerados, a definição de telemetria da extensão Gemini Code Assist tem de estar ativada para as extensões do VS Code e do IntelliJ. Além disso, para o VS Code, a definição de recolha de telemetria global também tem de estar ativada.
Os registos de metadados do Gemini seguem a mesma estrutura que os registos do Gemini, mas especificam campos diferentes. Google Cloud Google Cloud A tabela seguinte mostra uma lista de campos encontrados numa entrada do registo de pedidos do utilizador:
Campo | Valores e notas |
---|---|
LogEntry.@type |
Gemini para o Google Cloud tipo de recursodemetadados: type.googleapis.com/google.cloud.cloudaicompanion.logging.v1.MetadataLog . |
LogEntry.labels.method |
Para registos de metadados, o valor desta etiqueta é Export.Metrics . |
LogEntry.labels.product |
Gemini para Google Cloud service name. Se o produto Gemini for o Gemini Code Assist, este valor é code_assist . Google Cloud Se o produto Gemini for o Gemini Cloud Assist, este valor é cloud_assist . Google Cloud Caso contrário, este valor é unknown . |
LogEntry.labels.user_id |
O identificador do utilizador que iniciou este pedido. |
LogEntry.jsonPayload |
Indica um evento codeExposure ou um evento code.Acceptance . Um evento codeExposure indica uma exposição de uma sugestão de código a um utilizador. Um evento code.Acceptance indica que houve algum evento de aceitação por parte do utilizador, como a substituição de texto, a utilização da tecla Tab ou a aceitação total. |
LogEntry.jsonPayload.clientName |
O nome do IDE, como CloudCodeVscode . |
LogEntry.jsonPayload.clientVersion |
O número da versão do IDE. |
LogEntry.jsonPayload.codeAcceptance |
Apenas para os IDEs VS Code e IntelliJ, indica que houve algum evento de aceitação por parte do utilizador, como substituição, tabulação ou aceitação total. Também inclui os seguintes campos:
|
LogEntry.jsonPayload.codeExposure |
Apenas para os IDEs VS Code e IntelliJ, indica que houve exposição de uma sugestão de código a um utilizador. Também inclui os seguintes campos:
|
LogEntry.jsonPayload.chatExposure |
Indica que houve exposição de uma resposta de chat a um utilizador. Também inclui o seguinte campo:
|
LogEntry.jsonPayload.chatAcceptance |
Indica que o utilizador aceitou algo nos blocos de código na resposta do chat. Também inclui os seguintes campos:
|
O exemplo seguinte mostra uma entrada de registo codeExposure
de exemplo:
{
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"
}
O exemplo seguinte mostra uma entrada de registo codeAcceptance
de exemplo:
{
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"
}
O exemplo seguinte mostra uma entrada de registo chatAcceptance
de exemplo:
{
"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"
}
O exemplo seguinte mostra uma entrada de registo chatExposure
de exemplo:
{
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"
}
Calcule a taxa de aceitação de códigos
Para calcular a taxa de aceitação através dos registos de metadados do Gemini Code Assist, encontre o número total de IDs únicos de eventos com codeAcceptance.originalRequestId
e divida-o pelo número total de IDs únicos de eventos com codeExposure.originalRequestId
. Pode refinar ainda mais este cálculo por linguagem de programação e por utilizador através dos respetivos campos de eventos de registo de metadados.
Calcular linhas de código aceites
Para calcular as linhas de código aceites, encontre o valor máximo de codeAcceptance.linesCount
para um codeAcceptance.originalRequestId
único.
Em seguida, adicione o valor linesCount
para todos os eventos codeAcceptance
finais para cada originalRequestId
para calcular o total de linhas de código aceites. Pode refinar ainda mais este cálculo por linguagem de programação e por utilizador através dos campos de eventos de registo de metadados respetivos.
O que se segue?
- Saiba como ver, analisar e monitorizar os seus registos no Google Cloud.
- Saiba como monitorizar a utilização do Gemini para Google Cloud.