查看 Gemini 中的 Google Cloud 記錄

本文說明如何啟用 Gemini for Google Cloud 活動記錄的收集和儲存功能,包括:

  • Gemini for Google Cloud 提示和回覆記錄,例如使用者輸入內容、背景資訊和回覆。
  • Gemini for Google Cloud 中繼資料記錄,例如遙測中繼資料和使用者接受的程式碼行數。

如要生成 Gemini Code Assist 指標,請參閱「監控 Gemini for Google Cloud 用量」。

Gemini for Google Cloud 不會收集或傳送使用者與 Gemini for Google Cloud的任何其他互動 (包括書面意見回饋) 至 Cloud Logging。收集到的資料會傳送至 Cloud Logging 儲存。如要查看這項資料,請搜尋資源類型為 cloudaicompanion.googleapis.com/Instance 的記錄項目。

這項功能不會記錄 Vertex AI 中 Gemini 的提示或回覆。如要在 Vertex AI 中啟用 Gemini 的記錄,請參閱「啟用資料存取稽核記錄」。

主體是否能存取記錄,取決於 Identity and Access Management (IAM) 角色。您可以將預先定義的角色授予主體,也可以建立自訂角色。如要進一步瞭解必要權限,請參閱存取權控管

根據預設,Cloud Logging 會加密靜態儲存的客戶內容。Logging 會使用金鑰加密金鑰,對儲存在記錄檔儲存空間中的資料進行加密,這個程序稱為「信封式加密」。如要存取記錄資料,必須存取這些金鑰加密金鑰,而 Google 會代您管理這些金鑰,您不必採取任何動作。

貴機構可能需要符合法規、法規遵循或進階加密要求,而預設的靜態加密機制無法滿足這些需求。為滿足貴機構的需求,您可以管理用來保護資料的加密金鑰,而不是由 Google 管理。

如要進一步瞭解如何使用客戶管理的加密金鑰 (CMEK),包括優點和限制,請參閱「客戶管理的加密金鑰」。

限制

Gemini in Google Cloud 記錄的記錄資料僅限於使用者在 IDE 中與 Gemini Code Assist 的互動。

事前準備

查看 Gemini for Google Cloud 使用者記錄和中繼資料記錄

如要查看 Gemini for Google Cloud 使用者記錄和中繼資料記錄,請執行下列任一操作:

主控台

  1. 前往 Google Cloud 控制台的「Logs Explorer」頁面:

    前往「Logs Explorer」(記錄檔探索工具)

    如果您是使用搜尋列尋找這個頁面,請選取子標題為「Logging」的結果

  2. 在工具列中選取 Google Cloud 控制台專案。
  3. 在工具列中展開「所有資源」選單,然後選取「Cloud AI Companion Instance」資源。

gcloud

執行下列指令:

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

PROJECT_ID 替換為要查看 Gemini for Google Cloud 記錄的專案 ID。

API

  1. 建立包含下列資訊的 JSON 檔案:

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

    PROJECT_ID 替換為要查看 Gemini for Google Cloud 記錄的專案 ID。

  2. 取得驗證權杖

    TOKEN=$(gcloud auth print-access-token) 
  3. 使用 cURL 呼叫 entries.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"

    JSON_FILE_NAME 替換為您在上一個步驟中建立的 JSON 檔案路徑。

    如要進一步瞭解驗證,請參閱「使用 REST 進行驗證」。

    回應會傳回一組記錄項目。

Gemini for Google Cloud logs

LogEntry 是 Cloud Logging 中的基本資料單位。以下各節列出 Gemini for Google Cloud 平台事件 (例如使用者要求Gemini for Google Cloud 回覆) 的 LogEntry 欄位。

使用者要求數

下表列出使用者要求記錄項目中的欄位。

欄位 值和備註
LogEntry.resource.type Gemini for Google Cloud 資源類型cloudaicompanion.googleapis.com/Instance
LogEntry.resource.labels.resource_container 使用 Gemini for Google Cloud 的資源容器專屬 ID。
LogEntry.resource.labels.location 使用 Gemini for Google Cloud 的地點。
LogEntry.resource.labels.instance_id 使用 Gemini for Google Cloud 的資源專屬 ID。
LogEntry.labels.method 視呼叫 logEntry 的內容而定,可以是下列其中一種:

