⚡ 중급2026-05-186분
Few-shot 예시 3개로 AI 출력 형식을 완전히 고정하는 법
Few-shot 프롬프팅은 모델에게 '이렇게 해'라고 설명하는 대신 직접 보여주는 기법입니다. 예시 설계 방법과 흔한 실수를 짚어드립니다.
few-shotprompt-engineeringclassification
Few-shot 프롬프팅이란?
Few-shot은 모델에게 입력-출력 쌍을 2~5개 예시로 먼저 제공해, 원하는 응답 형식·어조·구조를 학습시키는 기법입니다. 긴 지시문보다 잘 만든 예시 하나가 더 강력할 때가 많습니다.
언제 써야 하나?
- 출력 형식이 고정되어야 할 때 (JSON, 표, 특정 마크다운 구조)
- 도메인 특화 어조나 용어를 일관되게 유지해야 할 때
- Zero-shot으로 반복 실패하는 엣지 케이스가 있을 때
- 레이블링·분류 작업에서 기준을 명확히 심어줄 때
좋은 예시 vs 나쁜 예시
| 기준 | 좋은 예시 | 나쁜 예시 | |---|---|---|| | 다양성 | 서로 다른 케이스 커버 | 비슷한 입력만 반복 | | 길이 | 실제 예상 출력과 동일한 길이 | 너무 짧거나 과도하게 긴 출력 | | 순서 | 마지막 예시가 가장 목표에 가깝게 | 무작위 배치 |
실전 코드 예시 (TypeScript)
아래는 고객 문의를 3가지 카테고리로 분류하는 few-shot 프롬프트입니다.
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
const FEW_SHOT_EXAMPLES = `
아래 예시를 참고해 고객 문의를 분류하세요.
출력은 반드시 JSON 형식: {"category": string, "confidence": "high"|"medium"|"low"}
---
문의: "결제가 두 번 됐어요. 환불 요청합니다."
출력: {"category": "결제/환불", "confidence": "high"}
---
문의: "앱이 자꾸 꺼져요. 어제부터요."
출력: {"category": "기술지원", "confidence": "high"}
---
문의: "비밀번호 바꾸고 싶은데 어떻게 해요?"
출력: {"category": "계정관리", "confidence": "medium"}
---
`;
async function classifyInquiry(userMessage: string) {
const response = await client.messages.create({
model: "claude-haiku-4-5", // 분류처럼 반복 작업엔 Haiku가 경제적
max_tokens: 100,
messages: [
{
role: "user",
content: `${FEW_SHOT_EXAMPLES}문의: "${userMessage}"\n출력:`,
},
],
});
const raw = response.content[0].type === "text" ? response.content[0].text : "";
try {
return JSON.parse(raw.trim());
} catch {
// 모델이 형식을 벗어난 경우 fallback
console.error("파싱 실패:", raw);
return { category: "미분류", confidence: "low" };
}
}
// 사용 예
const result = await classifyInquiry("주문한 상품이 아직 안 왔어요.");
console.log(result);
// → { category: "배송문의", confidence: "medium" }
팁: 예시 수를 늘릴수록 토큰 비용이 증가합니다. 3개로 시작해 정확도를 측정한 뒤 조정하세요.
체크리스트
- [ ] 예시가 실제 엣지 케이스를 포함하는가?
- [ ] 모든 예시의 출력 형식이 100% 동일한 구조인가?
- [ ] 마지막 예시가 현재 목표 케이스와 가장 유사한가?
- [ ] 예시 간 입력 길이·어조 편차가 충분한가?
- [ ] 파싱 실패 시 fallback 로직이 있는가?
- [ ] Haiku vs Sonnet 중 비용-정확도 트레이드오프를 검토했는가?