Skip to main content
관찰성(Observability)은 대규모 언어 모델(LLM)로 구축된 애플리케이션의 핵심 요구사항입니다. LLM은 비결정적이므로 동일한 프롬프트가 다른 응답을 생성할 수 있습니다. 이러한 동작은 기존 소프트웨어보다 디버깅과 모니터링을 더 어렵게 만듭니다. LangSmith는 애플리케이션이 요청을 처리하는 방법에 대한 엔드투엔드 가시성을 제공하여 이 문제를 해결합니다. 각 요청은 발생한 일의 전체 기록을 캡처하는 추적(trace)을 생성합니다. 추적 내에는 LLM 호출이나 검색 단계와 같이 애플리케이션이 수행한 특정 작업인 개별 실행(runs)이 있습니다. 실행을 추적하면 애플리케이션의 동작을 검사하고, 디버그하고, 검증할 수 있습니다. 이 빠른 시작에서는 최소한의 검색 증강 생성(RAG) 애플리케이션을 설정하고 LangSmith로 추적을 추가합니다. 다음을 수행합니다:
  1. 환경을 구성합니다.
  2. 컨텍스트를 검색하고 LLM을 호출하는 애플리케이션을 생성합니다.
  3. 검색 단계와 LLM 호출을 모두 캡처하는 추적을 활성화합니다.
  4. LangSmith UI에서 결과 추적을 확인합니다.
추적 시작에 관한 비디오를 보고 싶으시다면 빠른 시작 비디오 가이드를 참조하세요.

사전 요구 사항

시작하기 전에 다음을 준비하세요: 이 빠른 시작의 예제 앱은 LLM 제공자로 OpenAI를 사용합니다. 앱의 LLM 제공자에 맞게 예제를 조정할 수 있습니다.
LangChain 또는 LangGraph로 애플리케이션을 구축하는 경우, 단일 환경 변수로 LangSmith 추적을 활성화할 수 있습니다. LangChain으로 추적 또는 LangGraph로 추적 가이드를 읽고 시작하세요.

1. 디렉토리 생성 및 의존성 설치

터미널에서 프로젝트 디렉토리를 생성하고 환경에 의존성을 설치합니다:
mkdir ls-observability-quickstart && cd ls-observability-quickstart
python -m venv .venv && source .venv/bin/activate
python -m pip install --upgrade pip
pip install -U langsmith openai

2. 환경 변수 설정

다음 환경 변수를 설정합니다:
  • LANGSMITH_TRACING
  • LANGSMITH_API_KEY
  • OPENAI_API_KEY (또는 사용 중인 LLM 제공자의 API 키)
  • (선택사항) LANGSMITH_WORKSPACE_ID: LangSmith API가 여러 워크스페이스에 연결된 경우, 사용할 워크스페이스를 지정하기 위해 이 변수를 설정합니다.
export LANGSMITH_TRACING=true
export LANGSMITH_API_KEY="<your-langsmith-api-key>"
export OPENAI_API_KEY="<your-openai-api-key>"
export LANGSMITH_WORKSPACE_ID="<your-workspace-id>"
Anthropic을 사용하는 경우, Anthropic 래퍼를 사용하여 호출을 추적합니다. 다른 제공자의 경우, traceable 래퍼를 사용합니다.

3. 애플리케이션 정의

이 단계에서 설명하는 예제 앱 코드를 사용하여 RAG 애플리케이션을 계측할 수 있습니다. 또는 LLM 호출이 포함된 자체 애플리케이션 코드를 사용할 수 있습니다. 이것은 아직 LangSmith 추적이 추가되지 않은 채 OpenAI SDK를 직접 사용하는 최소한의 RAG 앱입니다. 세 가지 주요 부분이 있습니다:
  • 검색기 함수: 항상 동일한 문자열을 반환하는 문서 검색을 시뮬레이션합니다.
  • OpenAI 클라이언트: 채팅 완료 요청을 보내기 위해 순수 OpenAI 클라이언트를 인스턴스화합니다.
  • RAG 함수: 검색된 문서와 사용자의 질문을 결합하여 시스템 프롬프트를 구성하고, gpt-4o-minichat.completions.create() 엔드포인트를 호출한 다음 어시스턴트의 응답을 반환합니다.
앱 파일(예: app.py 또는 app.ts)에 다음 코드를 추가합니다:
from openai import OpenAI

def retriever(query: str):
    # Minimal example retriever
    return ["Harrison worked at Kensho"]

