Visualizzare i log di Gemini

Questo documento descrive come attivare la raccolta e lo stoccaggio delle attività di Gemini for Google Cloud , tra cui:

  • Gemini per Google Cloud prompt e log delle risposte, ad esempio input utente, informazioni contestuali e risposte.
  • Gemini per i Google Cloud log dei metadati, ad esempio i metadati della telemetria e le righe di codice accettate dall'utente.

Gemini per Google Cloud non raccoglie né invia a Cloud Logging altre interazioni dell'utente con Gemini per 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 prompt o risposte in Gemini in Vertex AI. Per attivare i log per Gemini in Vertex AI, consulta Attivare gli audit log di accesso ai dati.

I ruoli IAM (Identity and Access Management) controllano la possibilità per un entità di accedere ai log. Puoi concedere ai principali ruoli predefiniti o creare ruoli personalizzati. Per ulteriori informazioni sulle autorizzazioni richieste, consulta Controllo dell'accesso.

Per impostazione predefinita, Cloud Logging cripta i contenuti dei clienti archiviati at-rest. I dati archiviati nei bucket di log da Logging vengono criptati utilizzando chiavi di crittografia delle chiavi, una procedura nota come crittografia envelope. L'accesso ai dati di log 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 di crittografia avanzati, normativi o relativi alla conformità che la nostra crittografia a riposo 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 farlo.

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

I dati dei log registrati da Gemini in Google Cloud includono le interazioni degli utenti con i seguenti prodotti:
  • Gemini Code Assist all'interno dell'IDE.

Prima di iniziare

Attivare Gemini per il Google Cloud logging

Contatta l' Google Cloud assistenza o il tuo Google Cloud rappresentante con l'ID progetto per cui vuoi attivare Gemini per il Google Cloud logging, Gemini per il Google Cloud logging dei metadati o entrambi.

Visualizza i log utente e i log dei metadati di Gemini for Google Cloud

Per visualizzare i log degli utenti e i log dei metadati di Gemini, effettua una delle seguenti operazioni: Google Cloud

Console Google Cloud

  1. Nella console Google Cloud, vai alla pagina Esplora log:

    Vai a Esplora log

    Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Logging.

  2. Nella barra degli strumenti, seleziona un progetto della console Google Cloud.
  3. Nella barra degli strumenti, espandi il menu Tutte le risorse e seleziona la risorsa Istanza complementare Cloud AI.

Google Cloud CLI

Esegui questo comando:

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

Gemini per i Google Cloud log

Un LogEntry è l'unità di base dei 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 utente e risposte di Gemini for Google Cloud .

Richieste da parte degli utenti

La tabella seguente mostra un elenco dei campi trovati in una voce del log delle richieste degli utenti.

Campo Valori e note
LogEntry.resource.type Gemini per Google Cloud tipo di risorsa: cloudaicompanion.googleapis.com/Instance.
LogEntry.resource.labels.resource_container ID univoco del contenitore delle 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 invocato logEntry:

CompleteTask: ad esempio, una richiesta di chat da Gemini Code Assist o da un altro servizio Gemini per Google Cloud .

GenerateCode: ad esempio, una richiesta di generazione di codice, ad esempio con una richiesta di trasformazione del codice in Gemini Code Assist.

CompleteCode: ad esempio, una richiesta di completamento del codice quando si lavora nell'IDE, ad esempio con i suggerimenti in linea in Gemini Code Assist.
LogEntry.labels.product Gemini per il Google Cloud nome del servizio. 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 del 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 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": "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"
}

L'esempio seguente mostra una voce RequestLog di esempio per i prompt automatici di suggerimento di codice in linea e per prompt di Gemini Google Cloud in un file di codice.

I dati del 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": "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"
}

Gemini per le Google Cloud risposte

La tabella seguente mostra i campi di risposta e le descrizioni di Gemini per Google Cloud .

Campo Valori e note
LogEntry.resource.type Gemini per Google Cloud tipo di risorsa: cloudaicompanion.googleapis.com/Instance.
LogEntry.resource.labels.resource_container ID univoco del contenitore delle 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 invocato logEntry:

