Langfuse Intro – Evaluations Deep Dive

요약

Langfuse의 공동 창업자이자 CEO인 Marc이 Langfuse 플랫폼의 평가(Evaluation) 기능을 심층적으로 소개합니다. 개발 단계부터 프로덕션 환경까지 전체 워크플로우를 커버하는 오픈소스 평가 도구로, LLM-as-a-Judge, 수동 주석, 커스텀 평가 등 다양한 평가 방법을 지원하며, 프롬프트 관리 및 관찰 기능과 긴밀하게 통합되어 있습니다.

주요 내용

1. Langfuse 평가 워크플로우 개요

  • 오프라인 평가 (개발 단계):
    • 정상 경로, 엣지 케이스, 적대적 입력의 데이터셋 수집
    • 에이전트 접근 방식, 모델, 프롬프트 등의 변경 사항을 데이터셋에 대해 테스트
    • 실험이 메트릭을 개선하는지 확인하기 위한 오프라인 평가 실행
  • 온라인 평가 (프로덕션):
    • 실제 사용자 데이터 캡처 및 엣지 케이스 디버깅
    • 오류 분석을 위한 랜덤 샘플링
    • 다양한 오류 카테고리 모니터링 및 우선순위 지정
    • 데이터셋에서 누락된 새로운 테스트 케이스 식별
  • 지원되는 평가 방법:
    • 수동 데이터 라벨링
    • LLM-as-a-Judge (플랫폼 내 직접 실행)
    • API/SDK를 통한 커스텀 평가 통합
    • 사용자 피드백 추적

2. 커스텀 스코어 및 사용자 피드백

  • API 및 SDK를 통한 스코어 생성:
    • langfuse.create_score()를 호출하여 트레이스에 스코어 첨부
    • 숫자형, 범주형, 불린 타입 지원
    • 선택적으로 특정 스키마 정의 가능 (예: 범주형 값 제한)
  • 사용자 피드백 구현 예시:
    • 백엔드: get_active_trace_id()로 트레이스 ID 가져오기
    • 프론트엔드: 피드백 대화 상자에서 사용자 입력 수집
    • Langfuse Web SDK의 score() 메소드로 비동기 전송
  • 트레이스 상세 정보:
    • API 스코어 (user feedback): 숫자 값과 코멘트
    • Eval 스코어 (contains PII, helpfulness, is question): LLM-as-a-Judge가 생성한 추론 포함

3. 주석(Annotation) 및 주석 큐(Annotation Queues)

  • 수동 주석 기능:
    • 단일 트레이스 보기에서 주석 스코어 추가 가능
    • 설정에서 사용 가능한 스코어 정의
  • 주석 큐 워크플로우:
    • 특정 조건의 트레이스 필터링 (예: user_feedback = 0, 지난 7일)
    • 배치 선택 후 주석 큐에 추가
    • 수동 라벨러가 큐를 처리하며 입력/출력 확인 및 라벨 적용
    • 스레드 세이프하여 수백 명의 주석자에게 워크플로우 배포 가능
  • API 지원:
    • 프로그래매틱하게 큐에 추가 가능
    • 커스텀 라벨링 UI 구축 가능 (데이터 스키마 관리 불필요)

4. LLM-as-a-Judge 프로덕션 평가

  • 사전 구축된 평가자 라이브러리:
    • Langfuse에 포함된 다양한 평가자 제공
  • 커스텀 평가자 생성 예시:
    • 평가 목표: 입력과 출력 언어가 동일한지 확인
    • 평가자 설정:
      • 이름: “same language eval”
      • 평가 모델 선택 (기본값 또는 커스텀)
      • 프롬프트 템플릿 작성 (Few-shot 예시 포함 권장)
      • 변수: trace_input, trace_output
      • 추론 프롬프트 (Chain of Thought)
      • 스코어 범위: 0 (다른 언어), 1 (같은 언어), 0.5 (불확실/미지정)
  • 평가자 실행 설정:
    • 모든 새 트레이스에 자동 실행
    • 샘플링 및 지연 설정 가능
    • 트레이스 입력/출력 변수 매핑
  • 결과 확인:
    • 트레이스 상세 페이지에서 평가 결과 및 추론 확인
    • 애플리케이션 대시보드에서 스코어 분포, 히스토그램, 이동 평균 확인

5. 오프라인 평가 및 데이터셋

  • 데이터셋 생성 방법:
    • UI에서 수동 생성
    • CSV 파일 업로드
    • SDK/API를 통한 푸시
    • 프로덕션 트레이싱에서 흥미로운 트레이스를 데이터셋에 추가
  • 데이터셋 항목 구조:
    • 입력 (Input)
    • 출력 (Output)
    • 메타데이터 (Metadata)
  • 실험(Experiments) 및 데이터셋 런(Dataset Runs):
    • UI를 통한 실험:
      • Langfuse에 저장된 프롬프트 사용
      • 예시: “QA answer with context chat” 프롬프트
      • 데이터셋 런 생성: 이름, 프롬프트 버전, 모델 선택
      • 데이터셋 선택 및 평가자 자동 첨부
      • 결과를 다른 버전과 대조 및 비교
      • 그리드 뷰에서 각 항목별 출력 및 평가 결과 확인
    • SDK를 통한 커스텀 데이터셋 런:
      • Langfuse로 계측된 애플리케이션 사용
      • 데이터셋 가져오기 및 루프 실행
      • 애플리케이션 실행 및 선택적으로 커스텀 평가 스코어 추가
      • CI 파이프라인 (일일 또는 병합 시) 또는 Jupyter 노트북에서 실행 가능
      • 애플리케이션을 데이터셋에 대해 종단간 테스트

6. 추가 리소스 및 커뮤니티

  • 문서: 기능 작동 방식에 대한 소개
  • 가이드: 종단간 설정 예시를 안내하는 워크스루
  • GitHub Discussions: 트레이싱 설정 관련 질문 및 커뮤니티/유지보수자의 조언

핵심 인사이트

  • 통합 워크플로우: Langfuse는 개발(오프라인)과 프로덕션(온라인) 평가를 하나의 플랫폼에서 통합하여, 데이터셋 수집부터 프로덕션 모니터링, 그리고 다시 오프라인 실험으로 이어지는 순환 워크플로우를 지원합니다.
  • 다양한 평가 방법: 수동 주석, LLM-as-a-Judge, 커스텀 평가, 사용자 피드백 등 다양한 평가 방법을 유연하게 조합하여 사용할 수 있어, 각 팀의 요구사항에 맞게 평가 전략을 구성할 수 있습니다.
  • 프로덕션 중심 접근: 실제 사용자 데이터에서 엣지 케이스를 발견하고 이를 데이터셋에 추가하여 지속적으로 애플리케이션을 개선하는 피드백 루프를 강조하며, 주석 큐와 자동 평가를 통해 대규모 라벨링 작업을 효율적으로 관리할 수 있습니다.
  • 오픈소스 및 통합성: 모든 모델 및 에이전트 프레임워크와 호환되며 오픈소스로 제공되어, 기존 워크플로우에 쉽게 통합할 수 있고, API/SDK를 통해 자동화 및 확장이 용이합니다.

관련 자료

Leave a Comment