查看 Gemini 日志

本文档介绍了如何启用 Gemini for Google Cloud 活动的收集和存储,包括:

  • Gemini for Google Cloud 提示和回答日志,例如用户输入、上下文信息和回答。
  • Gemini for Google Cloud 元数据日志,例如用户接受的遥测元数据和代码行。

Gemini for Google Cloud 不会收集或向 Cloud Logging 发送用户与 Gemini for Google Cloud的任何其他互动,包括书面反馈。收集的数据会发送到 Cloud Logging 进行存储。您可以通过搜索资源类型为 cloudaicompanion.googleapis.com/Instance 的日志条目来查看这些数据。

此功能不会在 Gemini in Vertex AI 中记录提示或回答。如需为 Gemini in Vertex AI 启用日志,请参阅启用数据访问审核日志

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 Code Assist 记录数据。

准备工作

启用 Gemini for Google Cloud 日志记录

与 Google Cloud 支持团队或您的 Google Cloud 代表联系,并提供您要启用 Gemini forGoogle Cloud 日志记录功能和/或 Gemini for Google Cloud 元数据日志记录功能的项目 ID。

查看 Gemini for Google Cloud 用户日志和元数据日志

如需查看 Gemini for Google Cloud 用户日志和元数据日志,请执行以下操作之一:

Google Cloud 控制台

  1. 在 Google Cloud 控制台中,转到 Logs Explorer 页面。

    前往 Logs Explorer

    如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。

  2. 在工具栏中,选择一个 Google Cloud 控制台项目。
  3. 在工具栏中,展开所有资源菜单,然后选择资源 Cloud AI Companion 实例

Google Cloud CLI

运行以下命令:

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

Gemini for Google Cloud 日志

LogEntry 是 Cloud Logging 中的数据基本单位。以下部分列出了 LogEntry 中针对 Gemini for Google Cloud Platform 事件(例如用户请求数量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 Gemini for Google Cloud 服务名称。如果 Gemini for Google Cloud 产品为 Gemini Code Assist,则此值为 code_assist。如果 Gemini for Google Cloud 产品为 Gemini Cloud Assist,则此值为 cloud_assist。否则,此值为 unknown
LogEntry.labels.request_id 用于将请求与回答日志条目相关联的唯一标识符。
LogEntry.labels.user_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 for 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 Gemini for Google Cloud 服务名称。如果 Gemini for Google Cloud 产品为 Gemini Code Assist,则此值为 code_assist。如果 Gemini for Google Cloud 产品为 Gemini Cloud Assist,则此值为 cloud_assist。否则,此值为 unknown
LogEntry.labels.request_id 用于将请求与回答日志条目相关联的唯一标识符。
LogEntry.labels.user_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 元数据资源类型type.googleapis.com/google.cloud.cloudaicompanion.logging.v1.MetadataLog
LogEntry.labels.method 对于元数据日志,此标签值为 Export.Metrics
LogEntry.labels.product Gemini for Google Cloud 服务名称。如果 Gemini for Google Cloud 产品为 Gemini Code Assist,则此值为 code_assist。如果 Gemini for Google Cloud 产品为 Gemini Cloud Assist,则此值为 cloud_assist。否则,此值为 unknown
LogEntry.labels.user_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 事件相关联的标识符。可用于计算接受率接受的代码行数度量。
  • programmingLanguage:所接受代码的编程语言,例如 python
LogEntry.jsonPayload.codeExposure 仅适用于 VS Code 和 IntelliJ IDE,表示向用户显示了代码建议。还包含以下字段:
  • programmingLanguage:曝光的编程语言,例如 python
  • originalRequestId:用于将 codeExposure 事件与零个或零个以上的 codeAcceptance 事件相关联的标识符。可用于计算接受率接受的代码行数度量。
LogEntry.jsonPayload.chatExposure 表示对话回答已向用户呈现。还包含以下字段:
  • originalRequestId:用于将 chatExposure 事件与零个或零个以上的 codeAcceptancecodeExposure 事件相关联的标识符。可用于计算接受率接受的代码行数度量。

以下示例展示了 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 值相加,以计算接受的代码总行数。您可以使用相应的元数据日志事件字段,按编程语言和用户进一步细化此计算结果。

后续步骤