고급 평가
이 스킬은 LLM을 평가자(judge)로 사용하여 LLM 출력을 평가하는 프로덕션 등급 기술을 다룹니다. 학술 논문, 업계 관행, 실제 구현 경험의 연구를 종합하여 신뢰할 수 있는 평가 시스템을 구축하기 위한 실행 가능한 패턴을 제공합니다.
핵심 통찰: LLM-as-a-Judge는 단일 기술이 아니라 각각 다른 평가 맥락에 적합한 접근 방식의 집합입니다. 올바른 접근 방식을 선택하고 알려진 편향을 완화하는 것이 이 스킬이 개발하는 핵심 역량입니다.
활성화 시점
다음과 같은 경우 이 스킬을 활성화하세요:
- LLM 출력을 위한 LLM-as-judge 시스템 구축
- 여러 모델 응답을 비교하여 최적의 응답 선택
- 평가 팀 간 일관된 품질 표준 수립
- 일관되지 않은 결과를 보이는 평가 시스템 디버깅
- 프롬프트 또는 모델 변경에 대한 A/B 테스트 설계
- LLM 또는 인간/LLM 하이브리드 평가자를 위한 루브릭 생성
- 자동화된 평가와 인간 평가 간의 상관 관계 분석
다른 스킬이 담당하는 인접 작업에는 이 스킬을 활성화하지 마세요:
- 일반적인 결정론적 검사, 회귀 테스트 스위트, 프로덕션 품질 게이트, 결과 메트릭:
evaluation. - 자율 루프 거버넌스, 잠금 루브릭, 롤백, PR 승인 경계:
harness-engineering. - 평가 도구를 위한 도구 API 계약:
tool-design.
핵심 개념
평가 분류 체계
정답(ground truth) 존재 여부에 따라 두 가지 주요 접근 방식 중에서 선택하세요:
직접 점수 매기기(Direct Scoring) — 객관적 기준(사실 정확성, 지시 따르기, 유해성)이 존재할 때 사용합니다. 단일 LLM이 하나의 응답을 정의된 척도로 평가합니다. 잘 정의된 기준에 대해 중간에서 높은 신뢰도를 달성합니다. 점수 보정 드리프트와 일관되지 않은 척도 해석을 주의하세요.
쌍별 비교(Pairwise Comparison) — 주관적 선호도(어조, 스타일, 설득력)에 사용합니다. LLM이 두 응답을 비교하여 더 나은 응답을 선택합니다. 쌍별 방법은 주관적 작업에 대해 개방형 직접 점수 매기기보다 인간 선호도와 더 잘 상관관계를 보이는 경우가 많습니다(claim-advanced-evaluation-position-swap). 위치 편향과 길이 편향을 주의하세요.
편향 환경
모든 평가 시스템에서 다음과 같은 체계적인 편향을 완화하세요:
위치 편향(Position Bias): 첫 번째 위치의 응답이 우선적으로 평가됩니다. 위치를 바꿔 두 번 평가한 후 다수결 또는 일관성 검사를 적용하여 완화합니다.
길이 편향(Length Bias): 품질과 관계없이 더 긴 응답이 더 높은 점수를 받습니다. 길이를 무시하도록 명시적으로 프롬프팅하고 길이 정규화 점수를 적용하여 완화합니다.
자기 강화 편향(Self-Enhancement Bias): 모델이 자신의 출력을 더 높게 평가합니다. 생성과 평가에 다른 모델을 사용하여 완화합니다.
장황함 편향(Verbosity Bias): 불필요한 경우에도 과도한 세부 정보가 더 높은 점수를 받습니다. 관련 없는 세부 정보를 처벌하는 기준별 루브릭으로 완화합니다.
권위 편향(Authority Bias): 정확성과 관계없이 자신감 있는 어조가 더 높은 점수를 받습니다. 증거 인용을 요구하고 사실 확인 레이어를 추가하여 완화합니다.
메트릭 선택 프레임워크
평가 작업 구조에 메트릭을 매칭하세요:
| 작업 유형 | 주요 메트릭 | 보조 메트릭 |
|---|---|---|
| 이진 분류(통과/실패) | 재현율, 정밀도, F1 | Cohen's kappa |
| 서열 척도(1-5 등급) | Spearman's rho, Kendall's tau | Cohen's kappa (가중치) |
| 쌍별 선호도 | 일치율, 위치 일관성 | 신뢰도 보정 |
| 다중 레이블 | Macro-F1, Micro-F1 | 레이블별 정밀도/재현율 |
절대적 일치율보다 체계적인 불일치 패턴에 우선순위를 두세요. 특정 기준에 대해 인간과 일관되게 의견이 다른 평가자는 무작위 잡음이 있는 평가자보다 더 문제가 있기 때문입니다.
평가 접근 방식
직접 점수 매기기 구현
명확한 기준, 보정된 척도, 구조화된 출력 형식의 세 가지 구성 요소로 직접 점수 매기기를 구축하세요.
기준 정의 패턴:
기준(Criterion): [이름]
설명(Description): [이 기준이 측정하는 것]
가중치(Weight): [상대적 중요도, 0-1]
척도 보정(Scale Calibration) — 루브릭 세부 수준에 따라 척도 세분성 선택:
- 1-3: 중립 옵션이 있는 이진, 가장 낮은 인지 부하
- 1-5: 표준 Likert, 세분성과 신뢰도의 최상의 균형
- 1-10: 보정이 더 어렵기 때문에 수준별 상세 루브릭과 함께만 사용
직접 점수 매기기용 프롬프트 구조:
You are an expert evaluator assessing response quality.
## 작업(Task)
각 기준에 따라 다음 응답을 평가하세요.
## 원본 프롬프트(Original Prompt)
{prompt}
## 평가할 응답(Response to Evaluate)
{response}
## 기준(Criteria)
{각 기준: 이름, 설명, 가중치}
## 지침(Instructions)
각 기준에 대해:
1. 응답에서 특정 증거 찾기
2. 루브릭에 따라 점수 매기기 (1-{max} 척도)
3. 증거로 점수 정당화하기
4. 한 가지 구체적인 개선 사항 제안하기
## 출력 형식(Output Format)
점수, 정당화, 요약이 포함된 구조화된 JSON으로 응답하세요.
점수 매기기 프롬프트에서 점수 전에 증거를 요구하세요. 평가자가 숫자를 내기 전에 관찰 가능한 출력 특징에 판단을 고정해야 하기 때문입니다.
쌍별 비교 구현
모든 쌍별 평가에 위치 편향 완화를 적용하세요:
- 먼저 결정론적 사전 검사 실행: 두 후보 모두 동일한 스키마, 소스 증거 요구 사항, 범위 제약 조건을 충족해야 합니다.
- 첫 번째 평가자 패스: 응답 A를 첫 번째 위치, 응답 B를 두 번째 위치.
- 두 번째 평가자 패스: 응답 B를 첫 번째 위치, 응답 A를 두 번째 위치.
- 일관성 검사: 패스가 의견이 다르면 감소된 신뢰도로 TIE 반환.
- 최종 판정: 일관된 승자와 평균 신뢰도 및 명시적 동점 해소 근거.
쌍별 비교용 프롬프트 구조:
You are an expert evaluator comparing two AI responses.
## 중요 지침(Critical Instructions)
- 더 길다고 응답을 선호하지 마세요.
- 위치(첫 번째 vs 두 번째)에 따라 응답을 선호하지 마세요.
- 지정된 기준에 따라 품질에만 집중하세요.
- 응답이 실제로 동등할 때 동점은 허용됩니다.
## 원본 프롬프트(Original Prompt)
{prompt}
## 응답 A(Response A)
{response_a}
## 응답 B(Response B)
{response_b}
## 비교 기준(Comparison Criteria)
{criteria list}
## 지침(Instructions)
1. 먼저 각 응답을 독립적으로 분석하세요.
2. 각 기준에 대해 비교하세요.
3. 신뢰도 수준과 함께 전체 승자를 결정하세요.
## 출력 형식(Output Format)
기준별 비교, 전체 승자, 신뢰도(0-1), 추론이 포함된 JSON.
신뢰도 보정(Confidence Calibration) — 신뢰도를 위치 일관성에 매핑:
- 두 패스가 일치: 신뢰도 = 개별 신뢰도의 평균
- 패스가 의견이 다름: 신뢰도 = 0.5, 판정 = TIE
루브릭 생성
개방형 점수 매기기에 비해 평가 분산을 줄이기 위해 루브릭을 생성하세요. 대상 평가 세트에서 측정하지 않는 한 정확한 분산 감소는 작업 부하별로 처리하세요.
다음 루브릭 구성 요소를 포함하세요:
- 수준 설명: 각 점수 수준에 대한 명확한 경계
- 특징: 각 수준을 정의하는 관찰 가능한 특징
- 예시: 각 수준을 나타내는 대표 텍스트(선택 사항이지만 유용함)
- 에지 케이스: 모호한 상황에 대한 지침
- 점수 매기기 지침: 일관된 적용을 위한 일반 원칙
사용 사례에 대한 엄격성 보정(Strictness calibration):
- 관대함(Lenient): 낮은 통과 기준, 반복 장려에 적합
- 균형(Balanced): 일반적인 프로덕션 기대치
- 엄격함(Strict): 안전 중요 또는 높은 위험 평가에 대한 높은 기준
도메인에 맞게 루브릭을 조정하세요 — 도메인별 용어를 사용하세요. 코드 가독성 루브릭은 변수, 함수, 주석을 언급합니다. 의학적 정확성 루브릭은 임상 용어 및 증거 표준을 참조합니다.
실용적인 지침
평가 파이프라인 설계
다음 레이어로 프로덕션 평가 시스템을 구축하세요: 기준 로더(Criteria Loader)(루브릭 + 가중치) -> 기본 평가자(Primary Scorer)(직접 또는 쌍별) -> 편향 완화(Bias Mitigation)(위치 교체 등) -> 신뢰도 점수 매기기(Confidence Scoring)(보정) -> 출력(Output)(점수 + 정당화 + 신뢰도). 전체 시각적 레이아웃은 평가 파이프라인 다이어그램을 참조하세요.
의사 결정 프레임워크: 직접 vs. 쌍별
다음 결정 트리를 적용하세요:
객관적인 정답(ground truth)이 존재합니까?
+-- 예 -> 직접 점수 매기기(Direct Scoring)
| 예: 사실 정확성, 지시 따르기, 형식 준수
|
+-- 아니오 -> 선호도 또는 품질 판단입니까?
+-- 예 -> 쌍별 비교(Pairwise Comparison)
| 예: 어조, 스타일, 설득력, 창의성
|
+-- 아니오 -> 참조 기반 평가(Reference-based evaluation) 고려
예: 요약(소스와 비교), 번역(참조와 비교)
평가 확장
대량 평가를 위해 다음 전략 중 하나를 적용하세요:
-
LLM 패널(PoLL): 여러 모델을 평가자로 사용하고 투표를 집계하여 개별 모델 편향을 줄입니다. 더 비싸지만 높은 위험 결정에 더 신뢰할 수 있습니다.
-
계층적 평가(Hierarchical evaluation): 스크리닝에는 빠르고 저렴한 모델을 사용하고 에지 케이스에는 비싼 모델을 사용합니다. 스크리닝 임계값 보정이 필요합니다.
-
인간 개입(Human-in-the-loop): 명확한 경우를 자동화하고 낮은 신뢰도 결정을 인간 검토에 라우팅합니다. 시간이 지남에 따라 자동 평가를 개선하기 위해 피드백 루프를 설계합니다.
예제
예제 1: 정확성에 대한 직접 점수 매기기
입력:
프롬프트: "지구에서 계절이 생기는 원인은 무엇인가요?"
응답: "계절은 지구 축의 기울기 때문에 발생합니다. 지구가 태양 주위를 공전함에 따라,
다른 반구는 일년 중 다른 시기에 더 직접적인 햇빛을 받습니다."
기준: 사실 정확성 (가중치: 1.0)
척도: 1-5
출력:
{
"criterion": "Factual Accuracy",
"score": 5,
"evidence": [
"축 기울기를 주요 원인으로 올바르게 식별",
"반구별 햇빛 차이를 올바르게 설명",
"사실적 오류 없음"
],
"justification": "응답은 올바른 과학적 추론으로 계절의 원인을 정확하게 설명합니다.
축 기울기와 햇빛 분포에 미치는 영향이 모두 올바르게 설명되었습니다.",
"improvement": "완전성을 위해 특정 기울기 각도(23.5도)를 추가할 수 있습니다."
}
예제 2: 위치 교체를 사용한 쌍별 비교
입력:
프롬프트: "초보자에게 머신 러닝 설명하기"
응답 A: [전문 용어가 포함된 기술적 설명]
응답 B: [간단한 비유 기반 설명]
기준: ["clarity", "accessibility"]
첫 번째 패스 (A 먼저):
{ "winner": "B", "confidence": 0.8 }
두 번째 패스 (B 먼저):
{ "winner": "A", "confidence": 0.6 }
(참고: B가 첫 번째 위치였기 때문에 승자는 A)
매핑된 두 번째 패스:
{ "winner": "B", "confidence": 0.6 }
최종 결과:
{
"winner": "B",
"confidence": 0.7,
"positionConsistency": {
"consistent": true,
"firstPassWinner": "B",
"secondPassWinner": "B"
}
}
예제 3: 루브릭 생성
입력:
criterionName: "Code Readability"
criterionDescription: "How easy the code is to understand and maintain"
domain: "software engineering"
scale: "1-5"
strictness: "balanced"
출력 (축약):
{
"levels": [
{
"score": 1,
"label": "Poor",
"description": "상당한 노력 없이는 코드를 이해하기 어렵습니다",
"characteristics": [
"의미 있는 변수 또는 함수 이름 없음",
"주석 또는 문서 없음",
"깊게 중첩되거나 복잡한 로직"
]
},
{
"score": 3,
"label": "Adequate",
"description": "약간의 노력으로 코드를 이해할 수 있습니다",
"characteristics": [
"대부분의 변수에 의미 있는 이름이 있음",
"복잡한 섹션에 기본 주석이 있음",
"로직을 따라갈 수 있지만 더 깔끔할 수 있음"
]
},
{
"score": 5,
"label": "Excellent",
"description": "코드가 즉시 명확하고 유지 관리가 용이합니다",
"characteristics": [
"모든 이름이 설명적이고 일관됨",
"포괄적인 문서",
"깔끔하고 모듈식 구조"
]
}
],
"edgeCases": [
{
"situation": "코드는 잘 구조화되어 있지만 도메인별 약어를 사용합니다",
"guidance": "일반 청중이 아닌 도메인 전문가를 위한 가독성을 기준으로 점수 매기기"
}
]
}
지침
-
점수 전에 항상 증거 요구 - 증거 우선 프롬프트는 판단을 감사하기 쉽게 만들고 근거 없는 숫자 점수 매기기를 줄입니다.
-
쌍별 비교에서 항상 위치 교체 - 단일 패스 비교는 위치 편향에 의해 손상됩니다.
-
척도 세분성을 루브릭 특수성과 일치 - 상세 수준 설명 없이 1-10을 사용하지 마세요.
-
객관적 기준과 주관적 기준 분리 - 객관적에는 직접 점수 매기기, 주관적에는 쌍별 비교를 사용하세요.
-
신뢰도 점수 포함 - 위치 일관성 및 증거 강도에 맞게 보정하세요.
-
에지 케이스를 명시적으로 정의 - 모호한 상황은 가장 많은 평가 분산을 유발합니다.
-
도메인별 루브릭 사용 - 일반 루브릭은 일반적인(덜 유용한) 평가를 생성합니다.
-
인간 판단에 대해 검증 - 자동화된 평가는 인간 평가와 상관관계가 있을 때만 가치가 있습니다.
-
체계적인 편향 모니터링 - 기준, 응답 유형, 모델별 불일치 패턴을 추적하세요.
-
반복을 위해 설계 - 평가 시스템은 피드백 루프로 개선됩니다.
주의 사항
-
정당화 없는 점수 매기기: 점수는 근거가 부족하고 디버그하기 어렵습니다. 점수 전에 항상 증거 기반 정당화를 요구하세요.
-
단일 패스 쌍별 비교: 위치가 교체되지 않으면 위치 편향이 결과를 손상시킵니다. 항상 위치를 바꿔 두 번 평가하고 일관성을 확인하세요.
-
과부하된 기준: 한 번에 여러 것을 측정하는 기준은 신뢰할 수 없는 점수를 생성합니다. 하나의 기준 = 하나의 측정 가능한 측면을 적용하세요.
-
에지 케이스 지침 누락: 명시적 지침 없이 평가자는 모호한 경우를 일관되지 않게 처리합니다. 에지 케이스를 루브릭에 명확한 해결 규칙과 함께 포함하세요.