本文档介绍了如何启用 Gemini for Google Cloud 活动的收集和存储,包括:
- Gemini for Google Cloud 提示和回答日志,例如用户输入、上下文信息和回答。
- Gemini for Google Cloud 元数据日志,例如用户接受的遥测元数据和代码行。
如果您需要生成 Gemini Code Assist 指标,请参阅监控 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) 的使用情况(包括优点和限制),请参阅客户管理的加密密钥。
限制
Google Cloud 中的 Gemini 日志数据记录仅限于用户在 IDE 中与 Gemini Code Assist 的互动。
准备工作
-
如需获得查看 Gemini for Google Cloud 日志所需的权限,请让您的管理员为您授予项目的 Logs Viewer (
roles/logging.viewer
) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。 在启用 Gemini for 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 实例。
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 中的数据基本单位。以下部分列出了 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 键或完全接受。还包含以下字段: |
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
值相加,以计算接受的代码总行数。您可以使用相应的元数据日志事件字段,按编程语言和用户进一步细化此计算结果。