CompleteTask: ad esempio, una richiesta di chat da Gemini Code Assist o da un altro servizio Gemini per Google Cloud .

GenerateCode: ad esempio, una richiesta di generazione di codice, ad esempio con una richiesta di trasformazione del codice in Gemini Code Assist.

CompleteCode: ad esempio, una richiesta di completamento del codice quando si lavora nell'IDE, ad esempio con i suggerimenti in linea in Gemini Code Assist.
LogEntry.labels.product Gemini per il Google Cloud nome del servizio. 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 del log di risposta.
LogEntry.labels.user_id L'identificatore dell'utente che ha avviato questa richiesta.
LogEntry.jsonPayload Il payload della voce di log. Eventuali 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 sia per quelle IntelliJ. Inoltre, per VS Code deve essere attivata anche l'impostazione di raccolta della telemetria globale.

I log dei Google Cloud metadati di Gemini forseguono la stessa struttura dei log di Gemini, ma specificano campi diversi. Google Cloud La tabella seguente mostra un elenco di campi trovati in una voce del log delle richieste utente:

Campo Valori e note
LogEntry.@type Tipo di risorsa dei Google Cloud metadati di Gemini: type.googleapis.com/google.cloud.cloudaicompanion.logging.v1.MetadataLog.
LogEntry.labels.method Per i log dei metadati, questo valore dell'etichetta è Export.Metrics.
LogEntry.labels.product Gemini per il Google Cloud nome del servizio. 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 si è verificato un evento di accettazione da parte dell'utente, ad esempio sovrascrittura, tabulazione o accettazione completa.
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 si è verificato un evento di accettazione da parte dell'utente, ad esempio sovrascrittura, tabulazione o accettazione completa. Sono inclusi anche i seguenti campi:
  • linesCount: il numero totale di righe di codice accettate dall'utente.
  • commentLinesCount: il numero di righe di commento nel codice accettato dall'utente. Questa proprietà viene visualizzata solo se Gemini Code Assist è in grado di determinare quante delle righe accettate sono righe di commento.
  • originalRequestId: un identificatore che collega un evento codeExposure a zero o più eventi codeAcceptance. Questo può essere utilizzato per calcolare le misure relative al tasso di accettazione e alle righe di codice accettate.
  • programmingLanguage: il linguaggio di programmazione del codice accettato, ad esempio python.
LogEntry.jsonPayload.codeExposure Solo per gli IDE VS Code e IntelliJ, indica che è stata rilevata l'esposizione di un suggerimento di codice a un utente. Sono inclusi anche i seguenti campi:
  • programmingLanguage: linguaggio di programmazione dell'esposizione, ad esempio python.
  • originalRequestId: un identificatore che collega un evento codeExposure a zero o più eventi codeAcceptance. Questo può essere utilizzato per calcolare le misure relative al tasso di accettazione e alle righe di codice accettate.
LogEntry.jsonPayload.chatExposure Indica che una risposta di chat è stata esposta a un utente. Include anche il seguente campo:
  • originalRequestId: un identificatore che collega un evento chatExposure a zero o più eventi codeAcceptance o codeExposure. Questo può essere utilizzato per calcolare le misure relative al tasso di accettazione e alle righe di codice accettate.

L'esempio seguente 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"
}

L'esempio seguente 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"
} 

L'esempio seguente 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 il tasso di accettazione dei codici

Per calcolare il tasso di accettazione utilizzando i log dei metadati di Gemini Code Assist, trova il numero totale di ID univoci degli eventi concodeAcceptance.originalRequestId e dividilo per il numero totale di ID univoci degli eventi concodeExposure.originalRequestId. Puoi perfezionare ulteriormente questo calcolo in base al linguaggio di programmazione e all'utente utilizzando i rispettivi campi 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. Aggiungi il valore linesCount per tutti gli eventi codeAcceptance finali per ogni originalRequestId 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 Evento log dei metadati.

Passaggi successivi