本文档介绍了如何为 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
的日志条目来查看此类数据。
此功能不会记录 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 窗格
准备工作
-
如需获得查看日志的 Gemini 所需的权限,请让您的管理员为您授予项目的 Logs Viewer (
roles/logging.viewer
) IAM 角色。 Google Cloud 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。 请先了解 Cloud Logging 价格和 Gemini for Google Cloud 价格,然后再为日志记录启用 Gemini。 Google Cloud
为 Google Cloud 日志记录启用 Gemini
与 Google Cloud 支持团队或您的 Google Cloud 代表联系,提供您要为哪个项目启用 GeminiGoogle Cloud 日志记录、Gemini 元数据日志记录或二者兼有。 Google Cloud
查看 Gemini for Google Cloud 用户日志和元数据日志
如需查看 Gemini 中的用户日志和元数据日志,请执行以下操作之一: Google Cloud
Google Cloud 控制台
-
在 Google Cloud 控制台中,转到 Logs Explorer 页面。
如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。
- 在工具栏中,选择一个 Google Cloud 控制台项目。
- 在工具栏中,展开所有资源菜单,然后选择资源 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 键或完全接受。还包含以下字段: |
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
查找具有唯一 codeAcceptance.originalRequestId
的最终带时间戳事件,然后查看 codeAcceptance.linesCount
。然后,将每个 originalRequestId
的所有最终 codeAcceptance
事件的 linesCount
值相加,以计算接受的代码行总数。您可以使用相应的元数据日志事件字段,按编程语言和用户进一步细化此计算。
后续步骤
- 了解如何在 Google Cloud中查看、分析和监控日志。
- 详细了解如何监控 Gemini Google Cloud的使用情况。