본문 바로가기
C.W.K.
Stream
Lesson 02 of 07 · published

판정 모델 프롬프트 설계

~22 min · judges, prompt-engineering

Level 0추측자
0 XP0/55 lessons0/10 achievements
0/150 XP to next level150 XP to go0% complete

판정용 프롬프트는 코드로 작성한 평가 기준표야

판정 모델의 품질은 프롬프트의 품질을 넘어서기 어려워. 모호한 프롬프트는 모호한 판정을 낳아. 좋은 판정 모델 프롬프트를 작성하는 원칙은 좋은 주석 평가 기준표를 작성하는 원칙과 같아. 같은 5가지 요소를 LLM에 맞게 표현하면 돼.

좋은 판정 모델 프롬프트의 5가지 요소

  1. 역할과 관점 — "사실의 정확성을 중점적으로 평가하는 전문 평가자야."라고 구체적으로 정해. "판정 모델 역할을 해."라고만 쓰면 부족해.
  2. 명확한 기준 — 무엇이 통과이고 무엇이 실패인지 일상적인 말로 모호함 없이 설명해.
  3. 판정과 근거가 포함된 예시 — 통과와 실패 사례를 적어도 하나씩 제시하고 판정과 근거를 함께 보여줘. 퓨샷 예시는 보정 품질을 크게 높여.
  4. 경계 사례 처리 — 거절, 부분 답변, 주제에서 벗어났지만 정답인 답변 등을 어떻게 처리할지 정해.
  5. 엄격한 출력 형식 — 이름이 명확한 필드로 JSON을 구성해 안정적으로 파싱할 수 있게 해.

판정 전에 근거를 생성하게 해

판정 모델이 결론을 내리기 전에 근거를 단계별로 정리하게 해. 결정에 앞서 이유를 말로 설명하면 더 정확하게 판단할 수 있어. 구체적으로는 JSON에서 "reasoning" 필드가 "verdict" 필드보다 먼저 오도록 구성해. 이 한 가지 변경만으로도 판정 모델의 정확도가 보통 3~8포인트 높아져.

원칙: 근거를 먼저 정리한 뒤 결론을 내리는 판정 모델이 더 정확해. 출력 스키마에서도 항상 판정 근거를 판정보다 앞에 둬.

어려운 과제에는 퓨샷 예시가 꼭 필요해

충실성, 유용성, 어조처럼 미묘한 기준에서는 제로샷 판정이 쉽게 흔들려. 불일치 사례를 포함해 판정과 근거가 붙은 예시 3~5개를 넣어 봐. 예를 들어 "이 출력은 통과처럼 보이지만 실제로는 실패야. 이유는…" 같은 사례가 판정 모델을 평가 기준표에 맞게 고정해 줘.

판정 모델의 온도는 0으로 설정해

판정 모델은 같은 입력에 일관된 결과를 내야 해. temperature=0으로 설정하고 가능하면 시드도 고정해. 그렇지 않으면 화요일과 수요일에 같은 평가를 실행해도 결과가 달라져서 실제 변경과 무작위 잡음을 구분할 수 없어.

Code

좋은 판정 모델 프롬프트 — 전체 뼈대·python
JUDGE_PROMPT = """
You are an expert evaluator measuring whether assistant responses are faithful to the provided context.

## Criteria
- PASS: every factual claim in the response is supported by the context.
- FAIL: the response contains at least one factual claim not supported by the context.
- Style, tone, length, and grammar do NOT influence the verdict.
- A refusal to answer is FAIL only if the context contains the answer.

## Examples

Example 1
Context: \"The Eiffel Tower is 330m tall and located in Paris.\"
Question: \"How tall is the Eiffel Tower?\"
Response: \"The Eiffel Tower is 330m tall.\"
Verdict: PASS
Reasoning: The 330m claim is directly supported by the context.

Example 2
Context: \"The Eiffel Tower is 330m tall and located in Paris.\"
Question: \"How tall is the Eiffel Tower?\"
Response: \"The Eiffel Tower is 324m tall, including its antenna.\"
Verdict: FAIL
Reasoning: 324m and the antenna detail are not in the context.

## Now evaluate this case
Context: {context}
Question: {question}
Response: {response}

Reply ONLY with JSON in exactly this shape (reasoning FIRST):
{{\"reasoning\": \"<one or two sentences>\", \"verdict\": \"PASS\" or \"FAIL\"}}
"""
안정적인 JSON 파싱 — 판정 모델의 출력이 가끔 흔들릴 때·python
import json, re

def parse_judge_output(raw):
    raw = raw.strip()
    # Strip ```json fences if the judge added them
    fenced = re.search(r'```(?:json)?\s*(\{.*\})\s*```', raw, flags=re.S)
    if fenced:
        raw = fenced.group(1)
    try:
        d = json.loads(raw)
        if d.get("verdict") not in ("PASS", "FAIL"):
            raise ValueError("unexpected verdict")
        return d
    except Exception as e:
        return {"verdict": "FAIL", "reasoning": f"unparseable judge output: {e}"}

External links

Exercise

현재 사용하는 판정 모델 프롬프트나 이전 수업에서 만든 초안을 가져와. 판정과 근거가 포함된 예시 3개를 추가하되, 적어도 하나는 까다로운 사례로 골라. JSON 필드 순서도 판정보다 근거가 먼저 오도록 바꿔. 사례 30개에 다시 실행한 뒤 인간의 평점과 비교해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.