Langfuse 평가 핵심 개념 (Scores·Methods·Experiments)

Langfuse 평가 핵심 개념 (Scores·Methods·Experiments)

LLM 애플리케이션은 끊임없이 "테스트하고 모니터링하는 루프"를 돌아요. 그 중심에 평가 개념들이 있는데, Langfuse에서는 점수(score), 평가 방법(evaluation method), 데이터셋(dataset), 실험(experiment)이 서로 맞물려 동작해요. 오프라인 평가는 배포 전에 고정 데이터셋 위에서 새 프롬프트·모델을 돌려보는 것이고, 온라인 평가는 라이브 트레이스에 점수를 매겨 실무 트래픽의 문제를 잡는 거예요. 이 페이지에서는 그 개념들이 어떻게 쌓이는지 정리할게요.

출처: Langfuse Evaluation Core Concepts

평가 루프 (The Evaluation Loop)

LLM 앱은 보통 아래와 같은 루프를 반복해요. 대표적인 워크플로우를 고객 지원 챗봇으로 보면요.

  1. 응답이 덜 딱딱해지도록 프롬프트를 수정해요.
  2. 배포 전에 실험을 돌려요—고객 질문 데이터셋에 새 프롬프트를 테스트하는 오프라인 평가죠.
  3. 점수와 출력을 검토해요. 톤은 좋아졌는데 응답이 길어지고 중요한 링크를 빼먹는 경우가 생겼어요.
  4. 프롬프트를 다듬고 실험을 다시 돌려요.
  5. 결과가 좋아졌네요. 새 프롬프트를 프로덕션에 배포해요.
  6. 온라인 평가로 새 엣지 케이스를 잡으며 모니터링해요.
  7. 고객이 프랑스어로 질문했는데 봇이 영어로 답하는 걸 발견했어요.
  8. 이 프랑스어 질문을 데이터셋에 추가해서 다음 실험에서 잡히게 해요.
  9. 프랑스어 응답을 지원하도록 프롬프트를 수정하고 또 다른 실험을 돌려요.

시간이 지나면 데이터셋은 몇 개의 예시에서 다양하고 대표적인 실무 테스트 케이스 집합으로 자라나요.

점수 (Scores)

점수(Scores) 는 평가 결과를 저장하는 Langfuse의 보편적 데이터 객체예요. LLM 출력에 품질 판단을 내릴 때마다—사람 주석이든, LLM 심판이든, 프로그램적 검사든, 최종 사용자 피드백이든—결과는 점수로 저장돼요. 점수는 트레이스·관찰·세션·데이터셋 실행에 붙일 수 있고, 각 점수는 이름(name), 값(value), 데이터 타입(NUMERIC·CATEGORICAL·BOOLEAN·TEXT)을 가져요.

평가 방법 (Evaluation Methods)

평가 방법은 트레이스·관찰·세션·데이터셋 실행에 점수를 매기는 함수예요. 여러 평가 방법을 조합해 점수를 추가할 수 있어요.

방법 내용 언제 쓰나요
LLM-as-a-Judge 커스텀 기준으로 LLM이 출력을 평가 규모 있는 주관 평가 (톤·정확성·유용성)
Code evaluators 커스텀 Python·TypeScript 로직으로 점수화 결정적 검사, 구조화 출력 검증, 커스텀 비즈니스 규칙
Scores via UI Langfuse UI에서 트레이스에 직접 점수 추가 빠른 품질 스팟 체크, 개별 트레이스 검토
Annotation Queues 커스텀 가능한 큐로 구조화된 사람 검토 워크플로우 ground truth 구축, 체계적 라벨링, 팀 협업
Scores via API/SDK Langfuse API·SDK로 프로그래밍 방식 점수 추가 커스텀 평가 파이프라인, 결정적 검사, 자동화 워크플로우

새 평가 방법을 설정할 때는 Score Analytics로 만든 점수를 분석·검토할 수 있어요.

온라인 평가 (Online Evaluation)

온라인 평가에서는 유입되는 프로덕션 관찰을 매칭할 규칙(rule) 을 만들어요. 규칙이 그에 붙은 평가자를 트리거해 관찰에 점수를 매기죠. 이렇게 실무 트래픽의 문제를 잡아요.

  • 평가자(Evaluator) 는 Langfuse가 데이터를 어떻게 점수화할지 정의해요. 배치 평가로 과거 관찰을 점수화하거나, 규칙에 붙여 유입되는 운영 관찰을 점수화하거나, 프롬프트 실험 실행을 점수화하는 데 써요.
  • 규칙(Rule) 은 어떤 유입 관찰을 Langfuse가 점수화할지 정의해요. 필터와 샘플링 비율로 관찰을 선별한 뒤, 하나 이상의 평가자를 트리거하는 용도예요.

