Ce document explique comment activer la collecte et le stockage de l'activité Gemini pour Google Cloud , y compris les éléments suivants :
- Journaux des requêtes et des réponses de Gemini pour Google Cloud , tels que les saisies utilisateur, les informations contextuelles et les réponses.
- Journaux de métadonnées Gemini pour Google Cloud , tels que les métadonnées de télémétrie et les lignes de code acceptées par l'utilisateur.
Si vous devez générer des métriques Gemini Code Assist, consultez Surveiller l'utilisation de Gemini pour Google Cloud .
Gemini pour Google Cloud ne collecte ni n'envoie à Cloud Logging aucune autre interaction utilisateur avec Gemini pour Google Cloud, y compris les commentaires écrits. Les données collectées sont envoyées à Cloud Logging pour être stockées. Vous pouvez examiner ces données en recherchant les entrées de journal avec le type de ressource cloudaicompanion.googleapis.com/Instance
.
Cette fonctionnalité n'enregistre pas les requêtes ni les réponses dans Gemini sur Vertex AI. Pour activer les journaux pour Gemini dans Vertex AI, consultez Activer les journaux d'audit des accès aux données.
Les rôles Identity and Access Management (IAM) contrôlent la capacité d'un compte principal à accéder aux journaux. Vous pouvez attribuer des rôles prédéfinis aux comptes principaux ou créer des rôles personnalisés. Pour en savoir plus sur les autorisations requises, consultez Contrôle des accès.
Par défaut, Cloud Logging chiffre le contenu client stocké au repos. Les données stockées dans les buckets de journaux par Logging sont chiffrées à l'aide de clés de chiffrement de clés, un processus appelé chiffrement encapsulé. L'accès à vos données de journalisation nécessite l'accès à ces clés de chiffrement de clé, qui sont gérées par Google gère sans aucune action de votre part.
Votre organisation peut avoir des exigences de chiffrement réglementaires, de conformité ou avancées que notre chiffrement au repos par défaut ne fournit pas. Pour répondre aux exigences de votre organisation, vous n'avez pas besoin de gérer les clés de chiffrement qui protègent vos données. Google peut configurer CMEK pour contrôler et gérer votre propre chiffrement.
Pour en savoir plus sur l'utilisation des clés de chiffrement gérées par le client (CMEK), y compris leurs avantages et leurs limites, consultez Clés de chiffrement gérées par le client.
Limites
L'enregistrement des données de journaux Gemini dans Google Cloud est limité aux interactions des utilisateurs avec Gemini Code Assist dans l'IDE.
De plus, si l'utilisateur final désactive le paramètre de télémétrie VS Code, Gemini pour Google Cloud ne consigne pas les métadonnées. Toutefois, les journaux des requêtes et des réponses sont toujours générés lorsque les administrateurs activent la journalisation des requêtes et des réponses.
Avant de commencer
-
Pour obtenir les autorisations nécessaires pour afficher les journaux Gemini pour Google Cloud , demandez à votre administrateur de vous accorder le rôle IAM Lecteur de journaux (
roles/logging.viewer
) sur votre projet. Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.
Consultez les tarifs de Cloud Logging et les tarifs de Gemini pour Google Cloud avant d'activer la journalisation de Gemini pour Google Cloud .
Afficher les journaux utilisateur et les journaux de métadonnées Gemini pour Google Cloud
Pour afficher les journaux utilisateur et les journaux de métadonnées de Gemini pour Google Cloud , procédez comme suit :
Console
-
Dans la console Google Cloud , accédez à la page Explorateur de journaux.
Accéder à l'explorateur de journaux
Si vous utilisez la barre de recherche pour trouver cette page, sélectionnez le résultat dont le sous-titre est Logging.
- Dans la barre d'outils, sélectionnez un projet de la console Google Cloud .
- Dans la barre d'outils, développez le menu Toutes les ressources et sélectionnez la ressource Instance Cloud AI Companion.
gcloud
Exécutez la commande suivante :
gcloud logging read "resource.type=cloudaicompanion.googleapis.com/Instance" --project PROJECT_ID --limit 3
Remplacez PROJECT_ID
par l'ID du projet dont vous souhaitez afficher les journaux Gemini pour Google Cloud .
API
Créez un fichier JSON contenant les informations suivantes :
{ "resourceNames": [ "projects/PROJECT_ID" ], "pageSize": 5, "filter": "resource.type: cloudaicompanion.googleapis.com/Instance" }
Remplacez
PROJECT_ID
par l'ID du projet dont vous souhaitez afficher les journaux Gemini pour Google Cloud .Obtenez un jeton d'authentification :
TOKEN=$(gcloud auth print-access-token)
Utilisez
cURL
pour appeler la méthodeentries.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"
Remplacez
JSON_FILE_NAME
par le chemin d'accès au fichier JSON que vous avez créé à l'étape précédente.Pour en savoir plus sur l'authentification, consultez S'authentifier pour utiliser REST.
La réponse renvoie un ensemble d'entrées de journal.
Journaux Gemini pour Google Cloud
Un LogEntry
est l'unité de base des données dans Cloud Logging. Les sections suivantes fournissent des listes de champs trouvés dans LogEntry
pour un événement de plate-forme Gemini pour Google Cloud , tel que les requêtes utilisateur et les réponses Gemini pour Google Cloud .
Demandes des utilisateurs
Le tableau suivant présente la liste des champs figurant dans une entrée de journal de requête utilisateur.
Champ | Valeurs et notes |
---|---|
LogEntry.resource.type |
Gemini pour le type de ressource Google Cloud : cloudaicompanion.googleapis.com/Instance . |
LogEntry.resource.labels.resource_container |
ID unique du conteneur de ressources dans lequel Gemini pour Google Cloud a été utilisé. |
LogEntry.resource.labels.location |
Lieu où Gemini pour Google Cloud a été utilisé. |
LogEntry.resource.labels.instance_id |
ID unique de la ressource dans laquelle Gemini pour Google Cloud a été utilisé. |
LogEntry.labels.method |
Il peut s'agir de l'une des options suivantes, selon ce qui a déclenché logEntry :CompleteTask : par exemple, une demande de chat provenant de Gemini Code Assist ou d'un autre service Gemini pour Google Cloud .GenerateCode : par exemple, une demande de génération de code, comme une demande de transformation de code dans Gemini Code Assist.CompleteCode : par exemple, une demande de saisie semi-automatique de code lorsque vous travaillez dans l'IDE, comme avec les suggestions intégrées dans Gemini Code Assist. |
LogEntry.labels.product |
Gemini pour le nom du service Google Cloud . Si le produit Gemini pour Google Cloud est Gemini Code Assist, cette valeur est code_assist . Si le produit Gemini pour Google Cloud est Gemini Cloud Assist, cette valeur est cloud_assist . Sinon, cette valeur est unknown . |
LogEntry.labels.request_id |
Identifiant unique permettant de mettre en corrélation une requête avec une entrée de journal de réponse. |
LogEntry.labels.user_id |
Identifiant de l'utilisateur qui a lancé cette requête. |
LogEntry.jsonPayload |
Charge utile de l'entrée de journal. |
LogEntry.logName |
Identifie le journal. |
L'exemple suivant montre une entrée de journal pour un événement d'invite de chat.
{
"insertId": "654581e30003b19e340bbd96",
"resource": {
"type": "cloudaicompanion.googleapis.com/Instance",
"labels": {
instance_id: "default"
location: "global"
resource_container: "my-project-id"
}
},
"timestamp": "2023-11-03T23:27:31.242078Z",
"labels": {
"product": "code_assist",
"request_id": "4ea1e265-ea5d-4d11-b3c8-39bad9c96326"
"user_id": "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'exemple suivant montre une entrée RequestLog
pour les requêtes de suggestion de code intégré automatique et demander à Gemini Google Cloud dans un fichier de code.
Les données d'invite pour les suggestions de code intégrées utilisent l'objet codeCompletionRequest
(comme indiqué dans l'exemple suivant), tandis que la génération déclenchée manuellement utilise 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"
}
Réponses de Gemini pour Google Cloud
Le tableau suivant présente les champs de réponse et les descriptions de Gemini pour Google Cloud .
Champ | Valeurs et notes |
---|---|
LogEntry.resource.type |
Gemini pour le type de ressource Google Cloud : cloudaicompanion.googleapis.com/Instance . |
LogEntry.resource.labels.resource_container |
ID unique du conteneur de ressources dans lequel Gemini pour Google Cloud a été utilisé. |
LogEntry.resource.labels.location |
Lieu où Gemini pour Google Cloud a été utilisé. |
LogEntry.resource.labels.instance_id |
ID unique de la ressource dans laquelle Gemini pour Google Cloud a été utilisé. |
LogEntry.labels.method |
Il peut s'agir de l'une des options suivantes, selon ce qui a déclenché logEntry :CompleteTask : par exemple, une demande de chat provenant de Gemini Code Assist ou d'un autre service Gemini pour Google Cloud .GenerateCode : par exemple, une demande de génération de code, comme une demande de transformation de code dans Gemini Code Assist.CompleteCode : par exemple, une demande de saisie semi-automatique de code lorsque vous travaillez dans l'IDE, comme avec les suggestions intégrées dans Gemini Code Assist. |
LogEntry.labels.product |
Gemini pour le nom du service Google Cloud . Si le produit Gemini pour Google Cloud est Gemini Code Assist, cette valeur est code_assist . Si le produit Gemini pour Google Cloud est Gemini Cloud Assist, cette valeur est cloud_assist . Sinon, cette valeur est unknown . |
LogEntry.labels.request_id |
Identifiant unique permettant de mettre en corrélation une requête avec une entrée de journal de réponse. |
LogEntry.labels.user_id |
Identifiant de l'utilisateur qui a lancé cette requête. |
LogEntry.jsonPayload |
Charge utile de l'entrée de journal. Toutes les citations de sources utilisées pour générer la réponse sont incluses dans cet objet en tant que attribution_context . |
LogEntry.logName |
Identifie le journal. |
Journaux de métadonnées Gemini pour Google Cloud
Pour que les journaux de métadonnées soient générés, le paramètre de télémétrie de l'extension Gemini Code Assist doit être activé pour les extensions VS Code et IntelliJ. De plus, pour VS Code, le paramètre de collecte globale de la télémétrie doit également être activé.
Les journaux de métadonnées Gemini pour Google Cloud suivent la même structure que les journaux Gemini pour Google Cloud , mais spécifient des champs différents. Le tableau suivant présente la liste des champs figurant dans une entrée de journal de requête utilisateur :
Champ | Valeurs et notes |
---|---|
LogEntry.@type |
Métadonnées Gemini pour le type de ressource Google Cloud : type.googleapis.com/google.cloud.cloudaicompanion.logging.v1.MetadataLog . |
LogEntry.labels.method |
Pour les journaux de métadonnées, la valeur de ce libellé est Export.Metrics . |
LogEntry.labels.product |
Gemini pour le nom du service Google Cloud . Si le produit Gemini pour Google Cloud est Gemini Code Assist, cette valeur est code_assist . Si le produit Gemini pour Google Cloud est Gemini Cloud Assist, cette valeur est cloud_assist . Sinon, cette valeur est unknown . |
LogEntry.labels.user_id |
Identifiant de l'utilisateur qui a lancé cette requête. |
LogEntry.jsonPayload |
Indique un événement codeExposure ou code.Acceptance . Un événement codeExposure indique qu'une suggestion de code a été présentée à un utilisateur. Un événement code.Acceptance indique qu'un événement d'acceptation a eu lieu de la part de l'utilisateur, comme une saisie, une tabulation ou une acceptation complète. |
LogEntry.jsonPayload.clientName |
Nom de l'IDE, par exemple CloudCodeVscode . |
LogEntry.jsonPayload.clientVersion |
Numéro de version de l'IDE. |
LogEntry.jsonPayload.codeAcceptance |
Pour les IDE VS Code et IntelliJ uniquement, indique qu'un événement d'acceptation a eu lieu de la part de l'utilisateur (par exemple, une saisie, une tabulation ou une acceptation complète). Il inclut également les champs suivants :
|
LogEntry.jsonPayload.codeExposure |
Pour les IDE VS Code et IntelliJ uniquement, indique qu'une suggestion de code a été présentée à un utilisateur. Il inclut également les champs suivants :
|
LogEntry.jsonPayload.chatExposure |
Indique qu'une réponse de chat a été présentée à un utilisateur. Il inclut également le champ suivant :
|
L'exemple suivant montre une entrée de journal 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"
}
L'exemple suivant montre une entrée de journal 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"
}
L'exemple suivant montre une entrée de journal 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"
}
Calculer le taux d'acceptation du code
Pour calculer le taux d'acceptation à l'aide des journaux de métadonnées Gemini Code Assist, recherchez le nombre total d'ID uniques à partir des événements avec codeAcceptance.originalRequestId
et divisez-le par le nombre total d'ID uniques à partir des événements avec codeExposure.originalRequestId
. Vous pouvez affiner ce calcul par langage de programmation et par utilisateur à l'aide des champs d'événement de journal de métadonnées correspondants.
Calculer les lignes de code acceptées
Pour calculer les lignes de code acceptées, recherchez la valeur maximale de codeAcceptance.linesCount
pour un codeAcceptance.originalRequestId
unique.
Ensuite, ajoutez la valeur linesCount
pour tous les événements codeAcceptance
finaux pour chaque originalRequestId
afin de calculer le nombre total de lignes de code acceptées. Vous pouvez affiner ce calcul par langage de programmation et par utilisateur à l'aide des champs de métadonnées correspondants dans les événements de journaux.
Étapes suivantes
- Découvrez comment afficher, analyser et surveiller vos journaux dans Google Cloud.
- Découvrez comment surveiller l'utilisation de Gemini pour Google Cloud.