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 集成 的内容。