평가자는 여러 규칙에 걸쳐 재사용할 수 있어요. LLM-as-a-Judge의 경우 Langfuse는 규칙과 매칭되는 관찰을 상대로 평가자의 기본 변수 매핑을 검증해요. 데이터 모양이 다르면 특정 평가자-규칙 할당에 대해 매핑을 덮어쓸 수 있어요.

과거 관찰에 평가자 실행

평가자를 저장할 때 Also run on past observations를 켜면 규칙에 매칭되는 기존 관찰까지 점수화해요. 최대 6개월 범위의 프리셋이나 커스텀 범위를 고르고 최대 25,000개 관찰을 평가할 수 있어요. 시작 전에 예상 LLM 비용을 확인하세요.

평가자 결과 모니터링

커스텀 대시보드로 시간에 따른 점수·성능을 추적해요. 평가자의 점수나 비용이 임계값을 넘으면 알림을 받으려면 평가자를 열고 Add alert를 클릭하면 돼요. Score thresholdCost threshold(개별 LLM-as-a-Judge 평가자용) 프리필 알림을 만들 수 있어요.

배치 평가 (Batch Evaluation)

수집된 후의 과거 관찰 집합을 점수화하는 데 배치 평가를 써요. 새 평가자나 업데이트된 평가자를 기존 프로덕션 데이터에 테스트하고 싶을 때 유용하죠. 절차는 간단해요—Traces 테이블을 열고, 평가하려는 기간·트레이스 기준으로 필터링하고, 매칭되는 행을 선택한 뒤 Actions → Evaluate로 평가자를 선택해 실행해요. 결과 점수는 각 선택 트레이스의 매칭 관찰에 붙어요.

실험 (Experiments)

실험(Experiment) 은 데이터셋 위에서 애플리케이션을 실행하고 출력을 평가하는 작업이에요. 프로덕션 배포 전에 변경 사항을 테스트하는 방식이죠. 먼저 구성 요소를 이해해요.

객체 정의
Dataset 테스트 케이스(데이터셋 항목)의 모음. 데이터셋에 실험을 실행 가능
Dataset item 데이터셋의 한 항목. 테스트할 시나리오(입력)와 선택적 기대 출력을 담음
Task 실험에서 테스트할 애플리케이션 코드. 각 데이터셋 항목에 수행되며 출력을 점수화
Evaluation Method 실험 결과를 점수화하는 함수. 코드 평가자, SDK로 수집한 점수, LLM-as-a-Judge 등
Score 평가의 출력
Experiment Run 모든 데이터셋 항목에 task를 한 번 실행해 출력(과 점수)을 생성

개념적으로 이렇게 맞물려요. 주어진 데이터셋에 실험을 실행하면 각 데이터셋 항목이 정의한 task 함수로 전달돼요. task 함수는 보통 테스트하려는 LLM 호출이고, 각 항목에 대해 출력을 만들어요. 이 과정이 experiment run이고, 항목에 연결된 출력 모음이 실험 결과예요. 그 결과는 다양한 평가 방법으로 점수화하고, 점수를 바탕으로 모든 테스트 케이스에 걸친 애플리케이션 성능의 완전한 그림을 얻을 수 있어요.

실험 실행 방식

  • SDK로 프로그래밍 방식 실행: task·평가 로직을 완전히 제어할 수 있어요. Experiments via SDK
  • Langfuse 인터페이스에서 직접: 데이터셋과 프롬프트 버전을 선택해 코드 없이 프롬프트를 빠르게 반복할 수 있어요. Experiments via UI
  • OpenTelemetry로: 이미 OTel로 트레이스를 내보내고 Python·JS/TS SDK를 안 쓴다면, 그 스팬에 실험 속성을 붙여 실험 실행으로 그룹화할 수 있어요. Experiments via OpenTelemetry

선택 사항이지만, Datasets를 Langfuse에서 관리하는 것을 권장해요. 같은 데이터에 대한 서로 다른 실험의 UI 비교 테이블을 쓰고, 프로덕션·스테이징 트레이스를 바탕으로 데이터셋을 반복적으로 개선할 수 있기 때문이에요.

더 알아보기 (Learn more)