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

평가는 사용자가 회귀를 만나기 전에 멈추는 문이야

~14 min · eval, regression, quality

Level 0Observer
0 XP0/64 lessons0/13 achievements
0/150 XP to next level150 XP to go0% complete

세 종류의 평가가 서로 다른 구멍을 막아

단위 평가는 프롬프트 하나가 예상 패턴을 내는지 보고, 통합 평가는 도구 루프 전체가 기대한 행동을 하는지 확인해. 품질 평가는 별도 자료 집합을 사람이 점검하거나 LLM 심사로 비교해. 하나를 빼면 그 층의 회귀는 그대로 빠져나가.

측정 도구의 조건을 고정해

평가에는 날짜가 붙은 모델 ID를 쓰고, 프롬프트는 Git에 넣으며, 자료 집합도 버전으로 관리해. 모델·프롬프트·문제가 함께 바뀌면 점수 상승이 실제 개선인지 알 수 없어. 평가 자체의 재현성이 먼저야.

프롬프트 변경마다 자동으로 돌려

프롬프트도 코드처럼 변경 검토를 받고 CI에서 평가를 통과하게 해. cwk-site의 콘텐츠 생성 프롬프트와 cwkPippa의 페르소나 시스템 프롬프트도 같은 규율을 써. 회귀가 병합 뒤가 아니라 변경 경계에서 멈추게 만드는 장치야.

원칙: Git에 든 프롬프트라도 평가 문이 없으면 안전하게 버전 관리되는 게 아니야. 둘을 함께 고정하고 함께 검사해.

Code

pytest로 unit eval 패턴·python
import pytest
from anthropic import Anthropic

client = Anthropic()
MODEL = "claude-haiku-4-5-20251001"  # 재현성 위해 날짜-pinned

CLASSIFY_SYSTEM = "Reply with exactly one word: positive, negative, or neutral."

@pytest.mark.parametrize("text,expected", [
    ("I love this", "positive"),
    ("this is awful", "negative"),
    ("meh", "neutral"),
])
def test_classify(text, expected):
    r = client.messages.create(
        model=MODEL,
        max_tokens=8,
        system=CLASSIFY_SYSTEM,
        messages=[{"role": "user", "content": text}],
    )
    assert r.content[0].text.strip().lower() == expected
Quality scoring 위한 LLM-as-judge·python
JUDGE_PROMPT = """
Evaluate the candidate answer against the expected answer for a customer
support reply. Score 1-5 on factual accuracy, tone, and completeness.
Reply with JSON: {"factual": int, "tone": int, "completeness": int, "reasoning": str}
"""

def judge(question: str, expected: str, candidate: str) -> dict:
    r = client.messages.create(
        model="claude-sonnet-4-6",  # judge는 더 강한 모델 유지
        max_tokens=512,
        system=JUDGE_PROMPT,
        messages=[{
            "role": "user",
            "content": f"Question:\n{question}\n\nExpected:\n{expected}\n\nCandidate:\n{candidate}",
        }],
    )
    import json
    return json.loads(r.content[0].text)

External links

Exercise

중요 프롬프트 하나에 단위 평가 5개, 통합 평가 1개, LLM 심사 평가 1개를 만들고 파일 변경 때 필요한 검사로 연결해.
Hint
PR마다 비용이 부담되면 품질 평가는 야간 Batch로 돌리되 검사 자체를 없애지는 마.

Progress

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

댓글 0

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

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