Gemini für Google Cloud-Logs ansehen

In diesem Dokument wird beschrieben, wie Sie die Erfassung und Speicherung von Gemini für Google Cloud -Aktivitäten aktivieren können. Dazu gehören die Folgenden:

  • Gemini für Google Cloud -Prompts und Antwortlogs, z. B. Nutzereingaben, Kontextinformationen und Antworten.
  • Gemini für Google Cloud -Metadatenlogs, z. B. Telemetriemetadaten und vom Nutzer akzeptierte Codezeilen.

Wenn Sie Gemini Code Assist-Messwerte generieren müssen, lesen Sie den Abschnitt Gemini für Google Cloud -Nutzung überwachen.

Gemini für Google Cloud erfasst oder sendet keine anderen Nutzerinteraktionen, die der Nutzer möglicherweise mit Gemini für Google Cloudhatte, einschließlich schriftlichen Feedbacks, an Cloud Logging. Die erhobenen Daten werden zur Speicherung an Cloud Logging gesendet. Sie können diese Daten aufrufen, indem Sie nach Logeinträgen mit dem Ressourcentyp cloudaicompanion.googleapis.com/Instance suchen.

Bei dieser Funktion werden keine Prompts oder Antworten in Gemini in Vertex AI protokolliert. Informationen zum Aktivieren von Logs für Gemini in Vertex AI finden Sie unter Audit-Logs zum Datenzugriff aktivieren.

IAM-Rollen (Identity and Access Management, Identitäts- und Zugriffsverwaltung) steuern, ob ein Hauptkonto auf Logs zugreifen kann. Sie können Hauptkonten vordefinierte Rollen zuweisen oder benutzerdefinierte Rollen erstellen. Weitere Informationen zu erforderlichen Berechtigungen finden Sie unter Zugriffssteuerung.

In Cloud Logging werden inaktive Kundendaten standardmäßig verschlüsselt. In Log-Buckets von Logging gespeicherte Daten werden mit Schlüsselverschlüsselungsschlüsseln verschlüsselt. Dieser Vorgang wird als Envelope-Verschlüsselung bezeichnet. Der Zugriff auf Ihre Logging-Daten erfordert den Zugriff auf diese Schlüsselverschlüsselungsschlüssel, die Google für Sie verwaltet, ohne dass Sie etwas tun müssen.

Ihr Unternehmen hat möglicherweise rechtliche, Compliance-bezogene oder erweiterte Verschlüsselungsanforderungen, die unsere Standardverschlüsselung ruhender Daten nicht erfüllt. Anstatt die Verschlüsselungsschlüssel, die Ihre Daten schützen, von Google verwalten zu lassen, können Sie Ihre Schlüssel selbst verwalten.

Weitere Informationen zur Verwendung von vom Kunden verwalteten Verschlüsselungsschlüsseln (Customer-Managed Encryption Keys, CMEK) einschließlich der Vorteile und Einschränkungen finden Sie unter Vom Kunden verwaltete Verschlüsselungsschlüssel.

Beschränkungen

Die Aufzeichnung von Logdaten für Gemini in Google Cloud ist auf Nutzerinteraktionen mit Gemini Code Assist in der IDE beschränkt.

Vorbereitung

Gemini für Google Cloud -Nutzerlogs und Metadatenlogs aufrufen

So rufen Sie Gemini für Google Cloud -Nutzerlogs und Metadatenlogs auf:

Console

  1. Rufen Sie in der Google Cloud Console die Seite Log-Explorer auf:

    Zum Log-Explorer

    Wenn Sie diese Seite über die Suchleiste suchen, wählen Sie das Ergebnis aus, dessen Zwischenüberschrift Logging ist.

  2. Wählen Sie in der Symbolleiste ein Google Cloud Console-Projekt aus.
  3. Maximieren Sie in der Symbolleiste das Menü Alle Ressourcen und wählen Sie die Ressource Cloud AI Companion-Instanz aus.

gcloud

Führen Sie dazu diesen Befehl aus:

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

Ersetzen Sie PROJECT_ID durch die ID des Projekts, dessen Gemini für Google Cloud -Logs Sie aufrufen möchten.

