Introducing OpenTelemetry support for LangSmith

LangSmith 现已支持 OpenTelemetry

LangSmith 现在支持 OpenTelemetry,用于分布式追踪和可观测性。

阅读需 4 分钟

LangSmith 现在支持摄取 OpenTelemetry 格式的追踪数据,OpenTelemetry 是一种用于分布式追踪和可观测性的开放标准。 OpenTelemetry 允许开发者在广泛的编程语言、框架和监控工具中检测和导出遥测数据,以实现广泛的互操作性。

通过此次更新,LangSmith 的 API 层现在可以直接接受 OpenTelemetry 追踪数据。您可以将任何受支持的 OpenTelemetry 导出器指向 LangSmith OTEL 端点,您的追踪数据将被摄取并在 LangSmith 中完全可访问,从而通过统一的 LLM 监控和系统遥测,全面了解您的应用程序的性能。

OpenTelemetry 语义约定

OpenTelemetry 为各种用例定义了 语义约定,包括属性名称和数据。例如,针对数据库、消息传递系统以及 HTTP 或 gRPC 等协议,都有语义约定。对于 LangSmith,我们特别关注生成式 AI 的语义约定。由于这个领域是新兴的,现有的约定不多,但新的官方标准仍在制定中。

我们现在支持 OpenLLMetry 格式的追踪数据,这是一种语义约定和实现,能够为各种 LLM 模型、向量数据库和常见的 LLM 框架提供开箱即用的检测功能。数据必须使用 OpenLLMetry 语义约定发送;然后您可以配置与 OpenTelemetry 兼容的 SDK,以指向 LangSmith 的 OTEL 端点,从而将追踪数据摄取到 LangSmith 中。

我们计划支持接受通过其他语义约定(例如 OpenTelemetry Gen AI 语义约定)发送的追踪数据,随着这些约定的发展而逐步支持。

下面,我们将介绍几种不同的入门方法。

使用基于 OpenTelemetry 的客户端入门

此示例介绍如何使用现成的 OpenTelemetry Python 客户端。请注意,此方法适用于您选择的任何语言的任何 OpenTelemetry 兼容 SDK。

首先,安装 Python 依赖项

pip install openai
pip install opentelemetry-sdk
pip install opentelemetry-exporter-otlp

接下来,为 OpenTelemetry 配置您的环境变量

OTEL_EXPORTER_OTLP_ENDPOINT=https://api.smith.langchain.com/otel
OTEL_EXPORTER_OTLP_HEADERS="x-api-key=<your langsmith api key>,LANGSMITH_PROJECT=<project name>"

然后运行以下代码,该代码调用 openai 并使用 span 以及所需的属性对其进行包装

from openai import OpenAI
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import (
    BatchSpanProcessor,
)
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter

client = OpenAI()
otlp_exporter = OTLPSpanExporter()
trace.set_tracer_provider(TracerProvider())
trace.get_tracer_provider().add_span_processor(
    BatchSpanProcessor(otlp_exporter)
)
tracer = trace.get_tracer(__name__)

def call_openai():
    model = "gpt-4o-mini"
    with tracer.start_as_current_span("call_open_ai") as span:
        span.set_attribute("langsmith.span.kind", "LLM")
        span.set_attribute("langsmith.metadata.user_id", "user_123")
        span.set_attribute("gen_ai.system", "OpenAI")
        span.set_attribute("gen_ai.request.model", model)
        span.set_attribute("llm.request.type", "chat")

        messages = [
            {"role": "system", "content": "You are a helpful assistant."},
            {
                "role": "user",
                "content": "Write a haiku about recursion in programming."
            }
        ]

        for i, message in enumerate(messages):
            span.set_attribute(f"gen_ai.prompt.{i}.content", str(message["content"]))
            span.set_attribute(f"gen_ai.prompt.{i}.role", str(message["role"]))

        completion = client.chat.completions.create(
            model=model,
            messages=messages
        )

        span.set_attribute("gen_ai.response.model", completion.model)
        span.set_attribute("gen_ai.completion.0.content", str(completion.choices[0].message.content))
        span.set_attribute("gen_ai.completion.0.role", "assistant")
        span.set_attribute("gen_ai.usage.prompt_tokens", completion.usage.prompt_tokens)
        span.set_attribute("gen_ai.usage.completion_tokens", completion.usage.completion_tokens)
        span.set_attribute("gen_ai.usage.total_tokens", completion.usage.total_tokens)

        return completion.choices[0].message

if __name__ == "__main__":
    call_openai()

您应该在 LangSmith 仪表板中看到类似 这个 的追踪数据。

有关更多信息,请参阅文档

使用 Traceloop SDK 入门

此示例介绍如何使用 Traceloop 的 OpenLLMetry SDK 发送追踪数据,该 SDK 开箱即可支持各种模型、向量数据库和框架的集成。

要开始使用,请按照以下步骤操作。首先,安装 OpenLLMetry Traceloop SDK

pip install traceloop-sdk

设置您的环境变量

TRACELOOP_BASE_URL=https://api.smith.langchain.com/otel
TRACELOOP_HEADERS=x-api-key=<your_api_key>

然后初始化 SDK

from traceloop.sdk import Traceloop
Traceloop.init()

这是一个使用 OpenAI 聊天完成功能的完整示例

import os
from openai import OpenAI
from traceloop.sdk import Traceloop

client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
Traceloop.init()

completion = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {
            "role": "user",
            "content": "Write a haiku about recursion in programming."
        }
    ]
)

print(completion.choices[0].message)

 您应该在 LangSmith 仪表板中看到类似 这个 的追踪数据。

有关更多信息,请参阅 文档

使用 Vercel AI SDK 入门

我们支持使用 Vercel AI SDK 集成,该集成使用由 LangSmith 库定义的客户端追踪导出器。要使用此集成:首先,安装 AI SDK 包:

npm install ai @ai-sdk/openai zod

接下来,配置您的环境

export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_API_KEY=<your-api-key>
# The below examples use the OpenAI API, though it's not necessary in general
export OPENAI_API_KEY=<your-openai-api-key>

首先,在您的项目根目录中创建一个 instrumentation.js 文件。了解有关如何在 Next.js 应用程序中设置 OpenTelemetry 检测的更多信息,请点击 此处

import { registerOTel } from "@vercel/otel";
import { AISDKExporter } from "langsmith/vercel";
export function register() {
  registerOTel({
    serviceName: "langsmith-vercel-ai-sdk-example",
    traceExporter: new AISDKExporter(),
  });
}

之后,将 experimental_telemetry 参数添加到您要追踪的 AI SDK 调用中。为了方便起见,我们包含了 AISDKExporter.getSettings() 方法,该方法会附加 LangSmith 的其他元数据。

import { AISDKExporter } from "langsmith/vercel";
import { streamText } from "ai";
import { openai } from "@ai-sdk/openai";
await streamText({
  model: openai("gpt-4o-mini"),
  prompt: "Write a vegetarian lasagna recipe for 4 people.",
  experimental_telemetry: AISDKExporter.getSettings(),
});

您应该在 LangSmith 仪表板中看到 像这样的 追踪数据。

有关更多信息,请参阅 LangSmith 文档中关于 Vercel AI SDK 集成 的内容。