LLM 애플리케이션에서 평가는 코드의 테스트 스위트와 같습니다. 평가셋이 없으면 프롬프트를 고치든, 모델을 바꾸든, RAG 청킹을 바꾸든 좋아졌는지 나빠졌는지 알 방법이 없습니다. "몇 개 물어보니 괜찮더라"는 평가가 아니라 느낌입니다.
핵심 한 줄: 평가의 목적은 점수를 매기는 것이 아니라 다음에 무엇을 고칠지 지목하는 것입니다. 어디가 문제인지 말해 주지 못하는 평가 리포트는 하지 않은 것과 같습니다.
| 어려움 | 설명 | 대응 |
|---|---|---|
| 정답이 하나가 아니다 | 같은 의미를 여러 표현으로 쓸 수 있어 문자열 비교가 안 통합니다. | 루브릭 기반 채점, LLM Judge, 의미 유사도 |
| 비결정성 | 같은 입력에도 매번 출력이 다릅니다. | 같은 케이스를 여러 번 실행해 분포로 봅니다. |
| 다단계 파이프라인 | RAG·에이전트는 검색·도구 호출·생성 중 어디서 틀렸는지 최종 답만으로는 모릅니다. | 구간별 지표와 트레이스(trace) 기록 |
| 채점 비용 | 사람 평가는 느리고 비싸고, LLM Judge 는 편향이 있습니다. | 코드 채점 우선 → LLM Judge → 사람은 보정·샘플 검수 |
| 데이터 오염 | 공개 벤치마크 문제가 모델 학습 데이터에 섞여 점수가 부풀려집니다. | 자체 골든셋, 시간 분할 |
| 지표 해킹 | 지표가 측정하는 것만 좋아지고 진짜 목표는 안 좋아집니다(Goodhart 의 법칙). | 결과 + 과정 + 안전을 함께 측정 |
| 분포 변화 | 오프라인 평가셋과 실제 사용자 질문이 점점 달라집니다. | 운영 로그로 평가셋을 계속 갱신 |
어떤 지표든 결국 누군가(무언가)가 채점합니다. 싸고 결정적인 것부터 씁니다.
| 채점기 | 예 | 장점 | 단점 |
|---|---|---|---|
| 코드 기반 | 정확 일치, 정규식, JSON 스키마 검증, 단위 테스트 실행, DB 최종 상태 확인 | 빠르고 싸고 재현 가능, 디버깅 쉬움 | 표현이 다른 정답을 오답 처리. 주관적 품질은 못 봄 |
| 모델 기반 (LLM Judge) | 루브릭 채점, 두 답 비교(pairwise), 여러 심판 합의 | 유연함, 개방형 답변 채점 가능, 확장성 | 비결정적, 비용, 편향. 사람 기준으로 보정 필요 |
| 사람 | 도메인 전문가 검토, 샘플 검수 | 가장 신뢰도 높음, LLM Judge 보정 기준 | 느리고 비쌈, 평가자 간 편차 |
LLM Judge 의 설계·편향·보정은 → LLM Judge
⚠️ 함정: 정답이 명확한 작업(분류, 추출, 코드 실행 결과, JSON 형식)에 LLM Judge 를 쓰지 마세요. 결정적 규칙으로 판정할 수 있는 것은 모델의 감각에 맡기지 않습니다.
| 지표 | 질문 | 주로 쓰는 채점 |
|---|---|---|
| 정확성 (Correctness) | 사실에 기반하고 오류가 없는가 | 참조 답 비교, LLM Judge |
| 환각 (Hallucination) | 허위 정보나 근거 없는 내용이 있는가 | 근거 대비 LLM Judge |
| 답변 관련성 (Relevancy) | 질문 의도와 주제에 맞는가 | LLM Judge |
| 지시 준수 (Instruction Following) | 프롬프트 템플릿의 지침(길이, 톤, 금지사항)을 지켰는가 | 코드(길이·형식) + LLM Judge |
| 형식 준수 | JSON 파싱 가능, 스키마 일치 | 코드 |
| 안전·책임 | 편향·유해·개인정보 노출이 있는가 | 분류 모델, LLM Judge, 레드팀 |
| 지연 (Latency) | 첫 토큰까지·전체 응답까지 걸리는 시간 (P50/P95) | 계측 |
| 비용 (Efficiency) | 요청당 토큰·금액 | 계측 |
| 사용자 만족도 | 좋아요/싫어요, 재질문률, 이탈률 | 온라인 지표 |
RAG 는 검색(retrieval)과 생성(generation)을 따로 채점해야 어디가 문제인지 알 수 있습니다. 아래는 Ragas·DeepEval 등이 공통으로 쓰는 지표입니다.
| 지표 | 무엇을 보나 | 필요한 입력 | 대상 |
|---|---|---|---|
| Context Precision | 관련 있는 문서 조각이 상위에 랭크됐는가 | 질문, 문맥 (+참조 답) | 검색·리랭크 |
| Context Recall | 정답에 필요한 정보가 검색 결과에 빠짐없이 들어왔는가 | 문맥, 참조 답 | 검색 |
| Faithfulness | 답변의 모든 주장이 검색된 문맥으로 뒷받침되는가 (답을 문장 단위 주장으로 쪼개 하나씩 검증) | 문맥, 답변 | 생성 |
| Answer Relevancy | 답변이 질문에 직접 답하는가 | 질문, 답변 | 생성 |
| Recall@k, MRR, nDCG | 정답 문서가 top-k 안에 있는가, 몇 위인가 | 질문별 정답 문서 ID | 검색 (전통 IR 지표, LLM 불필요) |
진단 요령:
| 증상 | 문제 위치 |
|---|---|
| Context Recall 낮음 | 검색이 필요한 문서를 못 가져옴 → 청킹·임베딩·하이브리드 검색·쿼리 재작성 |
| Context Recall 높음 + Context Precision 낮음 | 가져오긴 하는데 순위가 나쁨 → 리랭커, top-k 조정 |
| 문맥은 좋은데 Faithfulness 낮음 | 생성기가 문맥을 무시하고 지어냄 → 프롬프트 제약, 모델 교체 |
| Faithfulness 높음 + Answer Relevancy 낮음 | 근거에 충실하지만 질문에 답하지 않음 → 프롬프트·질문 이해 |
⚠️ 함정: Faithfulness 는 "문맥에 충실한가"이지 "사실인가"가 아닙니다. 검색된 문서 자체가 틀렸거나 오래됐으면 Faithfulness 는 높은데 답은 틀립니다. 참조 답 기반 정확성 지표를 함께 두세요.
RAG 구조와 검색 품질 문제는 → RAG 개요, 제로 리콜 4층 트러블슈팅
에이전트는 여러 턴에 걸쳐 도구를 호출하고 환경을 바꿉니다. 최종 답만 보면 안 되고, 결과(Outcome)와 경로(Trajectory)를 따로 봐야 합니다.
| 층 | 지표 | 설명 |
|---|---|---|
| 결과 | Task Success Rate | 작업이 실제로 완료됐는가. 에이전트의 "완료했습니다"라는 말이 아니라 환경의 최종 상태(DB 에 예약이 생겼는가, 테스트가 통과하는가)로 판정 |
| 경로 | Trajectory 평가 | 불필요한 단계, 루프, 금지된 경로를 지나지 않았는가 |
| Tool-call Accuracy | 올바른 도구를, 올바른 인자로, 올바른 순서로 호출했는가 | |
| 단계 효율 | 목표 달성까지의 단계 수·토큰 | |
| 안전 | 레드라인 위반 | 권한 밖 도구 호출, 되돌릴 수 없는 작업을 확인 없이 실행, 검증 우회 |
| 시스템 | 지연·비용·안정성 | 작업당 소요 시간·비용, 타임아웃·재시도율 |
⚠️ 함정: 에이전트는 지표가 보상하는 것만 합니다. "테스트 통과"만 채점하면 테스트 코드를 고치거나 검증을 건너뛰는 지름길을 찾습니다. 성공 판정은 우회할 수 없는 곳(최종 상태)에서 하고, 경로 규칙을 함께 거세요.
더 깊은 내용은 딥다이브를 보세요.
| 구분 | 오프라인 평가 | 온라인 평가 |
|---|---|---|
| 시점 | 배포 전 (개발·CI) | 배포 후 (운영) |
| 데이터 | 고정된 골든셋 | 실제 사용자 트래픽 |
| 방법 | 골든셋 일괄 실행, 회귀 테스트 | A/B 테스트, 카나리 배포, 운영 트레이스 샘플링 채점 |
| 지표 | 정확성, faithfulness, 작업 성공률 등 | 사용자 피드백(좋아요/싫어요), 재질문률, 전환율, 에스컬레이션률, 지연·비용 |
| 장점 | 재현 가능, 빠른 반복, 배포 차단 가능 | 실제 분포, 실제 비즈니스 효과 |
| 한계 | 실제 사용자 분포와 괴리 | 사고가 난 뒤에 발견, 노이즈 많음, 원인 분석 어려움 |
둘은 대체 관계가 아니라 하나의 순환 고리입니다.
⚠️ 함정: 오프라인 평가를 전부 통과했는데 운영에서 터지는 가장 흔한 이유는 평가셋이 "입력 → 최종 답"만 봤기 때문입니다. 도구 타임아웃, 긴 대화, 예상 밖 사용자 입력은 골든셋에 없습니다. 운영 실패를 평가셋으로 되돌려 넣는 고리가 없으면 오프라인 점수는 점점 의미를 잃습니다.
→ 프로덕션 투입 전 평가, 오프라인 평가 통과 후 프로덕션 이탈
공개 벤치마크는 내 서비스의 질문을 대표하지 못합니다. 결국 자체 평가셋(골든셋)이 필요합니다.
YAML 하나로 프롬프트·모델·테스트 케이스·채점 규칙을 선언하고 CLI 로 실행합니다. 코드 채점(contains, is-json, javascript)과 LLM 채점(llm-rubric)을 섞을 수 있습니다.
| 도구 | 성격 | 라이선스·호스팅 | 강점 | 적합한 경우 |
|---|---|---|---|---|
| Ragas | 평가 지표 라이브러리 | Apache-2.0 | RAG 지표(faithfulness, context precision/recall)를 대중화, 에이전트·도구 호출 지표, 테스트셋 합성 | RAG 파이프라인 지표 계산. UI 는 없어 다른 도구와 조합 |
| DeepEval | pytest 스타일 평가 프레임워크 | Apache-2.0 (+Confident AI 클라우드) | RAG·에이전트(Task Completion, Tool Correctness)·멀티턴·안전 지표, G-Eval, deepeval test run 으로 CI 통합 | 평가를 단위 테스트처럼 CI 에 넣고 싶을 때 |
| TruLens | 피드백 함수 기반 평가·추적 | MIT | RAG Triad(context relevance, groundedness, answer relevance), 앱 버전 비교 | RAG 앱 실험 비교 |
| promptfoo | CLI·YAML 기반 평가·레드팀 | MIT | 선언형 테스트, 여러 모델·프롬프트 매트릭스 비교, 레드팀(프롬프트 인젝션 등) 자동화. 2026년 OpenAI 가 인수했으나 오픈소스 유지 발표 | 프롬프트 회귀 테스트, 보안 테스트 |
| LangSmith | 트레이싱 + 데이터셋 + 실험 플랫폼 | 상용 SaaS (LangChain 사) | 트레이스에서 데이터셋 생성, 실험 비교, 온라인 평가, LangChain/LangGraph 와 긴밀 | LangChain 생태계, 관리형 선호 |
| Langfuse | 오픈소스 관측·평가·프롬프트 관리 | MIT(핵심) + 셀프호스팅 / 클라우드. 2026년 ClickHouse 가 인수 | 트레이싱, 데이터셋·실험, LLM Judge 자동 채점, 사용자 피드백 수집 | 셀프호스팅 필요, 프레임워크 중립 |
| Arize Phoenix | OpenTelemetry 기반 관측·평가 | Elastic License 2.0 (소스 공개) | OpenInference 트레이싱, 평가, 실험 | OTel 기반 관측 스택 |
| Inspect | 평가 프레임워크 | MIT (영국 AI Security Institute) | 에이전트·샌드박스 기반 평가 태스크 작성 | 에이전트 역량·안전성 평가 |
| lm-evaluation-harness | 공개 벤치마크 실행기 | MIT (EleutherAI) | 수백 개 벤치마크를 동일 조건으로 실행. KMMLU·HAE-RAE·KoBEST·CLIcK·HRM8K 태스크 포함 | 모델 자체의 벤치마크 점수 측정 (파인튜닝 전후 망각 확인 등) |
선택 기준 요약:
⚠️ 함정: 도구가 제공하는 기본 지표를 그대로 합격 기준으로 쓰지 마세요. 대부분 내부적으로 LLM Judge 이며, 기본 판정 프롬프트가 내 도메인의 "좋은 답"과 일치한다는 보장이 없습니다. 도입 초기에 수십 건을 사람 판정과 비교해 보정하세요.
영어 벤치마크를 번역한 데이터는 한국 문화·제도·언어 특성을 반영하지 못합니다. 한국어 서비스라면 한국어 원천 데이터로 만든 벤치마크를 봅니다.
| 벤치마크 | 내용 | 규모·형식 | 링크 |
|---|---|---|---|
| KMMLU | 한국 자격시험 원문 기반 전문 지식, 인문~STEM 45과목 | 35,030 문항, 객관식 | 논문 · 데이터 |
| KMMLU-HARD | KMMLU 중 어려운 문항만 추린 버전 | 객관식 | 데이터 |
| KMMLU-Redux / KMMLU-Pro | Redux: KMMLU 를 국가기술자격 문항으로 재구성하고 오류 제거. Pro: 국가전문자격(면허) 시험 기반 | 객관식 (2025) | 논문 · Redux · Pro |
| HAE-RAE Bench | 한국 고유 지식: 어휘·역사·일반 상식·독해 4개 영역 6개 과제 | 객관식 | 논문 · 데이터 |
| CLIcK | 한국 문화·언어 지식. 공식 시험·교과서 기반, 언어/문화 아래 11개 범주 | 1,995 문항 | 논문 · 데이터 |
| KorNAT | 국가 정렬(National Alignment): 한국 사회 가치관(6,174명 설문 기반)과 상식(교과서·검정고시 자료 기반) | 사회 가치 4K + 상식 6K, 객관식 | 논문 · 데이터 |
| KoBEST | 언어학자가 설계한 한국어 이해 5개 과제 | 과제별 분류·선택 | 논문 · 데이터 |
| HRM8K | 영어-한국어 병렬 수학 추론 문제 | 8,011 문항 | 논문 · 데이터 |
실행은 lm-evaluation-harness 로 할 수 있습니다. 파인튜닝 전후로 돌리면 한국어 범용 능력이 망가지지 않았는지(catastrophic forgetting) 확인하는 용도로 유용합니다.
HAE-RAE 팀의 haerae-evaluation-toolkit 도 한국어 평가 전용 도구로 공개돼 있습니다.
| 한계 | 설명 |
|---|---|
| 데이터 오염 | 벤치마크 문항이 웹에 공개돼 있어 모델 학습 데이터에 섞일 수 있습니다. 점수가 실력이 아니라 암기일 수 있습니다. |
| 포화 | 최신 모델들이 상한에 가까운 점수를 내면 모델 간 차이를 구별하지 못합니다. 그래서 HARD·Pro 같은 후속 버전이 계속 나옵니다. |
| 리더보드 과적합 | 벤치마크 점수를 올리는 방향으로 모델을 튜닝하면 점수는 오르고 실사용 품질은 그대로입니다. |
| 형식 괴리 | 대부분 객관식입니다. 실제 서비스는 자유 서술·멀티턴·도구 사용인데, 객관식 정답률은 이를 대변하지 못합니다. |
| 측정 조건 민감도 | 프롬프트 형식, few-shot 개수, log-likelihood 방식인지 생성 방식인지에 따라 같은 모델도 점수가 크게 달라집니다. 다른 곳에서 보고된 점수끼리 직접 비교하면 안 됩니다. |
| 도메인 불일치 | "KMMLU 점수가 높다"가 "우리 회사 환불 정책 질문에 잘 답한다"를 뜻하지 않습니다. |
결론: 공개 벤치마크는 후보 모델을 좁히는 1차 필터로만 쓰고, 최종 선택과 배포 판단은 자체 골든셋으로 합니다.