主题
追踪 Visual Studio Code Copilot Chat 会话
通过 OpenTelemetry 在 LangSmith 中捕获 VS Code Copilot Chat 的 agent 交互、LLM 调用、工具执行和 token 用量。
Visual Studio Code Copilot Chat 可以通过 OpenTelemetry(OTel)导出追踪。LangSmith 直接接收 OTLP,因此你可以将 Copilot Chat 指向 LangSmith,并与其他 LLM 追踪一起检查 agent 轮次、模型元数据、工具调用和 token 用量。
本指南基于 Copilot 的 Monitor agent usage with OpenTelemetry 参考文档。
前置条件
在设置追踪之前,请确保你具备:
- 较新版本的 Visual Studio Code,已安装并登录 GitHub Copilot Chat。
- 一个 LangSmith API 密钥。
配置追踪
只要设置了 COPILOT_OTEL_ENABLED、OTEL_EXPORTER_OTLP_ENDPOINT 或 github.copilot.chat.otel.enabled 中的任意一项,Copilot Chat 就会启用 OTel 发送。将 Copilot Chat 追踪发送到 LangSmith 的最简单方式,是在启动 VS Code 之前导出以下环境变量:
bash
export COPILOT_OTEL_ENABLED=true
export COPILOT_OTEL_PROTOCOL=http
export COPILOT_OTEL_ENDPOINT=https://api.smith.langchain.com/otel
export COPILOT_OTEL_CAPTURE_CONTENT=true
export OTEL_EXPORTER_OTLP_HEADERS="x-api-key=<your_langsmith_api_key>,Langsmith-Project=<your_project_name>"| 变量 | 说明 |
|---|---|
COPILOT_OTEL_ENABLED | 设为 true 以启用 Copilot Chat OTel 导出。 |
COPILOT_OTEL_PROTOCOL | OTLP 协议。使用 http 以指向 LangSmith 的 HTTP OTLP 接收端点。 |
COPILOT_OTEL_ENDPOINT | LangSmith OTLP 端点。优先于 OTEL_EXPORTER_OTLP_ENDPOINT。 |
COPILOT_OTEL_CAPTURE_CONTENT | 在 span 上捕获完整提示词、响应、工具参数和工具结果。默认关闭。 |
OTEL_EXPORTER_OTLP_HEADERS | OTLP exporter 的认证头。使用 x-api-key=<your_langsmith_api_key>,并可选用 Langsmith-Project=<project> 将追踪路由到指定的 LangSmith 项目。 |
VS Code 必须继承这些环境变量,因此请在启动编辑器的那个 shell 会话中导出它们(例如写入 ~/.zshrc、~/.bashrc 或 shell profile)。
NOTE
对于自托管安装或区域化 SaaS,请更新 LangSmith 端点:GCP EU 使用 eu.api.smith.langchain.com;GCP APAC 使用 apac.api.smith.langchain.com;AWS US 使用 aws.api.smith.langchain.com。对于自托管 LangSmith,请在 LangSmith API URL 后追加 /api/v1/otel——例如 https://ai-company.com/api/v1/otel。
WARNING
COPILOT_OTEL_CAPTURE_CONTENT=true 会记录完整的提示词和响应内容、系统提示词、工具 schema、工具参数和工具结果。仅在可信任的环境中启用,且确认捕获源代码、文件内容和用户提示词是可接受的。
替代方案:VS Code 设置
如果你不想设置环境变量,也可以改为在 VS Code 设置中启用 OTel。打开 Settings(⌘, / Ctrl+,),搜索 copilot otel,然后配置:
json
{
"github.copilot.chat.otel.enabled": true,
"github.copilot.chat.otel.exporterType": "otlp-http",
"github.copilot.chat.otel.otlpEndpoint": "https://api.smith.langchain.com/otel",
"github.copilot.chat.otel.captureContent": true
}认证头仍必须通过 OTEL_EXPORTER_OTLP_HEADERS 环境变量提供——VS Code 设置不暴露 header 字段。同时设置两者时,环境变量也会优先于 VS Code 设置。
在 LangSmith 中查看追踪
启动 Copilot Chat 会话并发送请求。打开你的 LangSmith 项目 查看生成的追踪。每次 agent 交互都会按照 OTel GenAI Semantic Conventions 生成一棵分层 span 树:
invoke_agentspan 包裹完整的 agent 编排,包括 agent 名称、会话 ID、轮次数量和总 token 用量。chatspan 捕获单次 LLM API 调用,包括模型、token 数、响应时间和结束原因。execute_toolspan 捕获工具调用,包括工具名称、类型、耗时和成功状态。
当 agent 调用子 agent 时,Copilot Chat 会自动传播追踪上下文,因此子 agent 的 invoke_agent span 在 LangSmith 中会显示为父级 execute_tool span 的子节点。
故障排查
- LangSmith 中没有出现追踪。 确认
COPILOT_OTEL_ENABLED=true,并确认 VS Code 是从导出了这些变量的 shell 启动的。检查OTEL_EXPORTER_OTLP_HEADERS是否包含x-api-key=<your_langsmith_api_key>,以及该 API 密钥是否属于你要追踪到的工作区。更改环境变量后请重启 VS Code。 - 追踪落到错误的项目。 在
OTEL_EXPORTER_OTLP_HEADERS中设置Langsmith-Project=<your_project_name>。如果未设置,追踪会进入工作区的default项目。 - 提示词和响应缺失。 内容捕获需要主动开启。设置
COPILOT_OTEL_CAPTURE_CONTENT=true(或启用github.copilot.chat.otel.captureContent设置)。