查看 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 的互動。

此外,如果使用者關閉 VS Code 遙測設定,Gemini for Google Cloud 就不會記錄中繼資料。不過,如果管理員啟用提示和回覆記錄功能,系統仍會產生提示和回覆記錄。

事前準備

查看 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 記錄

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

以下範例顯示自動內嵌程式碼建議提示和提示 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": "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 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。這項資料可用於計算接受率接受的程式碼行數

以下範例顯示 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"
}

以下範例顯示 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"
} 

以下範例顯示 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"
}

計算代碼接受率

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

計算接受的程式碼行數

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

後續步驟