API

  1. Erstellen Sie eine JSON-Datei, die folgende Informationen enthält:

      {
        "resourceNames": [
          "projects/PROJECT_ID"
        ],
        "pageSize": 5,
        "filter": "resource.type: cloudaicompanion.googleapis.com/Instance"
      }
    

    Ersetzen Sie PROJECT_ID durch die ID des Projekts, dessen Gemini für Google Cloud -Logs Sie aufrufen möchten.

  2. Authentifizierungstoken abrufen:

    TOKEN=$(gcloud auth print-access-token)
    
  3. Verwenden Sie cURL, um die Methode entries.list aufzurufen:

    curl -X POST --data-binary @JSON_FILE_NAME \
      -H "Authorization: Bearer $TOKEN" \
      -H "Content-Type: application/json" \
      "https://logging.googleapis.com/v2/entries:list"

    Ersetzen Sie JSON_FILE_NAME durch den Pfad zur JSON-Datei, die Sie im vorherigen Schritt erstellt haben.

    Weitere Informationen zur Authentifizierung finden Sie unter Für die Verwendung von REST authentifizieren.

    Die Antwort gibt eine Reihe von Logeinträgen zurück.

Gemini für Google Cloud -Logs

Ein LogEntry ist die Grundeinheit für Daten in Cloud Logging. In den folgenden Abschnitten finden Sie Listen der Felder, die im LogEntry für ein Gemini für Google Cloud -Plattformereignis enthalten sind, z. B. Nutzeranfragen und Gemini für Google Cloud -Antworten.

Nutzeranforderungen

In der folgenden Tabelle finden Sie eine Liste der Felder, die in einem Logeintrag für Nutzeranfragen enthalten sind:

Feld Werte und Hinweise
LogEntry.resource.type Ressourcentyp von Gemini für Google Cloud : cloudaicompanion.googleapis.com/Instance.
LogEntry.resource.labels.resource_container Eindeutige ID des Ressourcencontainers, in dem Gemini für Google Cloud verwendet wurde.
LogEntry.resource.labels.location Standort, an dem Gemini für Google Cloud verwendet wurde.
LogEntry.resource.labels.instance_id Eindeutige ID der Ressource, in der Gemini für Google Cloud verwendet wurde.
LogEntry.labels.method Kann je nach Aufruf von logEntry einer der folgenden Werte sein:

CompleteTask: z. B. eine Chatanfrage von Gemini Code Assist oder einem anderen Gemini für Google Cloud -Dienst.

GenerateCode: z. B. eine Anfrage zum Generieren von Code, etwa mit einer Code-Transformation in Gemini Code Assist.

CompleteCode: z. B. eine Anfrage zum Vervollständigen von Code bei der Arbeit in der IDE, etwa mit Inline-Vorschlägen in Gemini Code Assist.
LogEntry.labels.product Gemini für Google Cloud -Dienstname. Wenn das Gemini für Google Cloud -Produkt Gemini Code Assist ist, lautet dieser Wert code_assist. Wenn das Gemini für Google Cloud -Produkt Gemini Cloud Assist ist, lautet dieser Wert cloud_assist. Andernfalls ist dieser Wert unknown.
LogEntry.labels.request_id Eine eindeutige Kennung, um eine Anfrage mit einem Antwortlogeintrag zu korrelieren.
LogEntry.labels.user_id Die Kennung des Nutzers, der diese Anfrage initiiert hat.
LogEntry.jsonPayload Die Nutzlast des Logeintrags.
LogEntry.logName Identifiziert das Log.

Das folgende Beispiel zeigt einen Logeintrag für ein Chat-Prompt-Ereignis:

{
  "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"
}

Das folgende Beispiel zeigt einen Beispiel-RequestLog-Eintrag für automatische Vorschläge für Inline-Code-Prompts und erstellt einen Prompt für Gemini für Google Cloud in einer Codedatei.

Für Prompt-Daten für Inline-Codevorschläge wird das codeCompletionRequest-Objekt verwendet (siehe folgendes Beispiel), während für die manuell ausgelöste Generierung codeGenerationRequest verwendet wird.

{
  "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"
}

Interaktionsprotokolle von KI-Agenten

Bei einigen Interaktionen mit Gemini können für eine einzelne Nutzeraktion mehrere Logeinträge (Anfrage, Antwort und Metadaten) generiert werden. Beispiele für solche Interaktionen:

  • Ein KI-Agent führt eine Aufgabe aus, bei der Tools verwendet werden (z. B. wenn das Modell interne Funktionen wie read_file oder replace aufruft, wie in den Logbeispielen gezeigt).
  • Ein KI-Agent interagiert mit anderen KI-Agenten.
Anfrage-Logeintrag

