Gemini ログを表示する

このドキュメントでは、次のような Google Cloud アクティビティの 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)の使用状況に関する具体的な情報(利点や制限など)については、顧客管理の暗号鍵をご覧ください。

制限事項

Gemini によって Google Cloudに記録されるログデータには、次のプロダクトでのユーザー インタラクションが含まれます。
  • IDE 内の Gemini Code Assist。

始める前に

Gemini for Google Cloud のロギングを有効にする

Gemini forGoogle Cloud のロギング、Gemini for Google Cloud メタデータ ロギング、またはその両方を有効にするプロジェクト ID を Google Cloud サポートまたは Google Cloud の担当者に連絡してください。

Gemini for Google Cloud のユーザーログとメタデータログを表示する

Gemini のユーザーログとメタデータ ログを表示するには、次のいずれかを行います。 Google Cloud

Google Cloud コンソール

  1. Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。

    [ログ エクスプローラ] に移動

    検索バーを使用してこのページを検索する場合は、小見出しが「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 のログ

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 サービスからのチャット リクエストなど。

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 このリクエストを開始したユーザーの 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 このリクエストを開始したユーザーの 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 の 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 このリクエストを開始したユーザーの 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 コード アシスタンスが、受け入れられた行のうちコメント行の数を判断できる場合にのみ表示されます。
  • originalRequestId: codeExposure イベントを 0 個以上の codeAcceptance イベントにリンクする識別子。これを使用して、受け入れ率受け入れられたコード行数の指標を計算できます。
  • programmingLanguage: 受け入れられるコードのプログラミング言語(python など)。
LogEntry.jsonPayload.codeExposure VS Code と IntelliJ IDE の場合のみ、コード候補がユーザーに公開されたことを示します。次のフィールドも含まれます。
  • programmingLanguage: エクスポージャーのプログラミング言語(python など)。
  • originalRequestId: codeExposure イベントを 0 個以上の codeAcceptance イベントにリンクする識別子。これを使用して、受け入れ率受け入れられたコード行数の指標を計算できます。
LogEntry.jsonPayload.chatExposure ユーザーにチャット レスポンスが公開されたことを示します。次のフィールドも含まれます。
  • originalRequestId: chatExposure イベントを 0 個以上の codeAcceptance イベントまたは codeExposure イベントにリンクする識別子。これを使用して、受け入れ率受け入れられたコード行数の指標を計算できます。

次のサンプルは、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.originalRequestIdcodeAcceptance.linesCount の最大値を見つけます。次に、各 originalRequestId のすべての最終的な codeAcceptance イベントの linesCount 値を追加して、受け入れられたコード行の合計を計算します。それぞれのメタデータ ログイベント フィールドを使用して、プログラミング言語とユーザーごとにこの計算をさらに絞り込むことができます。

次のステップ