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)