Das folgende Beispiel zeigt einen Logeintrag für eine Anfrage, die eine Interaktion mit einem KI-Agenten initiiert:

{
  "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"
}
Antwort-Logeintrag

Das folgende Beispiel zeigt einen Logeintrag für eine Antwort aus einer Interaktion mit einem KI-Agenten mit mehreren Nachrichten:

{
  "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"
}
Metadaten-Logeintrag

Das folgende Beispiel zeigt einen Logeintrag mit Metadaten aus der Interaktion mit einem KI-Agenten:

{
  "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"
}

Die folgenden Beispiele zeigen weitere Logeinträge für eine Interaktion mit einem KI-Agenten mit der Anfrage-ID 4b66a582bad9cf2c:

Anfrage-Logeintrag

{
  "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"
}

Antwort-Logeintrag

{
  "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"
}

Metadaten-Logeintrag

{
  "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"
}

Antworten von Gemini für Google Cloud

In der folgenden Tabelle finden Sie die Antwortfelder und Beschreibungen für Gemini für Google Cloud :

Feld Werte und Hinweise
LogEntry.resource.type Ressourcentyp von Gemini für Google Cloud : cloudaicompanion.googleapis.com/Instance.
LogEntry.resource.labels.resource_container Eindeutige ID des Ressourcencontainers, in dem Gemini für Google Cloud verwendet wurde.
LogEntry.resource.labels.location Standort, an dem Gemini für Google Cloud verwendet wurde.
LogEntry.resource.labels.instance_id Eindeutige ID der Ressource, in der Gemini für Google Cloud verwendet wurde.
LogEntry.labels.method Kann je nach Aufruf von logEntry einer der folgenden Werte sein:

CompleteTask: z. B. eine Chatanfrage von Gemini Code Assist oder einem anderen Gemini für Google Cloud -Dienst.

GenerateCode: z. B. eine Anfrage zum Generieren von Code, etwa mit einer Code-Transformation in Gemini Code Assist.

CompleteCode: z. B. eine Anfrage zum Vervollständigen von Code bei der Arbeit in der IDE, etwa mit Inline-Vorschlägen in Gemini Code Assist.
LogEntry.labels.product Gemini für Google Cloud -Dienstname. Wenn das Gemini für Google Cloud -Produkt Gemini Code Assist ist, lautet dieser Wert code_assist. Wenn das Gemini für Google Cloud -Produkt Gemini Cloud Assist ist, lautet dieser Wert cloud_assist. Andernfalls ist dieser Wert unknown.
LogEntry.labels.request_id Eine eindeutige Kennung, um eine Anfrage mit einem Antwortlogeintrag zu korrelieren.
LogEntry.labels.user_id Die Kennung des Nutzers, der diese Anfrage initiiert hat.
LogEntry.jsonPayload Die Nutzlast des Logeintrags. Alle Quellenangaben, die zum Generieren der Antwort verwendet wurden, sind in diesem Objekt als attribution_context enthalten.
LogEntry.logName Identifiziert das Log.

Metadatenlogs für Gemini für Google Cloud

Damit die Metadatenlogs generiert werden, muss die Telemetrieeinstellung der Gemini Code Assist-Erweiterung sowohl für VS Code- als auch für IntelliJ-Erweiterungen aktiviert sein. Außerdem muss für VS Code die globale Einstellung für die Erfassung von Telemetriedaten aktiviert sein.

Gemini für Google Cloud -Metadatenlogs haben dieselbe Struktur wie Gemini für Google Cloud -Logs, aber es werden unterschiedliche Felder angegeben. In der folgenden Tabelle finden Sie eine Liste der Felder, die in einem Logeintrag für Nutzeranfragen enthalten sind:

