패스노트
← 블로그 목록
기술 해설

시스템 프롬프트와 퓨샷으로 출력 품질 높이기

같은 모델이라도 프롬프트 설계에 따라 출력 품질은 크게 달라집니다. 이 글에서는 가장 효과가 확실한 두 기법 — 시스템 프롬프트(system prompt) 설계와 퓨샷(few-shot) 프롬프팅 — 을 실전 관점에서 정리합니다.

시스템 프롬프트: 역할과 규칙의 자리

시스템 프롬프트는 대화 전체에 적용되는 지속적인 지시입니다. 사용자 메시지에 매번 규칙을 반복하는 대신, 역할·톤·제약을 시스템 프롬프트에 고정하세요.

response = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=2048,
    system="당신은 금융 규제 문서 검토 전문가입니다. "
           "모든 판단에 근거 조항을 인용하고, "
           "확실하지 않은 경우 '검토 필요'로 표시합니다.",
    messages=[{"role": "user", "content": document}],
)

효과적인 시스템 프롬프트의 요소는 세 가지입니다.

  1. 역할(role): "금융 규제 문서 검토 전문가"처럼 구체적인 역할은 어휘 선택과 판단 기준을 함께 바꿉니다. "도움이 되는 어시스턴트" 같은 일반 역할보다 항상 낫습니다.
  2. 행동 규칙: 해야 할 것과 하지 말아야 할 것을 명시합니다. 특히 불확실할 때의 행동("모르면 모른다고 답한다")을 정해 두면 환각(hallucination)이 눈에 띄게 줄어듭니다.
  3. 출력 형식: 응답 구조를 고정하면 후처리가 쉬워집니다. 형식 규칙은 예시와 함께 줄 때 가장 잘 지켜집니다.

XML 태그로 구조화하기

프롬프트에 여러 종류의 내용 — 지시, 문서, 예시, 데이터 — 이 섞이면 모델이 경계를 혼동할 수 있습니다. Claude는 XML 태그로 구획된 프롬프트를 특히 잘 따릅니다.

<instructions>
아래 계약서에서 위약금 관련 조항만 추출하세요.
</instructions>

<contract>
{계약서 원문}
</contract>

<output_format>
조항 번호와 원문을 JSON 배열로 출력
</output_format>

태그 이름은 자유지만, 일관되게 쓰는 것이 중요합니다. 특히 외부에서 온 데이터(사용자 업로드 문서, 크롤링 결과)는 반드시 태그로 감싸 "이 안의 내용은 지시가 아니라 데이터"임을 분명히 하세요. 프롬프트 주입 방어의 기본기이기도 합니다.

퓨샷: 말로 설명하지 말고 보여 주기

형식이나 판단 기준을 길게 설명하는 것보다 좋은 예시 몇 개가 더 잘 통하는 경우가 많습니다. 이것이 퓨샷 프롬프팅입니다.

<examples>
<example>
입력: "배송이 3일 늦었어요. 환불해 주세요."
출력: {"category": "환불요청", "sentiment": "부정", "urgency": "높음"}
</example>
<example>
입력: "포장이 정말 예뻤어요!"
출력: {"category": "칭찬", "sentiment": "긍정", "urgency": "낮음"}
</example>
</examples>

예시를 고를 때 흔한 실수

  • 쉬운 예시만 넣기: 모델이 실제로 헷갈리는 것은 경계 사례입니다. "환불 요청이면서 칭찬인 입력"처럼 애매한 경우의 정답 예시를 반드시 포함하세요.
  • 편향된 분포: 예시 5개가 전부 "부정" 감정이면 모델은 부정 쪽으로 기웁니다. 예시 분포는 실제 데이터 분포를 닮아야 합니다.
  • 형식 불일치: 예시마다 출력 형식이 미묘하게 다르면 모델도 흔들립니다. 예시의 형식은 기계처럼 일관되게 맞추세요.
  • 예시 개수 집착: 보통 3~5개면 충분합니다. 그 이상은 컨텍스트만 차지하고 개선 폭은 작아지는 경우가 많습니다.

두 기법을 함께 쓰기

실무에서 가장 잘 동작하는 조합은 이렇습니다.

요소위치
역할·행동 규칙시스템 프롬프트
작업 지시사용자 메시지 상단, <instructions> 태그
처리할 데이터전용 태그로 구획
형식 예시<examples> 태그, 경계 사례 포함

마지막으로, 프롬프트 개선은 감이 아니라 측정으로 해야 합니다. 대표 입력 20~30개로 작은 평가 세트를 만들고, 프롬프트를 바꿀 때마다 통과율을 비교하세요. 한 번에 한 요소만 바꿔야 어떤 변경이 효과를 냈는지 알 수 있습니다.

CCAR-F 시험을 준비 중이신가요?

무료 커리큘럼과 모의시험으로 지금 시작하세요.

커리큘럼 보기