요약
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 노트북에서 실행 가능
- 애플리케이션을 데이터셋에 대해 종단간 테스트
- UI를 통한 실험:
6. 추가 리소스 및 커뮤니티
- 문서: 기능 작동 방식에 대한 소개
- 가이드: 종단간 설정 예시를 안내하는 워크스루
- GitHub Discussions: 트레이싱 설정 관련 질문 및 커뮤니티/유지보수자의 조언
핵심 인사이트
- 통합 워크플로우: Langfuse는 개발(오프라인)과 프로덕션(온라인) 평가를 하나의 플랫폼에서 통합하여, 데이터셋 수집부터 프로덕션 모니터링, 그리고 다시 오프라인 실험으로 이어지는 순환 워크플로우를 지원합니다.
- 다양한 평가 방법: 수동 주석, LLM-as-a-Judge, 커스텀 평가, 사용자 피드백 등 다양한 평가 방법을 유연하게 조합하여 사용할 수 있어, 각 팀의 요구사항에 맞게 평가 전략을 구성할 수 있습니다.
- 프로덕션 중심 접근: 실제 사용자 데이터에서 엣지 케이스를 발견하고 이를 데이터셋에 추가하여 지속적으로 애플리케이션을 개선하는 피드백 루프를 강조하며, 주석 큐와 자동 평가를 통해 대규모 라벨링 작업을 효율적으로 관리할 수 있습니다.
- 오픈소스 및 통합성: 모든 모델 및 에이전트 프레임워크와 호환되며 오픈소스로 제공되어, 기존 워크플로우에 쉽게 통합할 수 있고, API/SDK를 통해 자동화 및 확장이 용이합니다.
관련 자료
- Langfuse Documentation – 공식 문서
- Langfuse GitHub Discussions – 커뮤니티 Q&A
- Langfuse Interactive Demo – 영상에서 시연된 데모 애플리케이션