C.W.K.
Stream
Lesson 02 of 12 · published

Prompt regression 테스트

~12 min · prompts, regression, drift

Level 0Apprentice
0 XP0/101 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

Prompt 는 조용히 썩어

Prompt 는 코드야. 버그 있어. 밑 모델 바뀌면 drift 해. 한 use case 위해 tweak 됐는데 다른 거 깨. Prompt regression test 는 prompt 의 unit test 야.

Prompt regression suite 의 모양

각 test:

  • 알려진 입력으로 production prompt 호출.
  • 출력 속성 단언: '사용자 이름 포함', 'JSON 파싱 가능', '금지 문구 X 미포함', '소스 최소 하나 인용'.
  • 정확한 문구 단언 안 함 (LLM 변동). 구조적 / 의미적 invariant 단언.

흔한 regression 패턴

  1. JSON schema — prompt 가 JSON 반환해야 함; test 가 schema 에 대해 검증.
  2. 금지 문구 — 명시적으로 지원하는 주제에 대해 답이 'I cannot help with that' 안 말해야 함.
  3. 인용 밀도 — 답이 context 에서 최소 N 소스 참조해야 함.
  4. 톤 / 페르소나 — 답이 합의된 음성 (피파의 sassy 읽기; 브랜드의 전문 톤) 이어야 함.
  5. 거부 정확성 — 진짜 주제 외 / 안전하지 않은 입력에 모델 거부해야.

Code

Prompt regression test (Python)·python
# tests/test_prompt_regression.py
import pytest, json
from myapp.llm import answer

@pytest.mark.eval
def test_returns_valid_json_for_summary_prompt():
    out = answer(prompt='summarize-doc', input={'doc': SAMPLE_DOC})
    parsed = json.loads(out)  # raises if not valid JSON
    assert 'summary' in parsed
    assert isinstance(parsed['summary'], str)
    assert len(parsed['summary']) > 100

@pytest.mark.eval
def test_does_not_refuse_on_supported_topic():
    out = answer(prompt='biology-q', input={'q': 'How does photosynthesis work?'})
    assert 'cannot help' not in out.lower()
    assert 'sorry' not in out.lower()

@pytest.mark.eval
def test_cites_at_least_one_source():
    out = answer(prompt='rag-q', input={'q': 'When was X founded?'})
    # answer must include a citation pattern like [1] or (source: ...)
    assert any(p in out for p in ['[1]', '(source:', 'According to'])

External links

Exercise

서비스의 가장 트래픽 많은 prompt 골라. 다음 커버하는 regression test 3 개 작성: shape (JSON / 형식), 내용 (포함해야 함 / 안 됨), 거부 동작. @pytest.mark.eval marker 아래 CI 에 추가.

Progress

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

댓글 0

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

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