Feld Werte und Hinweise
LogEntry.@type Ressourcentyp von Gemini für Google Cloud -Metadaten: type.googleapis.com/google.cloud.cloudaicompanion.logging.v1.MetadataLog.
LogEntry.labels.method Bei Metadatenlogs ist dieser Labelwert Export.Metrics.
LogEntry.labels.product Gemini für Google Cloud -Dienstname. Wenn das Gemini für Google Cloud -Produkt Gemini Code Assist ist, lautet dieser Wert code_assist. Wenn das Gemini für Google Cloud -Produkt Gemini Cloud Assist ist, lautet dieser Wert cloud_assist. Andernfalls ist dieser Wert unknown.
LogEntry.labels.user_id Die Kennung des Nutzers, der diese Anfrage initiiert hat.
LogEntry.jsonPayload Gibt entweder ein codeExposure- oder ein code.Acceptance-Ereignis an. Ein codeExposure-Ereignis gibt an, dass einem Nutzer ein Codevorschlag präsentiert wurde. Ein code.Acceptance-Ereignis gibt an, dass der Nutzer eine Aktion zur Annahme ausgeführt hat, z. B. durch Eingabe, Tabulator oder vollständige Annahme.
LogEntry.jsonPayload.clientName Der Name der IDE, z. B. CloudCodeVscode.
LogEntry.jsonPayload.clientVersion Die IDE-Versionsnummer.
LogEntry.jsonPayload.codeAcceptance Gilt nur für VS Code- und IntelliJ-IDEs. Gibt an, dass der Nutzer ein Ereignis zur Übernahme ausgelöst hat, z. B. durch Überschreiben, Tabulator oder vollständige Übernahme. Enthält auch die folgenden Felder:
  • linesCount: Die Gesamtzahl der vom Nutzer akzeptierten Codezeilen.
  • commentLinesCount: die Anzahl der Kommentarzeilen im vom Nutzer akzeptierten Code. Dieses Attribut wird nur angezeigt, wenn Gemini Code Assist ermitteln kann, wie viele der akzeptierten Zeilen Kommentarzeilen sind.
  • originalRequestId: Eine Kennung, die ein codeExposure-Ereignis mit null oder mehr codeAcceptance-Ereignissen verknüpft. Damit können die Akzeptanzrate und die Anzahl der akzeptierten Codezeilen berechnet werden.
  • programmingLanguage: Programmiersprache des akzeptierten Codes, z. B. python.
LogEntry.jsonPayload.codeExposure Gilt nur für VS Code- und IntelliJ-IDEs. Gibt an, dass einem Nutzer eine Codevorschlag angezeigt wurde. Enthält auch die folgenden Felder:
  • programmingLanguage: Programmiersprache der Einblendung, z. B. python.
  • originalRequestId: Eine Kennung, die ein codeExposure-Ereignis mit null oder mehr codeAcceptance-Ereignissen verknüpft. Damit können die Akzeptanzrate und die Anzahl der akzeptierten Codezeilen berechnet werden.
LogEntry.jsonPayload.chatExposure Gibt an, dass einem Nutzer eine Chatantwort präsentiert wurde. Enthält auch die folgenden Felder:
  • originalRequestId: Eine Kennung, die ein chatExposure-Ereignis mit null oder mehr chatAcceptance-Ereignissen verknüpft. Damit können die Chat-Akzeptanzrate und die Anzahl der akzeptierten Chatzeilen berechnet werden.
  • is_agentic: Eine Kennung, die angibt, ob „chatExposure“ aus dem KI-Agentenmodus stammt. Damit können die Akzeptanzrate für den KI-Agentenmodus und den Nicht-KI-Agentenmodus sowie die Anzahl der akzeptierten Codezeilen unterschieden werden.
LogEntry.jsonPayload.chatAcceptance Gibt an, dass der Nutzer ein Ereignis zur Übernahme für die Codeblöcke in der Chatantwort ausgelöst hat. Enthält auch die folgenden Felder:
  • interactionType: die Art der Interaktion des Nutzers mit dem Codeblock, z. B. ACCEPT_CODE_BLOCK.
  • programmingLanguage: Programmiersprache des akzeptierten Codes, z. B. python.
  • linesCount: Die Gesamtzahl der vom Nutzer akzeptierten Codezeilen.
  • originalRequestId: Eine Kennung, die ein chatExposure-Ereignis mit null oder mehr chatAcceptance-Ereignissen verknüpft.
  • is_agentic: Eine Kennung, die angibt, ob die Chat-Annahme aus dem KI-Agentenmodus stammt. Damit können die Akzeptanzrate für den KI-Agentenmodus und den Nicht-KI-Agentenmodus sowie die Anzahl der akzeptierten Codezeilen unterschieden werden.

Das folgende Beispiel zeigt einen codeExposure-Logeintrag:

{
  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"
}

Das folgende Beispiel zeigt einen codeAcceptance-Logeintrag:

{
  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"
} 

Das folgende Beispiel zeigt einen chatAcceptance-Logeintrag:

{
  "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"
}

Das folgende Beispiel zeigt einen chatExposure-Logeintrag:

{
  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"
}

