GitHub Copilot CLIのプロンプトを取得する

このエントリは2026/06/24現在の情報に基づいています。将来の機能追加や変更に伴い、記載事項からの乖離が発生する可能性があります。

問い合わせ

お初の主から、以下のような問い合わせが届いた。

GitHub Copilot CLIでGitHubが提供しているモデルを利用している場合、プロンプトやレスポンスのログを取得するにはどうすればいいか?

Azure API Management (APIM) の背後にAzure OpenAI ServiceやFoundryモデルを配置すれば、APIMでプロンプトログやレスポンスを取得できるのは理解している主なので、同じようなことができないか?という素朴な疑問。

GitHubでの取得状況

GitHub Copilot CLI、GitHub Copilotは基本的にサーバー側(つまりGitHub側)でプロンプトログを取得していないので、もしプロンプトログを取得したい場合には、次のような手段が必要。

GitHub Copilotの場合

Agent hooks in Visual Studio Code (Preview)
https://code.visualstudio.com/docs/agent-customization/hooks
Monitor agent usage with OpenTelemetry
https://code.visualstudio.com/docs/agents/guides/monitoring-agents

GitHub Copilot CLIの場合

OpenTelemetry Monitoring
https://docs.github.com/en/copilot/reference/copilot-cli-reference/cli-command-reference#opentelemetry-monitoring
Policy hooks
https://docs.github.com/en/copilot/reference/hooks-reference#policy-hooks

設定

今回は、GitHub Copilot CLIからのテレメトリ情報を、先日のエントリで作成したOTelエンドポイント(APIM経由でApplication Insights)に流し込むことにした。詳細はOTelエンドポイントのエントリに記載している。

クライアントでの設定

環境変数として以下の設定が必要。なお、COPILOT_OTEL_ENABLEDは、OTEL_EXPORTER_OTLP_ENDPOINTを設定すると自動的にtrueになるので、意識する必要はない。

GitHub Copilot CLIはgRPCでのテレメトリ情報送出をサポートしていないので注意が必要。そのため、OTEL_EXPORTER_OTLP_PROTOCOLにgrpcを設定できない(http/json もしくは http/protobuf だけをサポート)。今回、APIMの背後にいるApplication Insightsの都合で、http/protobuf を設定した。

環境変数意味
OTEL_EXPORTER_OTLP_ENDPOINT文字通りOTLPエンドポイント。1. で作成したエンドポイントを指定https://<APIM>/<API_URL_SUFFIX>
OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENTPrompt/Responseを取得するかどうかtrue
OTEL_EXPORTER_OTLP_PROTOCOLOTLP HTTP wire protocolhttp/protobuf
OTEL_EXPORTER_OTLP_HEADERSバックエンドへ送出する際に必要な認証ヘッダー"Authorization=Bearer YOUR_TOKEN"

"api-key=xxxxxxx"

これでおしまい。

PromptとResponseはどこに入るか?

確かにOTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENTでメッセージを捕捉するように構成したが、果たしてどこに収集されるのか?これはドキュメントにも記載の通り、本文キャプチャ時の属性として gen_ai.input.messages と gen_ai.output.messages に格納されている。つまり、invoke_agent や chat span の属性として prompt/response が JSON で入るため、管理ツール側では主に traces/span attributes として閲覧・検索する必要がある。ふつうだとLogに書き込まれると考えそうだが、そうではない点に注意が必要。

Content capture (GitHub Copilot CLI command reference > OpenTelemetry monitoring)
https://docs.github.com/en/copilot/reference/copilot-cli-reference/cli-command-reference#content-capture

試してみる

ふつうにGitHub Copilot CLIで、何か問い合わせてみる。 /research なんてやると大変なので、とあるプロジェクトの説明をしてもらった結果がこちら。

これを、Application Insightsから見たものが以下のスクリーンショット。赤で囲んだ箇所がプロンプトとレスポンス。

赤で囲んだ箇所のGenerated Outputは以下のような内容で、実行結果と同じ(当たり前である)。

task_complete({“summary”:“概要: このプロジェクトは、Micronaut 5 ベースの小さな Java Web API です。GET /caller にアクセスすると、外部 API https://api.my-ip.io/v2/ip.json を呼び出し、呼び出し元のグローバル IP と関連情報を JSON として返します。\n\n構成: エントリポイントは Application.java、HTTP エンドポイントは GeoIPController.java、外部 API クライアントは GeoIPClient.java です。Maven プロジェクトで、Java 25 / Netty / Jackson を使います。application.yml ではアプリ名 envchecker と OpenTelemetry の logging exporter が設定されています。\n\nデプロイ: 通常の JVM コンテナ用 Dockerfile と GraalVM ネイティブイメージ用 Dockerfile.native があり、GitHub Actions で Docker Hub へ envchecker:${JDK_VERSION}envchecker:${JDK_VERSION}-native をビルド・push する構成です。現状、src/test 配下のテストコードはありません。”})

続いて、「テストがない」と言ってきているので、テストを作成してもらい、コミット、プッシュの上、プルリクエスト発行まで実施してもらった結果がこちら。

Application Insightsから、invoke_agentを選択してtraceを見ると、以下の通り。

Simple viewで確認することもできて、1箇所選択してみると、CLIの出力「● 外部APIに依存しないよう、 GeoIPClient  をテスト用Beanで差し替えるコントローラーテストを追加します。」が確認できる。

Application InsightsのOTel metrics (preview) では、Metricsを確認できる。以下は指定した時間でのToken Usageを取得した例。

他のサービスでは

GitHub Copilot CLIからOTelをサポートする他のサービスにもテレメトリ情報を送信できるが、それぞれ構成上の注意点がある。下表は直接の送信での状況を記載したもの。

バックエンドCopilot CLI から直接 OTLP/HTTPメモ
Grafana Cloud / Tempo可能Grafana Cloud: OTLP/HTTP endpoint と headers を案内している。
production: Alloy/Collector 経由を推奨。

Send data to the Grafana Cloud OTLP endpoint
https://grafana.com/docs/grafana-cloud/send-data/otlp/send-data-otlp/
Jaeger 2.x可能JaegerはOTLPを受け付けるが、保存対象は tracesのみ。

OpenTelemetry Protocol
https://www.jaegertracing.io/docs/2.6/architecture/apis/
Honeycomb可能OTLP over gRPC、HTTP/protobuf、HTTP/JSON をサポート。
x-honeycomb-team header でAPI Keyを渡す。

Send Data with the OpenTelemetry Collector
https://docs.honeycomb.io/send-data/opentelemetry/collector
New Relic可能OTLP/HTTP binary protobuf の利用を推奨。
api-key headerでAPI Keyを渡す。

New Relic OTLP endpoint
https://docs.newrelic.com/docs/opentelemetry/best-practices/opentelemetry-otlp/
Datadog標準構成では Agent/Collector 経由Datadog Agent は OTLP traces/metrics を gRPC または HTTP で受付。

OTLP Ingestion by the Datadog Agent
https://docs.datadoghq.com/opentelemetry/setup/otlp_ingest_in_the_agent/

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください