在以下请求中,请根据自托管安装或位于欧盟地区的组织,适当更新 LangSmith URL。对于欧盟地区,请使用
eu.api.smith.langchain.com。追踪 LangChain 应用程序
如果您使用 LangChain 或 LangGraph,请使用内置集成来追踪您的应用程序:-
安装支持 OpenTelemetry 的 LangSmith 包:
需要 Python SDK 版本
langsmith>=0.3.18。我们建议使用langsmith>=0.4.25以受益于重要的 OpenTelemetry 修复。 -
在您的 LangChain/LangGraph 应用中,通过设置
LANGSMITH_OTEL_ENABLED环境变量来启用 OpenTelemetry 集成: -
创建一个启用追踪的 LangChain 应用程序。例如:
- 应用程序运行后,在您的 LangSmith 仪表板(示例)中查看追踪信息。
追踪非 LangChain 应用程序
对于非 LangChain 应用程序或自定义埋点,您可以使用标准的 OpenTelemetry 客户端在 LangSmith 中追踪您的应用程序。(我们推荐使用 langsmith >= 0.4.25。)-
安装 OpenTelemetry SDK、OpenTelemetry 导出器包以及 OpenAI 包:
-
设置端点环境变量,替换为您自己的值:
根据您的 otel 导出器配置方式,如果您仅发送追踪信息,可能需要在端点后追加
/v1/traces。可选:指定一个非 “default” 的自定义项目名称:如果您是自托管 LangSmith,请将基础端点替换为您的 LangSmith API 端点,并追加/api/v1。例如:OTEL_EXPORTER_OTLP_ENDPOINT=https://ai-company.com/api/v1/otel -
记录一个追踪。
此代码设置了一个 OTEL 追踪器和导出器,用于将追踪信息发送到 LangSmith。然后它调用 OpenAI 并发送所需的 OpenTelemetry 属性。
- 在您的 LangSmith 仪表板(示例)中查看追踪信息。
发送追踪到其他提供商
虽然 LangSmith 是 OpenTelemetry 追踪的默认目标,但您也可以配置 OpenTelemetry 将追踪发送到其他可观测性平台。在 LangSmith Python SDK >= 0.4.1 版本中可用。我们建议使用 >= 0.4.25 版本以获得改进 OTEL 导出和混合扇出稳定性的修复。
使用环境变量进行全局配置
默认情况下,LangSmith OpenTelemetry 导出器会将数据发送到 LangSmith API 的 OTEL 端点,但可以通过设置标准的 OTEL 环境变量来自定义:- 如上所示设置 OTEL 环境变量,或者
- 在初始化 LangChain 组件之前设置一个全局追踪提供者,LangSmith 将检测并使用它,而不是创建自己的提供者。
配置备用的 OTLP 端点
要将追踪发送到不同的提供商,请使用您提供商的端点配置 OTLP 导出器:混合追踪在版本 >= 0.4.1 中可用。要仅将追踪发送到您的 OTEL 端点,请设置:
LANGSMITH_OTEL_ONLY="true"
(建议使用 langsmith >= 0.4.25。)支持的 OpenTelemetry 属性和事件映射
通过 OpenTelemetry 向 LangSmith 发送追踪时,以下属性会映射到 LangSmith 字段:核心 LangSmith 属性
GenAI 标准属性
GenAI 请求参数
GenAI 用量指标
TraceLoop 属性
OpenInference 属性
LLM 属性
提示模板属性
检索器属性
工具属性
Logfire 属性
OpenTelemetry 事件映射
事件属性提取
对于消息事件,会提取以下属性:content→ 消息内容role→ 消息角色id→ tool_call_id(对于工具消息)gen_ai.event.content→ 完整的消息 JSON
finish_reason→ 选择结束原因message.content→ 选择消息内容message.role→ 选择消息角色tool_calls.{n}.id→ 工具调用 IDtool_calls.{n}.function.name→ 工具函数名称tool_calls.{n}.function.arguments→ 工具函数参数tool_calls.{n}.type→ 工具调用类型
exception.message→ 错误消息exception.stacktrace→ 错误堆栈跟踪(附加到消息后)
实现示例
使用 LangSmith SDK 进行追踪
使用 LangSmith SDK 的 OpenTelemetry 辅助函数来配置导出。以下示例追踪了一个 Google ADK 代理:您不需要设置 OTEL 环境变量或导出器。
configure() 会自动为 LangSmith 配置它们;埋点工具(如 GoogleADKInstrumentor)会创建跨度。向追踪添加附件
LangSmith 支持向追踪附加文件。这在构建具有多模态输入或输出的代理时非常有用。使用 OpenTelemetry 进行追踪时也支持附件。 下面的示例追踪了一个 Google ADK 代理并向追踪添加了一个附件。它结合使用了 LangSmith 的OtelSpanProcessor 和一个自定义的 AttachmentSpanProcessor,后者使用 on_end() 向父跨度添加一个图像附件。
高级配置
使用 OpenTelemetry Collector 进行扇出
当您需要 OTEL 扇出时,使用LANGSMITH_OTEL_ENABLED=true。配置您的应用程序仅发送一次 OTEL 跨度,然后使用 OpenTelemetry Collector 将它们路由到 LangSmith 和任何其他可观测性后端。
当您正在追踪应用程序并希望进行多目标路由时,请使用此方法。如果您正在操作 LangSmith 平台基础设施遥测(来自 Kubernetes 上自托管 LangSmith 服务的日志、指标、追踪),请改用为 LangSmith 遥测配置您的收集器指南。
对于更高级的场景,您可以使用 OpenTelemetry Collector 将您的遥测数据扇出到多个目标。这比在应用程序代码中配置多个导出器更具可扩展性。
- 为您的环境安装 OpenTelemetry Collector。
-
创建一个配置文件(例如
otel-collector-config.yaml),导出到多个目标: -
配置您的应用程序以将数据发送到收集器:
- 所有遥测目标的集中配置
- 减少应用程序代码的开销
- 更好的可扩展性和弹性
- 无需更改应用程序代码即可添加或移除目标
使用 LangChain 和 OpenTelemetry 进行分布式追踪
当您的 LLM 应用程序跨越多个服务或进程时,分布式追踪至关重要。OpenTelemetry 的上下文传播功能确保追踪在服务边界之间保持连接。分布式追踪中的上下文传播
在分布式系统中,上下文传播在服务之间传递追踪元数据,以便相关的跨度链接到同一个追踪:- 追踪 ID:整个追踪的唯一标识符
- 跨度 ID:当前跨度的唯一标识符
- 采样决策:指示是否应对此追踪进行采样
使用 LangChain 设置分布式追踪
要跨多个服务启用分布式追踪:Connect these docs to Claude, VSCode, and more via MCP for real-time answers.