Akzeptanzrate berechnen

In den folgenden Abschnitten wird beschrieben, wie Sie mithilfe von Metadatenlogs von Gemini Code Assist die Akzeptanzrate für Codevorschläge, die Akzeptanzrate für Chatantworten und die kombinierte Gesamtakzeptanzrate berechnen.

Code-Akzeptanzrate berechnen

Zur Berechnung der Code-Akzeptanzrate anhand von Metadatenlogs von Gemini Code Assist ermitteln Sie die Gesamtzahl der eindeutigen IDs aus Ereignissen mit codeAcceptance.originalRequestId und teilen sie durch die Gesamtzahl der eindeutigen IDs aus Ereignissen mit codeExposure.originalRequestId.

Sie können diese Berechnung weiter verfeinern, indem Sie die entsprechenden Metadatenlog-Ereignisfelder nach Programmiersprache und Nutzer filtern.

Chat-Akzeptanzrate berechnen

Zur Berechnung der Chat-Akzeptanzrate auf Grundlage der Metadatenlogs von Gemini Code Assist ermitteln Sie die Gesamtzahl der eindeutigen IDs aus Ereignissen mit chatAcceptance.originalRequestId und teilen sie durch die Gesamtzahl der eindeutigen IDs aus Ereignissen mit chatExposure.originalRequestId.

Sie können diese Berechnung weiter verfeinern, indem Sie die entsprechenden Metadatenlog-Ereignisfelder nach Programmiersprache und Nutzer filtern.

Gesamtakzeptanzrate berechnen

Zur Berechnung der Gesamtakzeptanzrate auf Grundlage der Metadatenlogs von Gemini Code Assist ermitteln Sie die Gesamtzahl der akzeptierten Ereignisse und teilen sie durch die Gesamtzahl der Exposure-Ereignisse:

Gesamtakzeptanzrate = Gesamtzahl der akzeptierten Ereignisse ÷ Gesamtzahl der Exposure-Ereignisse

  • Insgesamt akzeptierte Ereignisse: Die Gesamtzahl der eindeutigen IDs aus Ereignissen mit codeAcceptance.originalRequestId plus die Gesamtzahl der eindeutigen IDs aus Ereignissen mit chatAcceptance.originalRequestId.
  • Gesamtzahl der Exposure-Ereignisse: Die Gesamtzahl der eindeutigen IDs aus Ereignissen mit codeExposure.originalRequestId plus die Gesamtzahl der eindeutigen IDs aus Ereignissen mit chatExposure.originalRequestId.

Diese Formel liefert eine Akzeptanzrate, die die Gesamtwahrscheinlichkeit widerspiegelt, mit der ein Vorschlag für alle Gemini Code Assist-Funktionen akzeptiert wird.

Anzahl der akzeptierten Codezeilen berechnen

In den folgenden Abschnitten wird beschrieben, wie Sie die Anzahl der Codezeilen berechnen, die aus Codevorschlägen und aus dem Chat akzeptiert wurden, sowie die Gesamtzahl der Codezeilen, die mit Gemini Code Assist-Metadatenlogs akzeptiert wurden.

Anzahl der akzeptierten Codezeilen berechnen

Zur Berechnung der Anzahl der akzeptierten Codezeilen suchen Sie den Maximalwert für codeAcceptance.linesCount für eine eindeutige codeAcceptance.originalRequestId. Addieren Sie dann diese Maximalwerte, um die Gesamtzahl der akzeptierten Codezeilen zu berechnen.

Sie können diese Berechnung weiter verfeinern, indem Sie die entsprechenden Metadatenlog-Ereignisfelder nach Programmiersprache und Nutzer filtern.

Anzahl der akzeptierten Codezeilen aus einem Chat berechnen

Zur Berechnung der Anzahl der akzeptierten Codezeilen aus einem Chat suchen Sie den Wert des Felds chatAcceptance.linesCount für jede eindeutige chatAcceptance.originalRequestId. Addieren Sie dann diese Höchstwerte, um die Gesamtzahl der akzeptierten Chatzeilen zu berechnen.

Gesamtzahl der akzeptierten Codezeilen berechnen

Zur Berechnung der Gesamtzahl der akzeptierten Zeilen auf Grundlage der Metadatenlogs von Gemini Code Assist addieren Sie die Anzahl der akzeptierten Codezeilen und die Anzahl der akzeptierten Codezeilen aus dem Chat.

Weitere Informationen