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 入门

我们支持使用 LangSmith 库定义的客户端追踪导出器集成 Vercel AI SDK。要使用此集成:首先,安装 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 集成 的文档。

© . This site is unofficial and not affiliated with LangChain, Inc.