CompleteTask:例如來自 Gemini Code Assist 或其他 Gemini for Google Cloud 服務的即時通訊要求。

GenerateCode:例如生成程式碼的要求,像是 Gemini Code Assist 內的程式碼轉換要求。

CompleteCode:例如在 IDE 中工作時完成程式碼的要求,像是 Gemini Code Assist 內的內嵌建議
LogEntry.labels.product 「服務名稱」 Google Cloud 專用 Gemini。如果 Gemini for Google Cloud 產品是 Gemini Code Assist,則這個值為 code_assist。如果 Gemini for Google Cloud 產品是 Gemini Cloud Assist,這個值就是 cloud_assist。否則,此值為 unknown
LogEntry.labels.request_id 專屬 ID,用於將要求與回應記錄項目建立關聯。
LogEntry.labels.user_id 啟動這項要求的使用者 ID。
LogEntry.jsonPayload 記錄項目的酬載。
LogEntry.logName 識別記錄。

以下範例顯示聊天提示事件的記錄項目。

{   "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": "[email protected]"   },   "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" } 

以下範例顯示自動內嵌程式碼建議提示和提示 Gemini 產生程式碼檔案 Google Cloud 的範例 RequestLog 項目。

內嵌程式碼建議的提示資料會使用 codeCompletionRequest 物件 (如下列範例所示),手動觸發的生成作業則會使用 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": "[email protected]"   },   "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 for Google Cloud 回覆

下表列出 Gemini for Google Cloud 回應欄位和說明。

欄位 值和備註
LogEntry.resource.type Gemini for Google Cloud 資源類型cloudaicompanion.googleapis.com/Instance
LogEntry.resource.labels.resource_container 使用 Gemini for Google Cloud 的資源容器專屬 ID。
LogEntry.resource.labels.location 使用 Gemini for Google Cloud 的地點。
LogEntry.resource.labels.instance_id 使用 Gemini for Google Cloud 的資源專屬 ID。
LogEntry.labels.method 視呼叫 logEntry 的內容而定,可以是下列其中一種:

CompleteTask:例如來自 Gemini Code Assist 或其他 Gemini for Google Cloud 服務的即時通訊要求。

GenerateCode:例如生成程式碼的要求,像是 Gemini Code Assist 內的程式碼轉換要求。

CompleteCode:例如在 IDE 中工作時完成程式碼的要求,像是 Gemini Code Assist 內的內嵌建議
LogEntry.labels.product 「服務名稱」 Google Cloud 專用 Gemini。如果 Gemini for Google Cloud 產品是 Gemini Code Assist,則這個值為 code_assist。如果 Gemini for Google Cloud 產品是 Gemini Cloud Assist,這個值就是 cloud_assist。否則,此值為 unknown
LogEntry.labels.request_id 專屬 ID,用於將要求與回應記錄項目建立關聯。
LogEntry.labels.user_id 啟動這項要求的使用者 ID。
LogEntry.jsonPayload 記錄項目的酬載。用來生成回覆的任何來源引用內容,都會以 attribution_context 形式納入這個物件。
LogEntry.logName 識別記錄。

Gemini for Google Cloud 中繼資料記錄

如要生成中繼資料記錄,請為 VS Code 和 IntelliJ 擴充功能啟用 Gemini Code Assist 擴充功能遙測設定。此外,如果是使用 VS Code,也必須啟用全域遙測資料收集設定

Gemini for Google Cloud 中繼資料記錄的結構與 Gemini for Google Cloud 記錄相同,但指定了不同的欄位。下表列出使用者要求記錄項目中的欄位:

欄位 值和備註
LogEntry.@type Gemini for Google Cloud metadata resource typetype.googleapis.com/google.cloud.cloudaicompanion.logging.v1.MetadataLog
LogEntry.labels.method 如果是中繼資料記錄,這個標籤值為 Export.Metrics
LogEntry.labels.product 「服務名稱」 Google Cloud 專用 Gemini。如果 Gemini for Google Cloud 產品是 Gemini Code Assist,則這個值為 code_assist。如果 Gemini for Google Cloud 產品是 Gemini Cloud Assist,這個值就是 cloud_assist。否則,此值為 unknown
LogEntry.labels.user_id 啟動這項要求的使用者 ID。
LogEntry.jsonPayload 指出是 codeExposure 事件還是 code.Acceptance 事件。codeExposure 事件表示向使用者顯示程式碼建議。code.Acceptance 事件表示使用者接受了某些內容,例如輸入、按 Tab 鍵或完全接受。
LogEntry.jsonPayload.clientName IDE 名稱,例如 CloudCodeVscode
LogEntry.jsonPayload.clientVersion IDE 版本號碼。
LogEntry.jsonPayload.codeAcceptance 僅適用於 VS Code 和 IntelliJ IDE,表示使用者接受了建議,例如輸入、按下 Tab 鍵或完全接受建議。也包含下列欄位:
  • linesCount:使用者接受的程式碼總行數。
  • commentLinesCount:使用者接受的程式碼中的註解行數。只有在 Gemini Code Assist 能夠判斷接受的程式碼行數中有多少是註解行時,才會顯示這項屬性。
  • originalRequestId:將 codeExposure 事件連結至零或多個 codeAcceptance 事件的 ID。這項資料可用於計算接受率接受的程式碼行數
  • programmingLanguage:接受的程式碼所用的程式設計語言,例如 python
LogEntry.jsonPayload.codeExposure 僅適用於 VS Code 和 IntelliJ IDE,表示系統向使用者顯示程式碼建議。也包含下列欄位:
  • programmingLanguage:曝光的程式設計語言,例如 python
  • originalRequestId:將 codeExposure 事件連結至零或多個 codeAcceptance 事件的 ID。這項資料可用於計算接受率接受的程式碼行數
LogEntry.jsonPayload.chatExposure 表示使用者看到聊天室回覆。也包含下列欄位:
  • originalRequestId:將 chatExposure 事件連結至零或多個 codeAcceptancecodeExposure 事件的 ID。這項資料可用於計算接受率接受的程式碼行數
LogEntry.jsonPayload.chatAcceptance 表示使用者在聊天回覆中的程式碼區塊上,執行了某項接受事件。也包含下列欄位:
  • interactionType:使用者與程式碼區塊的互動類型,例如 ACCEPT_CODE_BLOCK
  • programmingLanguage:接受的程式碼所用的程式設計語言,例如 python
  • linesCount:使用者接受的程式碼總行數。
  • originalRequestId:將 chatExposure 事件連結至零或多個 chatAcceptance 事件的 ID。

以下範例顯示 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: "[email protected]"   }   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" } 

以下範例顯示 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: "[email protected]"   }   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" }  

以下範例顯示 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": "[email protected]"   },   "logName": "projects/my-project-id/logs/cloudaicompanion.googleapis.com%2Fmetadata",   "receiveTimestamp": "2025-08-25T09:34:01.704925625Z" } 

以下範例顯示 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: "[email protected]"   }   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" } 

計算代碼接受率

如要使用 Gemini Code Assist 中繼資料記錄計算接受率,請找出事件中 codeAcceptance.originalRequestId 的不重複 ID 總數,然後除以事件中 codeExposure.originalRequestId 的不重複 ID 總數。您可以使用相應的中繼資料記錄事件欄位,依程式設計語言和使用者進一步調整這項計算。

計算接受的程式碼行數

如要計算接受的程式碼行數,請找出不重複 codeAcceptance.originalRequestIdcodeAcceptance.linesCount 最大值。然後,為每個originalRequestId的所有最終 codeAcceptance 事件新增 linesCount 值,計算接受的程式碼總行數。您可以使用相應的中繼資料記錄事件欄位,依程式設計語言和使用者進一步調整這項計算。

後續步驟