Skip to main content

LLMOps 통합 가이드

RAG 시스템 전 과정에서 관찰성(Observability), 평가(Evaluation), 프롬프트 관리(Prompt Management)를 체계적으로 운영하기 위한 가이드입니다. LangfuseLangSmith 두 가지 도구를 비교하며 세팅 체크리스트를 제공합니다.

공통 세팅 체크리스트

모든 LLMOps 도구에 공통으로 적용되는 기본 세팅입니다.
  • LLMOps 도구 선택: Langfuse 또는 LangSmith
  • 프로젝트 생성 (환경 분리 권장: dev / staging / prod)
  • API 키 발급 및 안전 저장 (Secrets Manager 또는 .env)
  • Trace 메타데이터: env, tenant/team, user/session, usecase, language
  • Retrieval 스팬 기록: top_k, filters, returned_doc_ids, rerank_on/off
  • Generation 스팬 기록: model, temperature, prompt_version, input_tokens/output_tokens, latency
  • PII/민감정보 마스킹 규칙 (로그/트레이스 저장 전)
  • “프롬프트를 코드에 하드코딩하지 않는다” 원칙 수립
  • 버전/라벨(또는 커밋)로 배포: staging에서 검증 후 prod로 승격
  • 프롬프트 변경 이력 추적 가능하도록 관리
  • Dataset v1 생성 (최소 50~100문항)
  • 자동 평가 (LLM Judge 또는 휴먼 라벨링)로 점수 누적
  • 변경 전/후 회귀(Regression) 평가 루틴 고정

LangSmith 세팅 가이드

LangChain 생태계와 긴밀하게 통합되며, Dataset 기반 반복 평가Playground/Hub 기반 프롬프트 관리가 강점입니다.

트레이싱 설정

LangChain/LangGraph 기반이면 환경변수만 설정하면 자동 추적됩니다.
import os

# 방법 1: LangChain 네이티브 (가장 간단)
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "your-api-key"
os.environ["LANGCHAIN_PROJECT"] = "rag-production"

# 방법 2: LangSmith SDK (프레임워크 무관)
os.environ["LANGSMITH_TRACING"] = "true"
os.environ["LANGSMITH_API_KEY"] = "your-api-key"
os.environ["LANGSMITH_PROJECT"] = "rag-production"
확인할 수 있는 것:
  • 각 노드(검색, 생성)의 입출력
  • 검색된 문서 내용과 유사도 점수
  • LLM 호출의 프롬프트와 응답
  • 실행 시간과 토큰 사용량

Langfuse 세팅 가이드

오픈소스 LLM 관찰성 플랫폼으로, 셀프호스팅 가능하며 환경별 라벨 배포LLM-as-a-Judge 평가가 강점입니다.

트레이싱 설정

LangChain과도 연동 가능하며, 네이티브 SDK도 제공합니다.
# 방법 1: LangChain 콜백
from langfuse import Langfuse
from langfuse.langchain import CallbackHandler

# Langfuse 클라이언트 초기화 (앱 시작 시 1회)
Langfuse(
    public_key="your-public-key",
    secret_key="your-secret-key",
    host="https://cloud.langfuse.com",  # 또는 셀프호스팅 URL
)

# 콜백 핸들러 생성
langfuse_handler = CallbackHandler()

# 체인 실행 시 콜백 전달
result = chain.invoke(
    "질문",
    config={"callbacks": [langfuse_handler]},
)
# 방법 2: 데코레이터 (네이티브)
from langfuse.decorators import observe

@observe()
def rag_pipeline(question: str):
    docs = retriever.invoke(question)
    answer = llm.invoke(format_prompt(docs, question))
    return answer
강점: Trace/Span 구조로 각 스텝의 지연/비용/에러를 세밀하게 추적

도구 비교 요약

기능LangSmithLangfuse
트레이싱환경변수 설정만으로 자동콜백/데코레이터 방식 (v3 싱글톤 패턴)
LangChain 통합네이티브 (가장 간편)콜백 핸들러로 통합
평가Dataset + Playground 실험Dataset + LLM-as-Judge + Annotation Queue
프롬프트 관리Hub/Playground/커밋UI + 버전/라벨/환경별 배포
셀프호스팅불가 (SaaS)가능 (Docker/K8s)
가격무료 티어 + 유료오픈소스 무료 + 클라우드 유료
추천 시나리오LangChain 생태계 올인셀프호스팅/운영 유연성 필요
두 도구 모두 우수하며, 팀의 기술 스택과 운영 요구사항에 맞게 선택하세요. LangChain/LangGraph를 주로 사용한다면 LangSmith, 셀프호스팅이 필요하거나 프레임워크에 구애받지 않으려면 Langfuse가 적합합니다.

참고 자료

자료링크
Langfuse Observabilitylangfuse.com/docs/tracing
Langfuse Evaluationlangfuse.com/docs/scores
Langfuse Prompt Managementlangfuse.com/docs/prompts
LangSmith Tracingdocs.smith.langchain.com
LangSmith Evaluationdocs.smith.langchain.com/evaluation
LangSmith Prompt Engineeringdocs.smith.langchain.com/prompt-engineering