OpenTelemetry
Copilot CLI 内置了 OpenTelemetry 的 tracing 功能。只需在 SDK 侧进行配置,就可以收集 CLI 进程的追踪数据。模型调用遥测
通过 CLI 的assistant.usage 事件,可以获取请求整形前与工具调用相关的计数。
model.call_failure 事件的 data['requestFingerprint'] 中可能包含失败请求的结构信息,例如消息数量以及图片、工具调用数量等。其中不包含请求内容。errorCode 和 errorType 是来自服务器的值,面向受限遥测使用。SDK 会原样保留事件数据。请勿将这些值或 errorMessage 转发到未经批准的日志或外部服务。
接收 GitHub telemetry 事件
除 OpenTelemetry 之外,你还可以通过客户端选项onGitHubTelemetry(或 on_github_telemetry)接收 GitHub telemetry 事件。设置处理器后,SDK 会在连接时以及每次创建或恢复会话时启用转发。客户端处理器的优先级高于会话配置中的 enableGitHubTelemetryForwarding: false。
基本使用方式
启用 CLI 进程的追踪
在config/copilot.php 中添加 telemetry 设置,或直接通过选项指定。
TelemetryConfig 选项
W3C Trace Context 传播
对大多数用户来说不需要该功能。仅通过上面的
TelemetryConfig 即可收集 CLI 的追踪。以下是当你在应用侧创建自己的 OpenTelemetry span,并希望与 CLI 的 span 在同一分布式追踪中显示时的高级功能。session.create、session.resume、session.send 的 JSON-RPC 请求中自动注入 W3C Trace Context(traceparent/tracestate)。
自动传播(推荐)
只需安装open-telemetry/api 包,追踪上下文就会被自动传播。
自定义提供程序
如果想使用自己的追踪上下文获取逻辑:SDK → CLI(出站)
以下 RPC 调用会自动注入traceparent/tracestate。
session.create— 创建会话时session.resume— 恢复会话时session.send— 发送消息时
CLI → SDK(入站)
当 CLI 调用工具时,工具处理器的$invocation 数组中会包含追踪上下文。
open-telemetry/api 时,工具处理器执行期间的 OpenTelemetry 上下文会自动关联到 CLI 的 span。无需显式使用 traceparent。
依赖
open-telemetry/api 包含在 composer.json 的 suggest 中。即使没有安装,SDK 本身也可以正常工作。
最新信息请参考 GitHub 仓库。