Category
Evaluation은 LLM·에이전트 출력의 품질을 정량 측정하고 회귀를 잡아내는 평가 체계다. 프롬프트나 모델을 바꿀 때 체감이 아닌 수치로 판단하려면 필수이며, 한국 개발자에게는 도메인·한국어 특성을 반영한 데이터셋과 LLM-as-judge 설계가 신뢰도의 핵심이다.
프롬프트·모델·툴 정의를 바꿀 때마다 품질이 조용히 떨어지는 걸 막으려고, eval을 CI 게이트로 넣는 패턴이 자리잡고 있다. 어려운 점은 LLM 출력이 비결정적이라 단일 실행 통과/실패가 흔들린다는 것이다. 그래서 게이트는 단일 점수가 아니라 골든셋 N회 반복의 평균과 분산, 그리고 기준선 대비 차이의 신뢰구간으로 건다. promptfoo·OpenAI Evals·braintrust 같은 하니스가 PR마다 케이스를 돌리고, 핵심은 절대 임계값보다 baseline 대비 회귀 폭으로 막는 것이다. temperature를 0으로 낮춰도 완전 재현은 안 되니, flaky 케이스는 격리하고 'p95가 기준 이하로 떨어지면 차단' 식의 비대칭 게이트를 쓴다. LLM-judge를 채점기로 쓸 땐 judge 버전을 함께 고정해야 judge 자체의 드리프트가 회귀로 오인되지 않는다.
공개 벤치마크가 학습 데이터에 새어 들어간 contamination이 평가 신뢰를 갉아먹으면서, 탐지·격리 관행이 정착되고 있다. 핵심은 두 가지다. 하나는 데이터셋에 사람이 절대 검색하지 않을 카나리(canary) GUID 문자열을 심어두고, 모델이 그 문자열을 외우고 있으면 해당 셋을 봤다고 판정하는 방식. 다른 하나는 모델 학습 컷오프 이후 시점에 만들어진 문제만 모아 평가하는 시점 분리 골든셋으로, LiveBench류가 월 단위로 문항을 교체해 암기 이점을 제거한다. 정량 신호로는 같은 문제의 정답/오답 보기 순서를 바꿨을 때 정확도가 급락하면 패턴 암기를 의심한다. 실무 함의는 분명하다. 공개 리더보드 점수는 그 자체로는 무의미에 가깝고, 내부 평가는 비공개 홀드아웃과 정기 회전이 없으면 시간이 갈수록 과대평가된다.
심판 모델이 자기 계열이 쓴 답변에 점수를 더 주는 self-preference 편향이 더 정밀하게 측정되고 있다. GPT-5.x로 GPT 출력을, Claude로 Claude 출력을 채점하면 교차 채점 대비 승률이 수 퍼센트포인트 부풀려진다는 재현 결과가 쌓였다. 원인은 단순 브랜드 선호가 아니라 심판이 자기 분포에 가까운 문체·구조를 '더 익숙하니 더 좋다'고 인식하는 perplexity 상관에 있다. 위치 편향(먼저 제시된 답에 후함), 장황함 편향(길수록 후함)과 겹쳐 작동해서 단일 심판 점수는 절대값으로 신뢰하기 어렵다. 완화책으로는 서로 다른 계열 심판 2~3개의 패널 평균, A/B 순서 무작위화와 스왑 후 일치율 측정, 답변 길이 정규화가 표준이 되고 있다. 결국 LLM-as-judge는 랭킹 신호로는 쓸 만하지만 게이트 임계값을 거기에 직접 거는 건 위험하다.