Questo documento descrive come attivare la raccolta e l'archiviazione dell'attività di Gemini per Google Cloud , tra cui:
- Gemini per Google Cloud prompt e log delle risposte, ad esempio input utente, informazioni contestuali e risposte.
- Gemini per i log dei metadati Google Cloud , come i metadati di telemetria e le righe di codice accettate dall'utente.
Se devi generare metriche di Gemini Code Assist, consulta Monitorare l'utilizzo di Gemini Google Cloud .
Gemini in Google Cloud non raccoglie né invia a
Cloud Logging altre interazioni che l'utente potrebbe aver avuto con
Gemini in Google Cloud, incluso il feedback scritto. 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 prompt o risposte in Gemini in Vertex AI. Per abilitare i log per Gemini in Vertex AI, consulta Abilita gli audit log di accesso ai dati.
I ruoli Identity and Access Management (IAM) controllano la capacità di un principal di accedere ai log. Puoi concedere ruoli predefiniti alle entità o creare ruoli personalizzati. Per ulteriori informazioni sulle autorizzazioni richieste, vedi Controllo dell'accesso.
Per impostazione predefinita, Cloud Logging cripta i contenuti inattivi dei clienti. I dati archiviati nei bucket dei log da Logging vengono criptati utilizzando 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 tuo conto senza che tu debba fare nulla.
La tua organizzazione potrebbe avere requisiti normativi, di conformità o di crittografia avanzata che la nostra crittografia statica predefinita non fornisce. Per soddisfare i requisiti della tua organizzazione, puoi gestire le chiavi di crittografia che proteggono i tuoi dati, anziché lasciare che sia Google a gestirle.
Per informazioni specifiche sull'utilizzo delle chiavi di crittografia gestite dal cliente (CMEK), inclusi vantaggi e limitazioni, vedi Chiavi di crittografia gestite dal cliente.
Limitazioni
La registrazione dei dati di log di Gemini in Google Cloud è limitata alle interazioni degli utenti con Gemini Code Assist all'interno dell'IDE.
Prima di iniziare
-
Per ottenere le autorizzazioni necessarie per visualizzare i log di Gemini in Google Cloud , chiedi all'amministratore di concederti il ruolo IAM Visualizzatore log (
roles/logging.viewer
) sul 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 di Gemini per Google Cloud prima di attivare Gemini per la registrazione. Google Cloud
Visualizzare i log utente e i log dei metadati di Gemini per Google Cloud
Per visualizzare i log utente e i log dei metadati di Gemini, esegui una delle seguenti operazioni: Google Cloud
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 console Google Cloud .
- Nella barra degli strumenti, espandi il menu Tutte le risorse e seleziona la risorsa Istanza 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 in Google Cloud .
API
Crea un file JSON contenente le seguenti informazioni:
{ "resourceNames": [ "projects/PROJECT_ID" ], "pageSize": 5, "filter": "resource.type: cloudaicompanion.googleapis.com/Instance" }
Sostituisci
PROJECT_ID
con l'ID del progetto di cui vuoi visualizzare i log di Gemini in Google Cloud .Ottieni un token di autenticazione:
TOKEN=$(gcloud auth print-access-token)
Utilizza
cURL
per chiamare il metodoentries.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"
Sostituisci
JSON_FILE_NAME
con il percorso del file JSON che hai creato nel passaggio precedente.Per ulteriori informazioni sull'autenticazione, consulta Autenticazione per l'utilizzo di REST.
La risposta restituisce un insieme di voci di log.
Gemini per i log di Google Cloud
Un LogEntry
è l'unità di base di
dati in Cloud Logging. Le sezioni seguenti forniscono elenchi di campi trovati
in LogEntry
per un evento della piattaforma Gemini for Google Cloud , ad esempio
richieste degli utenti e risposte di Gemini for 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 |
Gemini per il tipo di risorsa Google Cloud : cloudaicompanion.googleapis.com/Instance . |
LogEntry.resource.labels.resource_container |
ID univoco del contenitore 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 in 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 un altro servizio Gemini for Google Cloud .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 |
Gemini per [nome del servizio] Google Cloud . Se il prodotto Gemini per Google Cloud è Gemini Code Assist, questo valore è code_assist . 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 per un evento di prompt della 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
per i prompt di
suggerimento di codice in linea
automatici e
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"
}
Risposte di Gemini per Google Cloud
La tabella seguente mostra i campi di risposta e le descrizioni di Gemini in Google Cloud .
Campo | Valori e note |
---|---|
LogEntry.resource.type |
Gemini per il tipo di risorsa Google Cloud : cloudaicompanion.googleapis.com/Instance . |
LogEntry.resource.labels.resource_container |
ID univoco del contenitore 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 in 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 un altro servizio Gemini for Google Cloud .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 |
Gemini per [nome del servizio] Google Cloud . Se il prodotto Gemini per Google Cloud è Gemini Code Assist, questo valore è code_assist . 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. |
Gemini per i log dei metadati di Google Cloud
Affinché vengano generati i log dei metadati, l'impostazione di telemetria dell'estensione Gemini Code Assist deve essere abilitata per le estensioni VS Code e IntelliJ. Inoltre, per VS Code deve essere attivata anche l'impostazione di raccolta della telemetria globale.
I log dei metadati di Gemini per Google Cloud seguono la stessa struttura dei log diGemini per Google Cloud , ma specificano campi diversi. La tabella seguente mostra un elenco di campi trovati in una voce di log della richiesta utente:
Campo | Valori e note |
---|---|
LogEntry.@type |
Tipo di risorsa metadati di Gemini for 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 |
Gemini per [nome del servizio] Google Cloud . Se il prodotto Gemini per Google Cloud è Gemini Code Assist, questo valore è code_assist . 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 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, ad esempio digitando, premendo il tasto Tab o accettando 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 eseguito un evento di accettazione, ad esempio la digitazione, la tabulazione o l'accettazione completa. Include anche i seguenti campi:
|
LogEntry.jsonPayload.codeExposure |
Solo per gli IDE VS Code e IntelliJ, indica che un utente ha visualizzato un suggerimento di codice. Include anche i seguenti campi:
|
LogEntry.jsonPayload.chatExposure |
Indica che una risposta della chat è stata mostrata a un utente. Include anche il seguente campo:
|
LogEntry.jsonPayload.chatAcceptance |
Indica che l'utente ha accettato i blocchi di codice nella risposta della chat. Include anche i seguenti campi:
|
Il seguente esempio mostra una voce di log 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"
}
Il seguente esempio mostra una voce di log 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"
}
Il seguente esempio mostra una voce di log 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"
}
Il seguente esempio mostra una voce di log 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"
}
Calcolare il tasso di accettazione del codice
Per calcolare il tasso di accettazione utilizzando i log dei metadati di Gemini Code Assist, trova il numero totale di ID univoci degli eventi con codeAcceptance.originalRequestId
e dividilo per il numero totale di ID univoci degli eventi con codeExposure.originalRequestId
. Puoi perfezionare ulteriormente questo calcolo in base al linguaggio di programmazione e all'utente utilizzando i rispettivi campi dell'evento di log dei metadati.
Calcolare le righe di codice accettate
Per calcolare le righe di codice accettate, trova il valore massimo per
codeAcceptance.linesCount
per un codeAcceptance.originalRequestId
univoco.
Poi, aggiungi il valore linesCount
per tutti gli eventi codeAcceptance
finali per ogni
originalRequestId
per calcolare le righe di codice totali accettate. Puoi
perfezionare ulteriormente questo calcolo in base al linguaggio di programmazione e all'utente utilizzando i
rispettivi campi degli eventi di log dei metadati.
Passaggi successivi
- Scopri come visualizzare, analizzare e monitorare i log in Google Cloud.
- Scopri di più sul monitoraggio dell'utilizzo di Gemini per Google Cloud.