기술 해설
시스템 프롬프트와 퓨샷으로 출력 품질 높이기
같은 모델이라도 프롬프트를 어떻게 짜느냐에 따라 결과가 크게 달라집니다. 효과가 가장 확실한 기법은 둘입니다. 시스템 프롬프트(system prompt)를 제대로 쓰는 것, 그리고 퓨샷(few-shot)으로 예시를 보여 주는 것. 이 글은 그 둘을 실무에서 쓰는 방식으로 풀어 씁니다.
시스템 프롬프트: 역할과 규칙이 사는 자리
시스템 프롬프트는 대화 전체에 걸리는 지시입니다. 사용자 메시지마다 규칙을 되풀이하는 대신, 역할과 말투, 제약을 여기에 한 번 고정해 둡니다.
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=2048,
system="당신은 금융 규제 문서 검토 전문가입니다. "
"모든 판단에 근거 조항을 인용하고, "
"확실하지 않은 경우 '검토 필요'로 표시합니다.",
messages=[{"role": "user", "content": document}],
)
시스템 프롬프트에 들어갈 것은 세 가지입니다.
- 역할(role): "금융 규제 문서 검토 전문가"처럼 구체적인 역할을 주면 어휘 선택과 판단 기준이 함께 바뀝니다. "도움이 되는 어시스턴트" 같은 두루뭉술한 역할보다 언제나 낫습니다.
- 행동 규칙: 해야 할 것과 하지 말아야 할 것을 적습니다. 특히 확실하지 않을 때 어떻게 할지("모르면 모른다고 답한다")를 정해 두면 환각(hallucination)이 눈에 띄게 줄어듭니다.
- 출력 형식: 응답 구조를 고정해 두면 뒤에서 처리하기 쉽습니다. 형식 규칙은 예시와 함께 줄 때 가장 잘 지켜집니다.
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>
예시를 고를 때 자주 하는 실수
- 쉬운 예시만 넣기: 모델이 정말로 헷갈리는 것은 경계에 있는 사례입니다. "환불을 요청하면서 칭찬도 하는 입력"처럼 애매한 경우의 정답을 꼭 넣으세요.
- 한쪽으로 쏠린 분포: 예시 다섯 개가 전부 "부정"이면 모델도 부정 쪽으로 기웁니다. 예시의 분포는 실제 데이터를 닮아야 합니다.
- 형식이 제각각: 예시마다 출력 형식이 조금씩 다르면 모델도 따라 흔들립니다. 예시의 형식은 기계처럼 똑같이 맞추세요.
- 개수에 집착하기: 보통 3~5개면 충분합니다. 그 이상은 컨텍스트만 차지하고 나아지는 폭은 작을 때가 많습니다.
둘을 함께 쓰기
실무에서 가장 잘 돌아가는 조합은 이렇습니다.
| 요소 | 위치 |
|---|---|
| 역할·행동 규칙 | 시스템 프롬프트 |
| 작업 지시 | 사용자 메시지 상단, <instructions> 태그 |
| 처리할 데이터 | 전용 태그로 구획 |
| 형식 예시 | <examples> 태그, 경계 사례 포함 |
끝으로 하나만 더. 프롬프트는 감이 아니라 측정으로 고칩니다. 대표 입력 20~30개로 작은 평가 세트를 만들어 두고, 프롬프트를 바꿀 때마다 통과율을 비교하세요. 한 번에 한 가지만 바꿔야 무엇이 효과를 냈는지 알 수 있습니다.