Skip to main content
LangSmith 支持基于 OpenTelemetry 的追踪,允许您从任何兼容 OpenTelemetry 的应用程序发送追踪数据。本指南涵盖了 LangChain 应用程序的自动检测以及其他框架的手动检测。 了解如何使用 OpenTelemetry 与 LangSmith 追踪您的 LLM 应用程序。
对于自托管安装或区域 SaaS,请在下面的请求中相应地更新 LangSmith URL:欧盟 (GCP) 使用 eu.api.smith.langchain.com;AWS 托管的美国 SaaS 使用 aws.api.smith.langchain.com

追踪 LangChain 应用程序

如果您使用 LangChain 或 LangGraph,请使用内置集成来追踪您的应用程序:
  1. 安装支持 OpenTelemetry 的 LangSmith 包:
    需要 Python SDK 版本 langsmith>=0.3.18。我们推荐 langsmith>=0.4.25 以获得重要的 OpenTelemetry 修复。
  2. 在您的 LangChain/LangGraph 应用程序中,通过设置 LANGSMITH_OTEL_ENABLED 环境变量启用 OpenTelemetry 集成:
  3. 创建一个带有追踪功能的 LangChain 应用程序。例如:
  4. 应用程序运行后,在 LangSmith 仪表板中查看追踪数据(示例)。

追踪非 LangChain 应用程序

对于非 LangChain 应用程序或自定义检测,您可以使用标准的 OpenTelemetry 客户端在 LangSmith 中追踪您的应用程序。(我们推荐 langsmith ≥ 0.4.25。)
  1. 安装 OpenTelemetry SDK、OpenTelemetry 导出器包以及 OpenAI 包:
  2. 设置端点的环境变量,替换为您特定的值:
    根据您的 otel 导出器的配置方式,如果您只发送追踪数据,可能需要将 /v1/traces 附加到端点。
    如果您是自托管 LangSmith,请将基础端点替换为您的 LangSmith API 端点并附加 /api/v1。例如:OTEL_EXPORTER_OTLP_ENDPOINT=https://ai-company.com/api/v1/otel
    可选:指定一个不同于 “default” 的自定义项目名称:
  3. 记录一个追踪。 此代码设置一个 OTEL 追踪器和导出器,用于将追踪数据发送到 LangSmith。然后调用 OpenAI 并发送所需的 OpenTelemetry 属性。
  4. 在 LangSmith 仪表板中查看追踪数据(示例)。

将追踪发送到备用提供商

虽然 LangSmith 是 OpenTelemetry 追踪的默认目标,但您也可以配置 OpenTelemetry 将追踪发送到其他可观测性平台。
在 LangSmith Python SDK ≥ 0.4.1 中可用。我们推荐 ≥ 0.4.25,其中包含改进 OTEL 导出和混合扇出稳定性的修复。

使用环境变量进行全局配置

默认情况下,LangSmith OpenTelemetry 导出器会将数据发送到 LangSmith API OTEL 端点,但可以通过设置标准 OTEL 环境变量来自定义:
LangSmith 默认使用 HTTP 追踪导出器。如果您想使用自己的追踪提供程序,可以:
  1. 如上所示设置 OTEL 环境变量,或者
  2. 在初始化 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 → 工具调用 ID
  • tool_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)创建 span。
这是在 LangSmith 中生成的追踪数据的示例

向追踪添加附件

LangSmith 支持向追踪附加文件。这在构建具有多模态输入或输出的代理时非常有用。使用 OpenTelemetry 追踪时也支持附件。 下面的示例追踪一个 Google ADK 代理并向追踪添加附件。它结合使用了 LangSmith 的 OtelSpanProcessor 和一个自定义的 AttachmentSpanProcessor,后者使用 on_end() 向父 span 添加图像附件。
这是在 LangSmith 中生成的追踪数据的示例

高级配置

使用 OpenTelemetry collector 进行扇出

当您需要 OTEL 扇出时,请使用 LANGSMITH_OTEL_ENABLED=true。配置您的应用程序发出一次 OTEL span,然后使用 OpenTelemetry Collector 将它们路由到 LangSmith 和任何其他可观测性后端。 当您正在追踪应用程序并希望进行多目标路由时,请使用此方法。如果您正在操作 LangSmith 平台基础设施遥测(来自 Kubernetes 上自托管 LangSmith 服务的日志、指标、追踪),请改用为 LangSmith 遥测配置您的 collector 指南。 对于更高级的场景,您可以使用 OpenTelemetry Collector 将您的遥测数据扇出到多个目标。这比在应用程序代码中配置多个导出器更具可扩展性。
  1. 为您的环境安装 OpenTelemetry Collector
  2. 创建一个配置文件(例如 otel-collector-config.yaml),导出到多个目标:
  3. 配置您的应用程序发送到 collector:
此方法具有以下几个优点:
  • 所有遥测目标的集中配置
  • 减少应用程序代码中的开销
  • 更好的可扩展性和弹性
  • 无需更改应用程序代码即可添加或删除目标

使用 LangChain 和 OpenTelemetry 进行分布式追踪

当您的 LLM 应用程序跨越多个服务或进程时,分布式追踪至关重要。OpenTelemetry 的上下文传播功能确保追踪在服务边界之间保持连接。

分布式追踪中的上下文传播

在分布式系统中,上下文传播在服务之间传递追踪元数据,以便将相关的 span 链接到同一追踪:
  • Trace ID:整个追踪的唯一标识符
  • Span ID:当前 span 的唯一标识符
  • 采样决策:指示是否应采样此追踪

使用 LangChain 设置分布式追踪

要启用跨多个服务的分布式追踪: