LLM Evals 입문
메뉴
Moonshot Notes orbit notebook mark
Moonshot NotesAI 도구와 개발 워크플로우 기록하는 공간

AI Backend

LLM Evals 입문

LLM 서비스에서 일반 테스트로 잡기 어려운 답변 품질을 Evals, golden set, grader, regression test로 측정하고 배포 기준으로 연결하는 방법을 정리합니다.

LLM Evals 입문 hero image
Markdown약 1103 tokens

테스트 코드로 잡히지 않는 품질을 측정하기

이 글에서는 LLM Evals의 기본 개념과 실무 적용 방법을 정리합니다.

일반 백엔드 테스트는 비교적 명확합니다. 입력이 같으면 출력이 같아야 하고, DB 상태가 기대한 대로 바뀌어야 합니다. 하지만 LLM 서비스는 다릅니다. 같은 질문에도 표현이 조금씩 달라질 수 있고, 답변이 그럴듯하지만 틀릴 수 있고, 프롬프트를 조금 바꿨을 뿐인데 특정 케이스 품질이 떨어질 수 있습니다.

그래서 LLM 서비스에는 별도의 평가 체계가 필요합니다.

분석 기준일: 2026-05-12
실습 기준 환경: OpenAI Evals 개념, Python, pytest, JSONL dataset
주요 참고자료: OpenAI Evals Docs, OpenAI Evaluation Best Practices

핵심 요약

  • Evals는 LLM 출력이 기대 기준을 만족하는지 측정하는 구조화된 테스트다.
  • Golden Set은 회귀 테스트를 위한 대표 질문 데이터셋이다.
  • LLM 품질 평가는 correctness, groundedness, citation accuracy, safety를 나눠야 한다.
  • 프롬프트 변경과 모델 변경은 eval 결과 없이 배포하면 위험하다.
  • Evals는 테스트 코드의 대체물이 아니라 보완재다.

1. 왜 LLM에는 별도 평가가 필요한가

LLM 서비스의 품질 문제는 일반 테스트로 잘 잡히지 않습니다.

문제일반 테스트Eval
JSON schema 오류잘 잡음보조 가능
답변 사실성잘 못 잡음필요
출처 정확성제한적필요
답변 톤제한적가능
프롬프트 변경 회귀잘 못 잡음매우 중요
모델 변경 영향잘 못 잡음매우 중요

즉, 테스트 코드는 시스템이 깨졌는지 확인하고, eval은 답변이 쓸 만한지 확인합니다.

2. Unit Test와 Eval의 차이

구분Unit TestEval
대상코드 로직모델 출력 품질
결과deterministicprobabilistic
기준expected valuerubric, grader, human label
실행 시점CICI + 배포 전 + 주기적
실패 의미코드 오류 가능성품질 저하 가능성

둘 다 필요합니다. schema validation은 unit/integration test로 잡고, 답변 품질은 eval로 봅니다.

3. Golden Set 만들기

Golden Set은 대표 질문과 기대 기준을 모은 데이터셋입니다.

// 예시 JSON 구조입니다.{  "id": "rag_001",  "question": "Redis Cache Aside 패턴은 언제 사용하나요?",  "expected_facts": [    "캐시를 먼저 조회한다",    "miss 시 원본 데이터 저장소를 조회한다",    "조회 결과를 TTL과 함께 캐시에 저장한다"  ],  "must_cite": true,  "category": "cache"}

좋은 golden set은 다양한 실패 유형을 포함해야 합니다.

# 예시입니다.[ ] 쉬운 질문[ ] 애매한 질문[ ] 문서에 없는 질문[ ] 최신성이 필요한 질문[ ] 권한이 필요한 질문[ ] citation이 중요한 질문[ ] 안전 정책이 필요한 질문

4. 평가 기준 정의

평가 기준은 하나로 뭉치면 안 됩니다.

