Questo documento descrive come abilitare la raccolta e l'archiviazione dei log di Gemini per Google Cloud attività, inclusi:
- I log dei prompt e delle risposte di Gemini per Google Cloud , ad esempio input dell'utente, informazioni contestuali e risposte.
- I log dei metadati di Gemini per, ad esempio i metadati di telemetria e le righe di codice accettate dall'utente. Google Cloud
Se devi generare metriche di Gemini Code Assist, consulta Monitorare l'utilizzo di Gemini per Google Cloud l'utilizzo.
Gemini for Google Cloud non raccoglie né invia a
Cloud Logging altre interazioni utente che l'utente potrebbe aver avuto con
Gemini for Google Cloud, inclusi i feedback scritti. I
dati raccolti vengono inviati a Cloud Logging per l'archiviazione. Puoi esaminare questi dati
cercando le voci di log con il tipo di risorsa
cloudaicompanion.googleapis.com/Instance.
Questa funzionalità non registra i prompt o le risposte in Gemini in Vertex AI. Per abilitare i log per Gemini in Vertex AI, consulta Abilitare gli audit log di accesso ai dati.
I ruoli IAM (Identity and Access Management) controllano la capacità di un'entità di accedere a log. Puoi concedere ruoli predefiniti alle entità o creare ruoli personalizzati. Per saperne di più sulle autorizzazioni richieste, consulta Controllo dell'accesso.
Per impostazione predefinita, Cloud Logging cripta i contenuti inattivi dei clienti. I dati archiviati nei bucket di log da Logging vengono criptati utilizzando le chiavi di crittografia delle chiavi, un processo noto come crittografia envelope. L'accesso ai dati di logging richiede l'accesso a queste chiavi di crittografia delle chiavi, che Google gestisce per te senza che tu debba eseguire alcuna azione.
La tua organizzazione potrebbe avere requisiti di crittografia avanzati, normativi o di conformità che la nostra crittografia inattiva predefinita non fornisce. Per soddisfare i requisiti della tua organizzazione, puoi gestire le tue chiavi anziché lasciare che Google gestisca le chiavi di crittografia che proteggono i tuoi dati.
Per informazioni specifiche sull'utilizzo delle chiavi di crittografia gestite dal cliente (CMEK), inclusi vantaggi e limitazioni, consulta Chiavi di crittografia gestite dal cliente.
Limitazioni
La registrazione dei dati dei log di Gemini in Google Cloud è limitata alle interazioni utente con Gemini Code Assist all'interno di un IDE.
Per impostazione predefinita, i log di Gemini per Google Cloud vengono raccolti per progetto. Per istruzioni su come configurare un progetto centralizzato per raccogliere i log da più progetti, consulta Configurare la registrazione dei log multi-progetto.
Gemini Code Assist su GitHub non supporta la registrazione dei log con Cloud Logging.
Prima di iniziare
-
Per ottenere le autorizzazioni necessarie per visualizzare i log di Gemini per Google Cloud , chiedi all'amministratore di concederti il ruolo IAM Visualizzatore log (
roles/logging.viewer) nel tuo progetto. Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Esamina i prezzi di Cloud Logging e i prezzi di Gemini per Google Cloud prima di abilitare la registrazione dei log di Gemini per Google Cloud .
Abilita la registrazione dei log di Gemini per Google Cloud .
Visualizzare i log utente Google Cloud e i log dei metadati di Gemini per
Per visualizzare i log utente e i log dei metadati di Gemini per Google Cloud , esegui una delle seguenti operazioni:
Console
-
Nella Google Cloud console, vai alla pagina Esplora log:
Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Logging.
- Nella barra degli strumenti, seleziona un progetto della Google Cloud console.
- Nella barra degli strumenti, espandi il menu Tutte le risorse e seleziona la risorsa Istanza di Cloud AI Companion.
gcloud
Esegui questo comando:
gcloud logging read "resource.type=cloudaicompanion.googleapis.com/Instance" --project PROJECT_ID --limit 3
Sostituisci PROJECT_ID con l'ID del progetto di cui vuoi visualizzare i log di Gemini per
Google Cloud .
API
Crea un file JSON che contenga le seguenti informazioni:
{ "resourceNames": [ "projects/PROJECT_ID" ], "pageSize": 5, "filter": "resource.type: cloudaicompanion.googleapis.com/Instance" }Sostituisci
PROJECT_IDcon l'ID del progetto di cui vuoi visualizzare i log di Gemini per Google Cloud .Ottieni un token di autenticazione:
TOKEN=$(gcloud auth print-access-token)Utilizza
cURLper chiamare ilentries.listmetodo:curl -X POST --data-binary @JSON_FILE_NAME \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ "https://logging.googleapis.com/v2/entries:list"
Sostituisci
JSON_FILE_NAMEcon il percorso del file JSON che hai creato nel passaggio precedente.Per saperne di più sull'autenticazione, consulta Autenticati per usare REST.
La risposta restituisce un insieme di voci di log.
Log di Gemini per Google Cloud
Un LogEntry è l'unità di
dati di base in Cloud Logging. Le sezioni seguenti forniscono elenchi di campi presenti
in LogEntry per un evento della piattaforma Gemini per Google Cloud , ad esempio
richieste utente e risposte di Gemini per Google Cloud .
Richieste da parte degli utenti
La tabella seguente mostra un elenco dei campi presenti in una voce di log delle richieste utente:
| Campo | Valori e note |
|---|---|
LogEntry.resource.type |
Tipo di risorsa di Gemini per Google Cloud : cloudaicompanion.googleapis.com/Instance. |
LogEntry.resource.labels.resource_container |
ID univoco del container di risorse in cui è stato utilizzato Gemini per Google Cloud . |
LogEntry.resource.labels.location |
Posizione in cui è stato utilizzato Gemini per Google Cloud |
LogEntry.resource.labels.instance_id |
ID univoco della risorsa in cui è stato utilizzato Gemini per Google Cloud |
LogEntry.labels.method |
Può essere uno dei seguenti, a seconda di cosa ha richiamato logEntry:CompleteTask: ad esempio, una richiesta di chat da Gemini Code Assist o da un altro servizio Gemini per Google Cloud service.GenerateCode: ad esempio, una richiesta di generazione di codice, come una richiesta di trasformazione del codice in Gemini Code Assist.CompleteCode: ad esempio, una richiesta di completamento del codice quando si lavora nell'IDE, come con i suggerimenti in linea in Gemini Code Assist. |
LogEntry.labels.product |
Nome del servizio Gemini per Google Cloud . Se il prodotto Gemini per è Gemini Code Assist, questo valore è code_assist. Google Cloud Se il prodotto Gemini per Google Cloud è Gemini Cloud Assist, questo valore è cloud_assist. In caso contrario, questo valore è unknown. |
LogEntry.labels.request_id |
Un identificatore univoco per correlare una richiesta a una voce di log di risposta. |
LogEntry.labels.user_id |
L'identificatore dell'utente che ha avviato questa richiesta. |
LogEntry.jsonPayload |
Il payload della voce di log. |
LogEntry.logName |
Identifica il log. |
Il seguente esempio mostra una voce di log di esempio per un evento di prompt di 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"
}
Il seguente esempio mostra una voce RequestLog di esempio per i prompt di suggerimento di codice in linea automatici
e
per i prompt di Gemini per Google Cloud in un file di codice.
I dati dei prompt per i suggerimenti di codice in linea utilizzano l'oggetto codeCompletionRequest
(come mostrato nell'esempio seguente), mentre la generazione attivata manualmente utilizza
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"
}
Log di interazione con l'agente
Alcune interazioni con Gemini possono generare più voci di log (richiesta, risposta e metadati) per una singola azione utente. Di seguito sono riportati alcuni esempi di queste interazioni:
- Un agente che esegue un'attività che prevede l'utilizzo di strumenti (ad esempio, il modello
che richiama funzioni interne come
read_fileoreplace, come mostrato negli esempi di log ). - Un agente che interagisce con altri agenti.
Voce di log della richiesta
Il seguente esempio mostra una voce di log di esempio per una richiesta che avvia un interazione con l'agente:
{
"insertId": "qe9xxub2r",
"jsonPayload": {
"taskCompletionRequest": {
"input": {
"messages": [
{
"author": "USER",
"content": "hi can you add one test here\nCurrent File Path:\n```cpp\n/usr/local/google/home/pdec/test.cpp\n```\n\n"
}
],
"preamble": ""
}
},
"@type": "type.googleapis.com/google.cloud.cloudaicompanion.logging.v1.RequestLog"
},
"resource": {
"type": "cloudaicompanion.googleapis.com/Instance",
"labels": {
"resource_container": "my-project-id",
"instance_id": "default",
"location": "global"
}
},
"timestamp": "2025-10-08T10:09:52.225165428Z",
"severity": "INFO",
"labels": {
"request_id": "e60facb1485b17b7",
"client_version": "unknown",
"product": "code_assist",
"method": "CompleteTask",
"user_id": "user@company.com",
"client_name": "cloudcode_cli"
},
"logName": "projects/my-project-id/logs/cloudaicompanion.googleapis.com%2Frequest",
"receiveTimestamp": "2025-10-08T10:09:52.581787548Z"
}
Voce di log della risposta
Il seguente esempio mostra una voce di log di risposta di esempio da un'interazione con l'agente che include più messaggi:
{
"insertId": "qe9xxub2t",
"jsonPayload": {
"@type": "type.googleapis.com/google.cloud.cloudaicompanion.logging.v1.ResponseLog",
"taskCompletionResponse": {
"output": {
"messages": [
{
"content": "**Reading File Contents**\n\nI'm currently focused on reading the contents of `/usr/local/google/home/pdec/test.cpp`. This will inform what kind of test needs to be written and how it should be structured.\n\n\n",
"author": "MODEL"
},
{
"author": "MODEL",
"content": "**File Inspection Begins**\n\nI've initiated the process of reading the test file. My immediate goal is to grasp its existing structure and identify the testing framework, if one exists. This will directly influence the design of the new test case I'll be adding.\n\n\n"
},
{
"author": "MODEL",
"content": "Of course. What is the test about? I'll read the file to understand the context."
},
{
"content": "read_file({\"absolute_path\":\"/usr/local/google/home/pdec/test.cpp\"})",
"author": "MODEL"
}
]
}
}
},
"resource": {
"type": "cloudaicompanion.googleapis.com/Instance",
"labels": {
"resource_container": "my-project-id",
"instance_id": "default",
"location": "global"
}
},
"timestamp": "2025-10-08T10:09:52.227354297Z",
"severity": "INFO",
"labels": {
"product": "code_assist",
"request_id": "e60facb1485b17b7",
"user_id": "user@company.com",
"client_version": "unknown",
"method": "CompleteTask",
"client_name": "cloudcode_cli"
},
"logName": "projects/my-project-id/logs/cloudaicompanion.googleapis.com%2Fresponse",
"receiveTimestamp": "2025-10-08T10:09:52.581787548Z"
}
Voce di log dei metadati
Il seguente esempio mostra una voce di log dei metadati di esempio da un'interazione con l'agente:
{
"insertId": "qe9xxub2s",
"jsonPayload": {
"apiRequest": {},
"clientName": "cloudcode_cli",
"requestId": "e60facb1485b17b7",
"@type": "type.googleapis.com/google.cloud.cloudaicompanion.logging.v1.MetadataLog",
"clientVersion": "unknown"
},
"resource": {
"type": "cloudaicompanion.googleapis.com/Instance",
"labels": {
"location": "global",
"instance_id": "default",
"resource_container": "my-project-id"
}
},
"timestamp": "2025-10-08T10:09:52.226420727Z",
"severity": "INFO",
"labels": {
"method": "CompleteTask",
"product": "code_assist",
"user_id": "user@company.com"
},
"logName": "projects/my-project-id/logs/cloudaicompanion.googleapis.com%2Fmetadata",
"receiveTimestamp": "2025-10-08T10:09:52.581787548Z"
}
I seguenti esempi mostrano un altro esempio di voci di log per un'interazione con l'agente, con l'ID richiesta 4b66a582bad9cf2c:
Voce di log della richiesta
{
"insertId": "4qvt8nb2k",
"jsonPayload": {
"taskCompletionRequest": {
"input": {
"messages": [
{
"author": "USER",
"content": "FunctionResponse{name: read_file, response: {\"output\":\"#include <iostream>\\n\\n// Function to calculate the greatest common divisor (GCD) of two numbers.\\nint gcd(int a, int b) {\\n if (b == 0) {\\n return a;\\n }\\n return gcd(b, a % b);\\n}\\n\\n// Function to calculate the least common multiple (LCM) of two numbers.\\nint lcm(int a, int b) {\\n return (a * b) / gcd(a, b);\\n}\\n\\n// Function to check if a number is prime.\\nint is_prime(int a) {\\n if (a < 2) {\\n return 0;\\n }\\n for (int i = 2; i * i <= a; ++i) {\\n if (a % i == 0) {\\n return 0;\\n }\\n }\\n return 1;\\n}\\n\\n// Function for extended Euclidean algorithm.\\nint extended_gcd(int a, int b, int &x, int &y) {\\n if (b == 0) {\\n x = 1;\\n y = 0;\\n return a;\\n }\\n int x1, y1;\\n int d = extended_gcd(b, a % b, x1, y1);\\n x = y1;\\n y = x1 - (a / b) * y1;\\n return d;\\n}\\n\\n// Test function\\nvoid run_tests() {\\n // Test gcd\\n if (gcd(10, 15) == 5) {\\n std::cout << \\\"gcd(10, 15) passed\\\" << std::endl;\\n } else {\\n std::cout << \\\"gcd(10, 15) failed\\\" << std::endl;\\n }\\n\\n // Test lcm\\n if (lcm(10, 15) == 30) {\\n std::cout << \\\"lcm(10, 15) passed\\\" << std::endl;\\n } else {\\n std::cout << \\\"lcm(10, 15) failed\\\" << std::endl;\\n }\\n\\n // Test is_prime\\n if (is_prime(7) == 1) {\\n std::cout << \\\"is_prime(7) passed\\\" << std::endl;\\n } else {\\n std::cout << \\\"is_prime(7) failed\\\" << std::endl;\\n }\\n if (is_prime(10) == 0) {\\n std::cout << \\\"is_prime(10) passed\\\" << std::endl;\\n } else {\\n std::cout << \\\"is_prime(10) failed\\\" << std::endl;\\n }\\n\\n // Test extended_gcd\\n int x, y;\\n int g = extended_gcd(35, 15, x, y);\\n if (g == 5 && 35 * x + 15 * y == g) {\\n std::cout << \\\"extended_gcd(35, 15) passed\\\" << std::endl;\\n } else {\\n std::cout << \\\"extended_gcd(35, 15) failed\\\" << std::endl;\\n }\\n\\n // Test is_prime with 1\\n if (is_prime(1) == 0) {\\n std::cout << \\\"is_prime(1) passed\\\" << std::endl;\\n } else {\\n std::cout << \\\"is_prime(1) failed\\\" << std::endl;\\n }\\n\\n // Test is_prime with 9\\n if (is_prime(9) == 0) {\\n std::cout << \\\"is_prime(9) passed\\\" << std::endl;\\n } else {\\n std::cout << \\\"is_prime(9) failed\\\" << std::endl;\\n }\\n\\n // Test is_prime with 13\\n if (is_prime(13) == 1) {\\n std::cout << \\\"is_prime(13) passed\\\" << std::endl;\\n } else {\\n std::cout << \\\"is_prime(13) failed\\\" << std::endl;\\n }\\n\\n // Test lcm with 7 and 9\\n if (lcm(7, 9) == 63) {\\n std::cout << \\\"lcm(7, 9) passed\\\" << std::endl;\\n } else {\\n std::cout << \\\"lcm(7, 9) failed\\\" << std::endl;\\n }\\n\\n // Test gcd with 12 and 18\\n if (gcd(12, 18) == 6) {\\n std::cout << \\\"gcd(12, 18) passed\\\" << std::endl;\\n } else {\\n std::cout << \\\"gcd(12, 18) failed\\\" << std::endl;\\n }\\n\\n // Test gcd with two primes\\n if (gcd(7, 13) == 1) {\\n std::cout << \\\"gcd(7, 13) passed\\\" << std::endl;\\n } else {\\n std::cout << \\\"gcd(7, 13) failed\\\" << std::endl;\\n }\\n\\n // Test is_prime with 97\\n if (is_prime(97) == 1) {\\n std::cout << \\\"is_prime(97) passed\\\" << std::endl;\\n } else {\\n std::cout << \\\"is_prime(97) failed\\\" << std::endl;\\n }\\n\\n // Test extended_gcd with 48 and 18\\n int x2, y2;\\n int g2 = extended_gcd(48, 18, x2, y2);\\n if (g2 == 6 && 48 * x2 + 18 * y2 == g2) {\\n std::cout << \\\"extended_gcd(48, 18) passed\\\" << std::endl;\\n } else {\\n std::cout << \\\"extended_gcd(48, 18) failed\\\" << std::endl;\\n }\\n\\n // Test gcd with 27 and 18\\n if (gcd(27, 18) == 9) {\\n std::cout << \\\"gcd(27, 18) passed\\\" << std::endl;\\n } else {\\n std::cout << \\\"gcd(27, 18) failed\\\" << std::endl;\\n }\\n // test 999 and 123\\n if (gcd(999, 123) == 3) {\\n std::cout << \\\"gcd(999, 123) passed\\\" << std::endl;\\n } else {\\n std::cout << \\\"gcd(999, 123) failed\\\" << std::endl;\\n }\\n \\n \\n}\\n\\nint main() {\\n run_tests();\\n return 0;\\n}\"}}"
}
],
"preamble": ""
}
},
"@type": "type.googleapis.com/google.cloud.cloudaicompanion.logging.v1.RequestLog"
},
"resource": {
"type": "cloudaicompanion.googleapis.com/Instance",
"labels": {
"resource_container": "my-project-id",
"instance_id": "default",
"location": "global"
}
},
"timestamp": "2025-10-08T10:10:03.457717366Z",
"severity": "INFO",
"labels": {
"request_id": "4b66a582bad9cf2c",
"method": "CompleteTask",
"client_version": "unknown",
"product": "code_assist",
"client_name": "cloudcode_cli",
"user_id": "user@company.com"
},
"logName": "projects/my-project-id/logs/cloudaicompanion.googleapis.com%2Frequest",
"receiveTimestamp": "2025-10-08T10:10:03.606059154Z"
}
Voce di log della risposta
{
"insertId": "4qvt8nb2m",
"jsonPayload": {
"taskCompletionResponse": {
"output": {
"messages": [
{
"author": "MODEL",
"content": "**Testing the functions**\\n\\nI'm focusing on adding a new test case to `test.cpp`. The existing `run_tests` function is a great starting point. I'm considering which function to test further – maybe `extended_gcd`? I'll review the current tests for that function and then devise a new test scenario to add.\\n\\n\\n"
},
{
"author": "MODEL",
"content": "**Evaluating LCM Test**\\n\\nI've finalized the new test case for the `lcm` function within the `test.cpp` file. I'm adding a test for `lcm(12, 18)` to confirm the result is 36. I plan to use the `replace` command to inject this new test directly before the closing brace of the `run_tests` function. I've identified a unique line in `test.cpp` as the anchor for replacement.\\n\\n\\n"
},
{
"author": "MODEL",
"content": "**Inserting the new test**\\n\\nI've created a test case for `lcm(12, 18)`, confirming the expected result of 36. To implement this, I'm targeting the `run_tests` function. I'll use the `replace` command and will search the end of the `run_tests` function to inject the new test, right before the closing brace. I'm ready to implement this and confirm that it passes.\\n\\n\\n"
},
{
"author": "MODEL",
"content": "I've reviewed the file. I'll add a test case for the `lcm` function with inputs 12 and 18."
},
{
"content": "replace({\"file_path\":\"/usr/local/google/home/pdec/test.cpp\",\"instruction\":\"add a test for the lcm function with 12 and 18\",\"new_string\":\" // test 999 and 123\\n if (gcd(999, 123) == 3) {\\n std::cout << \\\"gcd(999, 123) passed\\\" << std::endl;\\n } else {\\n std::cout << \\\"gcd(999, 123) failed\\\" << std::endl;\\n }\\n \\n // Test lcm with 12 and 18\\n if (lcm(12, 18) == 36) {\\n std::cout << \\\"lcm(12, 18) passed\\\" << std::endl;\\n } else {\\n std::cout << \\\"lcm(12, 18) failed\\\" << std::endl;\\n }\\n \\n}\",\"old_string\":\" // test 999 and 123\\n if (gcd(999, 123) == 3) {\\n std::cout << \\\"gcd(999, 123) passed\\\" << std::endl;\\n } else {\\n std::cout << \\\"gcd(999, 123) failed\\\" << std::endl;\\n }\\n \\n \\n}\"})",
"author": "MODEL"
}
]
}
},
"@type": "type.googleapis.com/google.cloud.cloudaicompanion.logging.v1.ResponseLog"
},
"resource": {
"type": "cloudaicompanion.googleapis.com/Instance",
"labels": {
"location": "global",
"resource_container": "my-project-id",
"instance_id": "default"
}
},
"timestamp": "2025-10-08T10:10:03.461137399Z",
"severity": "INFO",
"labels": {
"client_name": "cloudcode_cli",
"client_version": "unknown",
"method": "CompleteTask",
"request_id": "4b66a582bad9cf2c",
"product": "code_assist",
"user_id": "user@company.com"
},
"logName": "projects/my-project-id/logs/cloudaicompanion.googleapis.com%2Fresponse",
"receiveTimestamp": "2025-10-08T10:10:03.606059154Z"
}
Voce di log dei metadati
{
"insertId": "4qvt8nb2l",
"jsonPayload": {
"clientVersion": "unknown",
"apiRequest": {},
"clientName": "cloudcode_cli",
"requestId": "4b66a582bad9cf2c",
"@type": "type.googleapis.com/google.cloud.cloudaicompanion.logging.v1.MetadataLog"
},
"resource": {
"type": "cloudaicompanion.googleapis.com/Instance",
"labels": {
"resource_container": "my-project-id",
"location": "global",
"instance_id": "default"
}
},
"timestamp": "2025-10-08T10:10:03.459902984Z",
"severity": "INFO",
"labels": {
"product": "code_assist",
"user_id": "user@company.com",
"method": "CompleteTask"
},
"logName": "projects/my-project-id/logs/cloudaicompanion.googleapis.com%2Fmetadata",
"receiveTimestamp": "2025-10-08T10:10:03.606059154Z"
}
Risposte di Gemini per Google Cloud
La tabella seguente mostra i campi e le descrizioni delle risposte di Gemini per Google Cloud e:
| Campo | Valori e note |
|---|---|
LogEntry.resource.type |
Tipo di risorsa di Gemini per Google Cloud : cloudaicompanion.googleapis.com/Instance. |
LogEntry.resource.labels.resource_container |
ID univoco del container di risorse in cui è stato utilizzato Gemini per Google Cloud . |
LogEntry.resource.labels.location |
Posizione in cui è stato utilizzato Gemini per Google Cloud |
LogEntry.resource.labels.instance_id |
ID univoco della risorsa in cui è stato utilizzato Gemini per Google Cloud |
LogEntry.labels.method |
Può essere uno dei seguenti, a seconda di cosa ha richiamato logEntry:CompleteTask: ad esempio, una richiesta di chat da Gemini Code Assist o da un altro servizio Gemini per Google Cloud service.GenerateCode: ad esempio, una richiesta di generazione di codice, come una richiesta di trasformazione del codice in Gemini Code Assist.CompleteCode: ad esempio, una richiesta di completamento del codice quando si lavora nell'IDE, come con i suggerimenti in linea in Gemini Code Assist. |
LogEntry.labels.product |
Nome del servizio Gemini per Google Cloud . Se il prodotto Gemini per è Gemini Code Assist, questo valore è code_assist. Google Cloud Se il prodotto Gemini per Google Cloud è Gemini Cloud Assist, questo valore è cloud_assist. In caso contrario, questo valore è unknown. |
LogEntry.labels.request_id |
Un identificatore univoco per correlare una richiesta a una voce di log di risposta. |
LogEntry.labels.user_id |
L'identificatore dell'utente che ha avviato questa richiesta. |
LogEntry.jsonPayload |
Il payload della voce di log. Tutte le citazioni delle fonti utilizzate per generare la risposta sono incluse in questo oggetto come attribution_context. |
LogEntry.logName |
Identifica il log. |
Log dei metadati di Gemini per Google Cloud
Affinché i log dei metadati vengano generati, l'impostazione di telemetria dell'estensione Gemini Code Assist deve essere abilitata sia per le estensioni VS Code che per IntelliJ.
I log dei metadati di Gemini per Google Cloud seguono la stessa struttura dei log di Gemini per Google Cloud , ma specificano campi diversi. La tabella seguente mostra un elenco dei campi presenti in una voce di log delle richieste utente:
| Campo | Valori e note |
|---|---|
LogEntry.@type |
Tipo di risorsa dei metadati di Gemini per Google Cloud : type.googleapis.com/google.cloud.cloudaicompanion.logging.v1.MetadataLog. |
LogEntry.labels.method |
Per i log dei metadati, il valore di questa etichetta è Export.Metrics. |
LogEntry.labels.product |
Nome del servizio Gemini per Google Cloud . Se il prodotto Gemini per è Gemini Code Assist, questo valore è code_assist. Google Cloud Se il prodotto Gemini per Google Cloud è Gemini Cloud Assist, questo valore è cloud_assist. In caso contrario, questo valore è unknown. |
LogEntry.labels.user_id |
L'identificatore dell'utente che ha avviato questa richiesta. |
LogEntry.jsonPayload |
Indica un evento codeExposure o un evento code.Acceptance. Un evento codeExposure indica l'esposizione di un suggerimento di codice a un utente. Un evento code.Acceptance indica che l'utente ha accettato in qualche modo il codice, ad esempio digitandolo, premendo il tasto Tab o accettandolo completamente. |
LogEntry.jsonPayload.clientName |
Il nome dell'IDE, ad esempio CloudCodeVscode. |
LogEntry.jsonPayload.clientVersion |
Il numero di versione dell'IDE. |
LogEntry.jsonPayload.codeAcceptance |
Solo per gli IDE VS Code e IntelliJ, indica che l'utente ha accettato in qualche modo il codice, ad esempio digitandolo, premendo il tasto Tab o accettandolo completamente. Include anche i seguenti campi:
|
LogEntry.jsonPayload.codeExposure |
Solo per gli IDE VS Code e IntelliJ, indica che un suggerimento di codice è stato esposto a un utente. Include anche i seguenti campi:
|
LogEntry.jsonPayload.chatExposure |
Indica che una risposta di chat è stata esposta a un utente. Include anche i seguenti campi:
|
LogEntry.jsonPayload.chatAcceptance |
Indica che l'utente ha accettato in qualche modo i blocchi di codice nella risposta di chat. Include anche i seguenti campi:
|
Il seguente esempio mostra una voce di log codeExposure di esempio:
{
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"
}
Il seguente esempio mostra una voce di log codeAcceptance di esempio:
{
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"
}
Il seguente esempio mostra una voce di log chatAcceptance di esempio:
{
"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"
}
Il seguente esempio mostra una voce di log chatExposure di esempio:
{
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"
}
Calcolare la percentuale di accettazione
Le sezioni seguenti descrivono come calcolare la percentuale di accettazione dei suggerimenti di codice , la percentuale di accettazione delle risposte di chat e la percentuale di accettazione combinata totale utilizzando i log dei metadati di Gemini Code Assist.
Calcolare la percentuale di accettazione del codice
Per calcolare la percentuale di accettazione del codice utilizzando i log dei metadati di Gemini Code Assist, trova il numero totale di ID univoci dagli eventi con
codeAcceptance.originalRequestId e dividilo per il numero totale di ID univoci
dagli eventi con codeExposure.originalRequestId.
Puoi perfezionare ulteriormente questo calcolo in base al linguaggio di programmazione e all'utente utilizzando i rispettivi campi degli eventi dei log dei metadati.
Calcolare la percentuale di accettazione della chat
Per calcolare la percentuale di accettazione della chat utilizzando i log dei metadati di Gemini Code Assist, trova il numero totale di ID univoci dagli eventi con
chatAcceptance.originalRequestId e dividilo per il numero totale di ID univoci
dagli eventi con chatExposure.originalRequestId.
Puoi perfezionare ulteriormente questo calcolo in base al linguaggio di programmazione e all'utente utilizzando i rispettivi campi degli eventi dei log dei metadati.
Calcolare la percentuale di accettazione totale
Per calcolare la percentuale di accettazione totale utilizzando i log dei metadati di Gemini Code Assist, trova il numero totale di eventi accettati e dividilo per il numero totale di eventi di esposizione:
Percentuale di accettazione totale = Eventi accettati totali ÷ Eventi di esposizione totali
- Eventi accettati totali: il numero totale di ID univoci dagli eventi con
codeAcceptance.originalRequestIdpiù il numero totale di ID univoci dagli eventi conchatAcceptance.originalRequestId. - Eventi di esposizione totali: il numero totale di ID univoci dagli eventi con
codeExposure.originalRequestIdpiù il numero totale di ID univoci dagli eventi conchatExposure.originalRequestId.
Questa formula fornisce una percentuale di accettazione che riflette la probabilità complessiva che un suggerimento venga accettato in tutte le funzionalità di Gemini Code Assist.
Calcolare le righe di codice accettate
Le sezioni seguenti descrivono come calcolare il numero di righe di codice accettate dai suggerimenti di codice, il numero di righe di codice accettate dalla chat e il numero totale di righe di codice accettate utilizzando i log dei metadati di Gemini Code Assist.
Calcolare le righe di codice accettate
Per calcolare le righe di codice accettate, trova il valore massimo di
codeAcceptance.linesCount per ogni codeAcceptance.originalRequestId univoco.
Poi, somma questi valori massimi per calcolare il numero totale di righe di codice accettate.
Puoi perfezionare ulteriormente questo calcolo in base al linguaggio di programmazione e all'utente utilizzando i rispettivi campi degli eventi dei log dei metadati.
Calcolare le righe di codice accettate dalla chat
Per calcolare le righe di codice accettate dalla chat, trova il valore del
chatAcceptance.linesCount campo per ogni
chatAcceptance.originalRequestId univoco. Poi, somma questi valori massimi per calcolare
il numero totale di righe di chat accettate.
Calcolare il numero totale di righe di codice accettate
Per calcolare il numero totale di righe accettate utilizzando i log dei metadati di Gemini Code Assist, somma le righe di codice accettate e le righe di codice accettate dalla chat.
Passaggi successivi
- Scopri come visualizzare, analizzare e monitorare i log in Google Cloud.
- Scopri di più su monitoraggio dell'utilizzo di Gemini per Google Cloud.