本文說明如何啟用 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 記錄所需的權限,請要求管理員授予您專案的記錄檢視者 (
roles/logging.viewer
) 身分與存取權管理角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。 啟用 Gemini for Logging Google Cloud 前,請先查看 Cloud Logging 定價和 Gemini for Google Cloud 定價。
查看 Gemini for Google Cloud 使用者記錄和中繼資料記錄
如要查看 Gemini for Google Cloud 使用者記錄和中繼資料記錄,請執行下列任一操作:
主控台
-
前往 Google Cloud 控制台的「Logs Explorer」頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「Logging」的結果。
- 在工具列中,選取 Google Cloud 控制台專案。
- 在工具列中展開「所有資源」選單,然後選取「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
建立包含下列資訊的 JSON 檔案:
{ "resourceNames": [ "projects/PROJECT_ID" ], "pageSize": 5, "filter": "resource.type: cloudaicompanion.googleapis.com/Instance" }
將
PROJECT_ID
替換為要查看 Gemini for Google Cloud 記錄的專案 ID。取得驗證權杖:
TOKEN=$(gcloud auth print-access-token)
使用
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 type:type.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 鍵或完全接受建議。也包含下列欄位: |
LogEntry.jsonPayload.codeExposure |
僅適用於 VS Code 和 IntelliJ IDE,表示系統向使用者顯示程式碼建議。也包含下列欄位: |
LogEntry.jsonPayload.chatExposure |
表示使用者看到聊天室回覆。也包含下列欄位: |
以下範例顯示 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.originalRequestId
的 codeAcceptance.linesCount
最大值。然後,為每個originalRequestId
的所有最終 codeAcceptance
事件新增 linesCount
值,計算接受的程式碼總行數。您可以使用相應的中繼資料記錄事件欄位,依程式設計語言和使用者進一步調整這項計算。
後續步驟
- 瞭解如何在 Google Cloud中查看、分析及監控記錄檔。
- 進一步瞭解如何監控 Gemini for Google Cloud 的用量。