기준질문
Correctness답이 사실적으로 맞는가?
Groundedness제공된 문서 근거에 기반했는가?
Citation Accuracycitation이 실제 근거와 연결되는가?
Completeness필요한 내용을 빠뜨리지 않았는가?
Safety위험하거나 금지된 내용을 피했는가?
Format요구한 schema/format을 지켰는가?

5. Grader 설계

Grader는 사람이 할 수도 있고, 규칙 기반일 수도 있고, LLM-as-a-Judge일 수도 있습니다.

Grader 유형장점단점
Exact match빠르고 명확표현 다양성에 약함
Rule-based안정적복잡한 품질 판단 어려움
Human review신뢰도 높음비용 큼
LLM-as-a-Judge확장성 좋음judge 편향과 불안정성

초기에는 rule-based + human review로 시작하고, 이후 LLM judge를 보조로 쓰는 편이 안전합니다.

6. RAG 평가 나누기

RAG는 검색과 생성을 분리해서 평가해야 합니다.

# 예시입니다.Retrieval Eval:정답 문서가 top-k 안에 들어왔는가? Generation Eval:검색된 문서를 근거로 올바른 답을 했는가?

예시:

지표설명
recall@k정답 문서가 top-k에 포함되는 비율
precision@k검색 결과 중 관련 문서 비율
answer_correctness답변의 사실성
citation_accuracy출처 정확성
groundedness근거 기반성

7. Release Gate로 연결하기

Eval은 읽고 끝나는 리포트가 아니라 배포 기준이 되어야 합니다.

# 예시입니다.프롬프트 v3 배포 조건:- overall pass rate >= 90%- critical set pass rate >= 98%- citation accuracy >= 95%- regression count <= 3

프롬프트나 모델을 바꾸기 전후를 비교합니다.

# 예시입니다.baseline: prompt.v2 + model.Acandidate: prompt.v3 + model.Acandidate: prompt.v2 + model.B

8. 운영 지표와 dashboard

지표의미
eval_pass_rate전체 통과율
eval_regression_count이전보다 나빠진 케이스 수
eval_category_pass_rate카테고리별 품질
citation_accuracy출처 정확도
human_review_required_rate사람 검토 필요 비율

이 지표는 배포 판단, 품질 개선, 프롬프트 변경 기록에 사용됩니다.

9. 실무 체크리스트

# 예시입니다.[ ] 대표 질문 golden set이 있는가?[ ] 검색 평가와 답변 평가를 분리했는가?[ ] correctness와 groundedness를 구분했는가?[ ] citation accuracy를 평가하는가?[ ] 프롬프트 변경 전후 eval을 비교하는가?[ ] critical case를 별도 관리하는가?[ ] eval 실패 케이스를 다음 개선에 반영하는가?[ ] eval 결과가 release gate와 연결되는가?

10. Q&A

Q1. Eval은 얼마나 자주 실행해야 하나요?

프롬프트, 모델, retrieval 로직이 바뀔 때는 반드시 실행하는 것이 좋습니다. 운영 중에는 주기적으로 샘플링해 drift를 확인할 수 있습니다.

Q2. LLM-as-a-Judge를 믿어도 되나요?

보조 수단으로는 유용하지만 완전히 신뢰하면 위험합니다. 중요한 케이스는 human review나 rule-based check와 함께 써야 합니다.

Q3. Golden Set은 몇 개부터 시작하면 되나요?

처음에는 30~50개라도 충분합니다. 중요한 것은 숫자보다 실패 유형을 다양하게 담는 것입니다.

11. 참고자료와 불확실성

참고자료

불확실성

  • Eval 기준은 서비스 도메인에 맞게 조정해야 합니다.
  • LLM-as-a-Judge는 judge 모델, rubric, temperature에 따라 결과가 달라질 수 있습니다.

댓글

GitHub 계정으로 로그인하면 댓글을 남길 수 있습니다. 댓글은 GitHub Discussions를 통해 운영됩니다.

TOP