查看 Gemini 日志

本文档介绍了如何为 Google Cloud activity 启用 Gemini 的收集和存储功能,包括:

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

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

后,Google 记录数据,以供贵组织的系统管理员使用。

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

Identity and Access Management (IAM) 角色用于控制主账号对日志的访问权限。您可以向主账号授予预定义角色,也可以创建自定义角色。如需详细了解所需权限,请参阅访问权限控制

默认情况下,Cloud Logging 会对以静态方式存储的客户内容进行加密。Logging 存储在日志分桶中的数据使用密钥加密密钥进行加密,此过程称为“信封加密”。访问日志记录数据需要访问这些密钥加密密钥,Google 会为您管理这些密钥,您无需执行任何操作。

您的组织可能具有我们的默认静态加密不提供的监管、合规性相关或高级加密要求。为满足贵组织的要求,您可以管理加密密钥,而不是由 Google 管理用于保护您的数据的加密密钥。

如需详细了解客户管理的加密密钥 (CMEK) 的使用(包括优点和限制),请参阅 CMEK

限制

Gemini 在 Google Cloud 中记录的日志数据不包括用户与以下产品的互动:
  • Gemini in BigQuery
  • Gemini in Looker
  • Google Security Operations 中的 Gemini
  • Google Cloud 控制台中的“数据库中心”的 Gemini 窗格

准备工作

为 Google Cloud 日志记录启用 Gemini

与 Google Cloud 支持团队或您的 Google Cloud 代表联系,提供您要为哪个项目启用 GeminiGoogle Cloud 日志记录、Gemini 元数据日志记录或二者兼有。 Google Cloud

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

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

Google Cloud 控制台

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

    前往 Logs Explorer

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

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

Google Cloud CLI

运行以下命令:

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

Gemini for Google Cloud logs

LogEntry 是 Cloud Logging 中的数据基本单位。以下部分列出了适用于 Gemini for Google Cloud 平台事件的 LogEntry 中找到的字段,例如用户请求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 service 的聊天请求。

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

Google Cloud 回答专用 Gemini

下表显示了 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 service 的聊天请求。

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 标识日志。

Google Cloud 元数据日志专用 Gemini

如需生成元数据日志,必须为 VS Code 和 IntelliJ 扩展程序启用 Gemini Code Assist 扩展程序遥测设置。此外,对于 VS Code,还必须启用全局遥测数据收集设置

Google Cloud Gemini 元数据日志遵循与 Gemini 日志 Google Cloud 相同的结构,但指定了不同的字段。下表列出了用户请求日志条目中找到的字段:

字段 值和备注
LogEntry.@type 适用于 Google Cloud 元数据资源类型的 Gemini: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:用户接受的代码行数。
  • 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 查找具有唯一 codeAcceptance.originalRequestId 的最终带时间戳事件,然后查看 codeAcceptance.linesCount。然后,将每个 originalRequestId 的所有最终 codeAcceptance 事件的 linesCount 值相加,以计算接受的代码行总数。您可以使用相应的元数据日志事件字段,按编程语言和用户进一步细化此计算。

后续步骤