# OpenAI client call (no wrapping yet)
client = OpenAI()

def rag(question: str) -> str:
    docs = retriever(question)
    system_message = (
        "Answer the user's question using only the provided information below:\n"
        + "\n".join(docs)
    )

    # This call is not traced yet
    resp = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[
            {"role": "system", "content": system_message},
            {"role": "user", "content": question},
        ],
    )
    return resp.choices[0].message.content

if __name__ == "__main__":
    print(rag("Where did Harrison work?"))

4. LLM 호출 추적

먼저 모든 OpenAI 호출을 추적합니다. LangSmith는 래퍼를 제공합니다: 이 스니펫은 OpenAI 클라이언트를 래핑하여 이후의 모든 모델 호출이 LangSmith에서 추적된 자식 실행으로 자동으로 로깅되도록 합니다.
  1. 앱 파일에 강조 표시된 줄을 포함시킵니다:
    from openai import OpenAI
    from langsmith.wrappers import wrap_openai  # traces openai calls
    
    def retriever(query: str):
        return ["Harrison worked at Kensho"]
    
    client = wrap_openai(OpenAI())  # log traces by wrapping the model calls
    
    def rag(question: str) -> str:
        docs = retriever(question)
        system_message = (
            "Answer the user's question using only the provided information below:\n"
            + "\n".join(docs)
        )
        resp = client.chat.completions.create(
            model="gpt-4o-mini",
            messages=[
                {"role": "system", "content": system_message},
                {"role": "user", "content": question},
            ],
        )
        return resp.choices[0].message.content
    
    if __name__ == "__main__":
        print(rag("Where did Harrison work?"))
    
  2. 애플리케이션을 호출합니다:
    python app.py
    
    다음 출력을 받게 됩니다:
    Harrison worked at Kensho.
    
  3. LangSmith UI에서 워크스페이스(또는 2단계에서 지정한 워크스페이스)의 default 추적 프로젝트로 이동합니다. 방금 계측한 OpenAI 호출을 확인할 수 있습니다.
시스템과 사용자 입력 다음 AI 출력을 보여주는 ChatOpenAI라는 LLM 호출 추적을 보여주는 LangSmith UI.

5. 전체 애플리케이션 추적

LLM 호출만이 아닌 전체 애플리케이션을 추적하기 위해 Python 또는 TypeScripttraceable 데코레이터를 사용할 수도 있습니다.
  1. 앱 파일에 강조 표시된 코드를 포함시킵니다:
    from openai import OpenAI
    from langsmith.wrappers import wrap_openai
    from langsmith import traceable
    
    def retriever(query: str):
        return ["Harrison worked at Kensho"]
    
    client = wrap_openai(OpenAI())  # keep this to capture the prompt and response from the LLM
    
    @traceable
    def rag(question: str) -> str:
        docs = retriever(question)
        system_message = (
            "Answer the user's question using only the provided information below:\n"
            + "\n".join(docs)
        )
        resp = client.chat.completions.create(
            model="gpt-4o-mini",
            messages=[
                {"role": "system", "content": system_message},
                {"role": "user", "content": question},
            ],
        )
        return resp.choices[0].message.content
    
    if __name__ == "__main__":
        print(rag("Where did Harrison work?"))
    
  2. 실행을 생성하기 위해 애플리케이션을 다시 호출합니다:
    python app.py
    
  3. LangSmith UI로 돌아가서 워크스페이스(또는 2단계에서 지정한 워크스페이스)의 default 추적 프로젝트로 이동합니다. rag 단계와 ChatOpenAI LLM 호출을 포함한 전체 앱 파이프라인의 추적을 찾을 수 있습니다.
입력 다음 출력과 함께 rag라는 전체 애플리케이션의 추적을 보여주는 LangSmith UI.

다음 단계

다음으로 탐색할 수 있는 주제들입니다:
  • 추적 통합은 다양한 LLM 제공자와 에이전트 프레임워크에 대한 지원을 제공합니다.
  • 추적 필터링은 상당한 양의 데이터를 포함하는 추적 프로젝트에서 데이터를 효과적으로 탐색하고 분석하는 데 도움이 됩니다.
  • RAG 애플리케이션 추적은 개발부터 프로덕션까지 애플리케이션에 관찰성을 추가하는 전체 튜토리얼입니다.
  • 특정 프로젝트로 추적 전송은 추적의 대상 프로젝트를 변경합니다.

비디오 가이드


Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.
I