
LangSmith를 위한 OpenTelemetry 지원 도입
요약
LangSmith가 분산 트레이싱 및 관찰성을 위한 개방형 표준인 OpenTelemetry 지원을 시작했습니다. 이를 통해 개발자는 다양한 프로그래밍 언어와 프레임워크에서 생성된 텔레메트리 데이터를 LangSmith로 직접 전송하여 통합된 LLM 모니터링 환경을 구축할 수 있습니다.
핵심 포인트
- LangSmith API 레이어가 OpenTelemetry 트레이스를 직접 수락하여 상호 운용성 확보
- OpenLLMetry 시맨틱 컨벤션을 지원하여 LLM 모델 및 벡터 데이터베이스 계측 가능
- OpenTelemetry 호환 SDK와 OTEL 엔드포인트 설정을 통해 손쉽게 트레이스 수집 가능
- 향후 발전하는 OpenTelemetry Gen AI 시맨틱 컨벤션에 대한 수용 계획 포함
LangSmith는 이제 분산 트레이싱 (Distributed Tracing) 및 관찰성 (Observability)을 위한 개방형 표준인 OpenTelemetry 형식으로 트레이스 (Traces)를 수집하는 기능을 지원합니다. OpenTelemetry를 사용하면 개발자는 광범위한 프로그래밍 언어, 프레임워크 및 모니터링 도구에 걸쳐 텔레메트리 (Telemetry) 데이터를 계측 (Instrument)하고 내보낼 수 있어 폭넓은 상호 운용성을 확보할 수 있습니다.
이번 업데이트를 통해 LangSmith의 API 레이어는 이제 OpenTelemetry 트레이스를 직접 수락할 수 있습니다. 지원되는 모든 OpenTelemetry 익스포터 (Exporter)를 LangSmith OTEL 엔드포인트로 지정하면, 트레이스가 수집되어 LangSmith 내에서 완전히 접근 가능해집니다. 이를 통해 통합된 LLM 모니터링 및 시스템 텔레메트리를 통해 애플리케이션 성능에 대한 전체적인 뷰를 제공합니다.
OpenTelemetry 시맨틱 컨벤션 (Semantic Conventions)
OpenTelemetry는 다양한 사용 사례에 걸쳐 속성 이름과 데이터에 대한 시맨틱 컨벤션 (Semantic Conventions)을 정의합니다. 예를 들어, 데이터베이스, 메시징 시스템, 그리고 HTTP 또는 gRPC와 같은 프로토콜에 대한 시맨틱 컨벤션이 존재합니다. LangSmith의 경우, 우리는 특히 생성형 AI (Generative AI)를 위한 시맨틱 컨벤션에 주목하고 있습니다. 이 분야는 아직 초기 단계이므로 기존 컨벤션이 몇 가지 존재하지만, 새로운 공식 표준들이 여전히 개발되고 있습니다.
우리는 이제 다양한 LLM 모델, 벡터 데이터베이스 (Vector Databases), 그리고 일반적인 LLM 프레임워크에 대해 즉각적인 계측 (Instrumentation)을 가능하게 하는 시맨틱 컨벤션 및 구현체인 OpenLLMetry 형식을 지원합니다. 데이터는 반드시 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 (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를 호출하고 필요한 속성(attributes)과 함께 스팬(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 대시보드에서 이와 같은 트레이스 (trace)를 확인할 수 있습니다.
자세한 내용은 문서를 참조하세요.
Traceloop SDK 시작하기
이 예제는 모델, 벡터 데이터베이스 (vector databases), 프레임워크 (frameworks)의 폭넓은 통합을 기본적으로 지원하는 Traceloop의 OpenLLMetry SDK를 사용하여 트레이싱 (tracing)을 전송하는 방법을 다룹니다.
시작하려면 다음 단계를 따르세요. 먼저, OpenLLMetry Traceloop SDK를 설치합니다:
pip install traceloop-sdk
환경 변수 (environment variables)를 설정합니다:
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 채팅 완성 (chat completion)을 사용하는 전체 예제입니다:
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 대시보드에서 이와 같은 트레이스 (trace)를 확인할 수 있습니다.
자세한 내용은 문서를 참조하세요.
Vercel AI SDK 시작하기
LangSmith 라이브러리에 의해 정의된 클라이언트 사이드 트레이스 익스포터 (client side trace exporter)를 사용하여 Vercel AI SDK 통합을 지원합니다. 이 통합을 사용하려면 먼저 AI SDK 패키지를 설치하세요:
npm install ai @ai-sdk/openai zod
다음으로 환경을 구성합니다:
export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_API_KEY=<your-api-key>
아래 예제들은 OpenAI API를 사용하지만, 일반적으로 반드시 그래야 하는 것은 아닙.
export OPENAI_API_KEY=<your-openai-api-key>
먼저, 프로젝트 루트에 instrumentation.js 파일을 생성하세요. Next.js 앱 내에서 OpenTelemetry (OTel) 계측 (instrumentation)을 설정하는 방법에 대한 자세한 내용은 여기에서 확인할 수 있습니다.
import { registerOTel } from "@vercel/otel";
import { AISDKExporter } from "langsmith/vercel";
export function register() {
registerOTel({
serviceName: "langsmith-vercel-ai-sdk-example",
traceExporter: new AISDKExporter(),
});
}
그 다음, 추적 (trace)하고자 하는 AI SDK 호출에 experimental_telemetry 인자를 추가하세요. 편의를 위해, LangSmith를 위한 추가 메타데이터를 붙여주는 AISDKExporter.getSettings() 메서드를 포함했습니다.
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 대시보드에서 이와 같은 추적 (trace)을 확인할 수 있습니다.
더 자세한 정보는 Vercel AI SDK 통합에 관한 LangSmith 문서를 참조하세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 LangChain Blog의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기