查看 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": "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 值,計算接受的程式碼總行數。您可以使用相應的中繼資料記錄事件欄位,依程式設計語言和使用者進一步調整這項計算。

後續步驟