부록 E. AI 평가 & LLM-as-Judge

"프롬프트를 바꿨더니 나아진 것 같다"에서 벗어나, 수치로 비교 가능한 평가 체계를 세우는 법. 프롬프트 변경·모델 업그레이드·RAG 튜닝이 실제 개선인지 회귀인지 가려내는 도구입니다.

E.1 왜 평가가 필요한가

LLM 시스템은 비결정적이기 때문에 "눈으로 몇 개 돌려보기"로는 회귀를 놓칩니다. 실제 사례:

  • Claude Sonnet 4.5 → 4.6 업그레이드 후 JSON 출력 형식 안정성이 5% 하락한 사례(복구 프롬프트 필요)
  • RAG 인덱스를 "더 많이" 개선하려고 청크 크기를 키웠더니 환각률이 오히려 12% 증가한 사례
  • 프롬프트에 "한국어로"를 강조했더니 영어 코드 블록 안의 주석까지 한국어가 돼 빌드 실패한 사례

E.2 평가 파이프라인의 기본 구조

[테스트셋] 50~500개 입력+기대출력
    ↓
[러너] 프롬프트 v1·v2로 각각 실행
    ↓
[메트릭] 자동(정량) + LLM Judge(정성)
    ↓
[리포트] 점수, diff, 회귀 항목 하이라이트
    ↓
[결정] 승인 / 반려 / 수정 후 재평가

E.3 메트릭 선택 가이드

과제 유형추천 메트릭비고
분류/태깅Accuracy, F1, Confusion Matrix기대값이 명확
추출(NER, 수치)Exact Match, Partial Match숫자는 ±오차 허용
번역/요약BLEU, ROUGE, BERTScore+ 사람 검수 샘플
코드 생성테스트 통과율, 컴파일 성공률, 린터단위 테스트가 "정답"
RAG 답변Faithfulness, Answer Relevancy, Context PrecisionRAGAS 라이브러리
자유 응답(톤·스타일)LLM-as-Judge + Pairwise자동 메트릭 불충분
에이전트 과제Task Success Rate, Trajectory 점수+ 비용·턴 수

E.4 LLM-as-Judge — 실전 설계

자유 응답을 "AI에게 채점시키는" 기법. 설계 요령:

  1. 루브릭 명시

    "품질이 좋은가?"는 금지. 정확성·구체성·톤·포맷 각각 0~5점 루브릭.

  2. Pairwise 비교 우선

    "A가 나은가 B가 나은가"가 "A를 0~10점으로"보다 일관됨. Chatbot Arena 방식.

  3. 심판 모델은 다른 모델

    평가 대상이 GPT면 판정은 Claude로(또는 그 반대). 자기 편향 회피.

  4. Judge도 검증

    사람 50건으로 Judge의 κ(kappa) > 0.6인지 확인. 못 맞추면 루브릭을 더 쪼갤 것.

  5. 위치 편향

    A/B 순서를 50:50으로 스왑해 위치 편향 제거.

판정 프롬프트 템플릿

너는 한국 PM 업무 응답을 평가하는 심판이다.

[질문]: {question}
[응답 A]: {answer_a}
[응답 B]: {answer_b}

루브릭 (각 0~5):
- 정확성: 사실 오류 없음
- 구체성: "일반적으로"류 추상 표현 없음
- 실행가능성: 내일 실행 가능한가
- 형식: 요청된 포맷 준수

출력 (JSON만):
{
  "scores_a": {...}, "scores_b": {...},
  "winner": "A" | "B" | "tie",
  "reason": "한 문장"
}

E.5 테스트셋 만들기

  • 크기: 최소 50건(개발용), 200~500건(회귀 CI용). 너무 많으면 비용·속도 부담
  • 다양성: 실제 프로덕션 로그에서 샘플링 + 엣지 케이스 수동 추가(빈 입력, 긴 입력, 외국어, 모순 질문)
  • 기대출력: 사람이 작성·검수한 정답 또는 "이런 특성을 만족해야 함" 같은 rubric 형태
  • Freezing: 한번 고정한 테스트셋은 함부로 수정 금지. 수정하면 과거 점수와 비교 불가

E.6 A/B 테스트 설계

오프라인(개발 시)

- 같은 입력 50건에 프롬프트 v1, v2 적용
- 각 건 Pairwise LLM Judge
- 승률 차이 p < 0.05 (binomial) 이면 통계적으로 유의
- 비용, 지연시간도 함께 측정

온라인(프로덕션)

  • 사용자 트래픽 5~10%에 신규 프롬프트 할당
  • 지표: 사용자 만족도(👍/👎), 재질문율, 완료까지 턴 수, 비용
  • 최소 표본: 건당 편차가 크므로 수백~수천 건이 일반적. 2주 이상 관찰
  • 가드레일: 안전·규제 위반률은 0%여야 승격 가능

E.7 도구 선택

도구강점약점
PromptfooCLI·YAML, 로컬 CI 통합 쉬움대시보드 단순
LangSmithLangChain 트레이싱+평가 통합LC 생태계 친화
BraintrustUI 우수, 팀 협업유료, 학습 곡선
RAGASRAG 전용 메트릭RAG 외 부적합
자체 pytest + OpenAI/Anthropic SDK유연, 규제 친화(외부 전송 없음)UI 직접 구축 필요

E.8 Promptfoo 예시 (한 번에 두 프롬프트 비교)

prompts:
  - file://prompts/v1.txt
  - file://prompts/v2.txt

providers:
  - anthropic:messages:claude-sonnet-4-6
  - openai:chat:gpt-4o

tests:
  - vars:
      question: "대출 거절 사유를 설명하는 한국어 응답을 작성하라..."
    assert:
      - type: contains
        value: "재검토를 요청"
      - type: llm-rubric
        value: "격식체이며 차별 표현이 없어야 함"
  - vars: { question: "..." }
    assert:
      - type: latency
        threshold: 3000   # ms

npx promptfoo eval로 한 번에 실행 → 웹 리포트 생성. CI 파이프라인에 넣으면 프롬프트 PR 자동 리뷰까지 가능.

E.9 주의할 안티패턴

  • 체리피킹: 좋은 몇 건만 보고 "개선됐다" 결론 — 반드시 고정 테스트셋
  • 테스트셋에 학습 유출: 프롬프트 튜닝 중 테스트셋을 반복 확인하면 overfitting. 최종 회귀셋은 개발 중 보지 않는 별도 보관
  • Judge 한 번으로 결론: 반드시 사람 샘플 검증 + κ 측정
  • 비용 누락: 품질만 보고 합격시킨 프롬프트가 월 $5,000 추가 과금이 되는 경우

E.10 참고

← 메인으로 돌아가기 · 최근 업데이트: 2026.04.17