LangSmith Observability
LangSmith Observability
LangSmith는 프로덕션 등급 LLM 애플리케이션을 구축하기 위한 플랫폼이에요. 애플리케이션을 면밀히 모니터링하고 평가할 수 있게 해주므로, 빠르고 자신 있게 출시할 수 있어요.
LangChain의 오픈소스 프레임워크를 사용할 필요는 없어요.
이 가이드의 한 버전은 LangSmith 문서에서도 볼 수 있어요. AI SDK v4와 이전 버전의
langsmith클라이언트를 사용한다면, 해당 페이지에서 연결된 레거시 가이드를 참고하세요.
출처: 문서
본문
설정
이 가이드의 단계는
langsmith>=0.3.63.을 사용한다고 가정해요.
AI SDK 모델 프로바이더와 LangSmith 클라이언트 SDK를 설치해요. 아래 코드 스니펫은 AI SDK의 OpenAI 프로바이더를 사용하지만, 기타 지원 프로바이더 중 아무거나 사용할 수 있어요.
npm install @ai-sdk/openai langsmith
다음으로 필요한 환경 변수를 설정해요.
export LANGCHAIN_TRACING=true
export LANGCHAIN_API_KEY=<your-api-key>
export OPENAI_API_KEY=<your-openai-api-key> # The examples use OpenAI (replace with your selected provider)
Trace 로깅
트레이싱을 시작하려면 코드 시작 부분에서 wrapAISDK 메서드를 import 해서 호출해야 해요:
import { openai } from '@ai-sdk/openai';
import * as ai from 'ai';
import { wrapAISDK } from 'langsmith/experimental/vercel';
const { generateText, streamText } = wrapAISDK(ai);
await generateText({
model: openai('gpt-5.4-nano'),
prompt: 'Write a vegetarian lasagna recipe for 4 people.',
});
LangSmith 대시보드에서 이런 trace를 볼 수 있어요.
도구 호출이 있는 실행도 추적할 수 있어요:
import * as ai from 'ai';
import { tool, isStepCount } from 'ai';
import { openai } from '@ai-sdk/openai';
import { z } from 'zod';
import { wrapAISDK } from 'langsmith/experimental/vercel';
const { generateText, streamText } = wrapAISDK(ai);
await generateText({
model: openai('gpt-5.4-nano'),
messages: [
{
role: 'user',
content: 'What are my orders and where are they? My user ID is 123',
},
],
tools: {
listOrders: tool({
description: 'list all orders',
inputSchema: z.object({ userId: z.string() }),
execute: async ({ userId }) =>
`User ${userId} has the following orders: 1`,
}),
viewTrackingInformation: tool({
description: 'view tracking information for a specific order',
inputSchema: z.object({ orderId: z.string() }),
execute: async ({ orderId }) =>
`Here is the tracking information for ${orderId}`,
}),
},
stopWhen: isStepCount(5),
});
그 결과 이런 trace가 만들어져요.
다른 AI SDK 메서드도 평소처럼 사용할 수 있어요.
traceable과 함께
AI SDK 호출 주변이나 AI SDK 도구 호출 안에 traceable 호출을 감쌀 수 있어요. LangSmith에서 실행을 함께 그룹화하려는 경우 유용해요:
import * as ai from 'ai';
import { tool, isStepCount } from 'ai';
import { openai } from '@ai-sdk/openai';
import { z } from 'zod';
import { traceable } from 'langsmith/traceable';
import { wrapAISDK } from 'langsmith/experimental/vercel';
const { generateText, streamText } = wrapAISDK(ai);
const wrapper = traceable(
async (input: string) => {
const { text } = await generateText({
model: openai('gpt-5.4-nano'),
messages: [
{
role: 'user',
content: input,
},
],
tools: {
listOrders: tool({
description: 'list all orders',
inputSchema: z.object({ userId: z.string() }),
execute: async ({ userId }) =>
`User ${userId} has the following orders: 1`,
}),
viewTrackingInformation: tool({
description: 'view tracking information for a specific order',
inputSchema: z.object({ orderId: z.string() }),
execute: async ({ orderId }) =>
`Here is the tracking information for ${orderId}`,
}),
},
stopWhen: isStepCount(5),
});
return text;
},
{
name: 'wrapper',
},
);
await wrapper('What are my orders and where are they? My user ID is 123.');
결과 trace는 이렇게 보일 거예요.
서버리스 환경에서의 트레이싱
서버리스 환경에서 트레이싱할 때는 환경이 종료되기 전에 모든 실행이 flush 될 때까지 기다려야 해요. 예시는 LangSmith 문서의 이 섹션을 참고하세요.
추가 자료
특정 환경에서 트레이싱을 설정하는 방법과 더 많은 예시는 아래 링크를 참고하세요:
그리고 프로젝트에 LangSmith 트레이싱을 설정했다면, 데이터셋을 수집해 평가해 보세요:
더 알아보기 (Learn more)
- 출처 문서: LangSmith Observability