⚡ 중급2026-06-286분
예시 2~3개로 AI 출력 품질을 3배 끌어올리는 Few-Shot 설계법
Few-Shot 프롬프트는 단순히 예시를 나열하는 게 아니라 '무엇을 보여줄지'를 전략적으로 설계하는 기술입니다. 예시 선택·순서·형식만 바꿔도 모델의 응답 일관성이 극적으로 달라집니다.
few-shotprompt-engineeringclassification
왜 Few-Shot인가?
모델에게 지시(instruction)만 주는 Zero-Shot 방식은 모호한 작업에서 자주 흔들립니다. Few-Shot은 입력→출력 패턴을 직접 시연해 모델이 형식·톤·논리 구조를 빠르게 내재화하도록 돕습니다. 특히 분류, 변환, 요약처럼 '정답의 생김새'가 있는 작업에서 효과가 큽니다.
좋은 예시를 고르는 3가지 기준
- 경계 사례(edge case) 포함 — 전형적인 예시만 넣으면 모델은 쉬운 입력에만 잘 반응합니다. 헷갈릴 법한 사례를 1개 이상 넣으세요.
- 출력 길이·형식 일관성 — 예시마다 JSON이었다가 텍스트였다가 하면 모델이 혼동합니다. 출력 스키마를 고정하세요.
- 순서는 쉬운 것 → 어려운 것 — 연구에 따르면 복잡한 예시를 마지막에 배치할 때 모델이 더 잘 따릅니다.
실전 코드: 감성 분류기
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
const FEW_SHOT_EXAMPLES = [
{
input: "배송이 3일이나 늦었어요. 다음엔 안 쓸 것 같아요.",
output: JSON.stringify({ sentiment: "negative", confidence: 0.9, topic: "배송" }),
},
{
input: "가격 대비 품질이 나쁘진 않네요.",
output: JSON.stringify({ sentiment: "neutral", confidence: 0.7, topic: "가격/품질" }),
},
{
input: "포장이 너무 예뻐서 선물용으로 또 살 거예요!",
output: JSON.stringify({ sentiment: "positive", confidence: 0.95, topic: "포장" }),
},
];
function buildFewShotPrompt(userInput: string): string {
const exampleBlock = FEW_SHOT_EXAMPLES.map(
(ex) => `입력: ${ex.input}\n출력: ${ex.output}`
).join("\n\n");
return `당신은 한국어 리뷰를 분류하는 전문가입니다.
아래 예시를 참고해 동일한 JSON 형식으로만 답하세요.
${exampleBlock}
입력: ${userInput}
출력:`;
}
async function classifyReview(review: string) {
const response = await client.messages.create({
model: "claude-haiku-4-5",
max_tokens: 150,
messages: [{ role: "user", content: buildFewShotPrompt(review) }],
});
const raw = response.content[0].type === "text" ? response.content[0].text : "";
return JSON.parse(raw.trim());
}
// 실행
classifyReview("앱이 자꾸 튕겨서 환불 요청했습니다.").then(console.log);
적용 전 체크리스트
- [ ] 예시가 3개 이상이며 서로 다른 출력 패턴을 커버하는가?
- [ ] 경계 사례(애매한 감성, 빈 입력 등) 예시가 1개 이상 포함되어 있는가?
- [ ] 모든 예시의 출력 형식이 동일한가(JSON이면 전부 JSON)?
- [ ] 예시 순서가 단순→복잡 순으로 정렬되어 있는가?
- [ ] 예시가 너무 많아 토큰 한도를 초과하지 않는가?(목표: 예시 전체 ≤ 30% of max_tokens)
- [ ] Zero-Shot 대비 응답 일관성을 A/B 테스트로 수치화했는가?