⚡ 중급2026-09-166분
Few-shot 예시 3개가 프롬프트 품질을 결정한다
AI에게 '어떻게 해줘'라고 말하는 것보다, 잘 된 예시를 보여주는 게 훨씬 강력하다. Few-shot 패턴을 제대로 설계하면 zero-shot 대비 일관성이 눈에 띄게 달라진다.
few-shotprompt-engineeringclassification
Few-shot 프롬프팅으로 일관된 출력 뽑기
AI 모델에게 복잡한 작업을 시킬 때 가장 흔한 실수는 지시만 늘리는 것이다. '정확하게', '간결하게', '전문가답게' 같은 수식어를 쌓아도 모델이 원하는 형식을 모르면 매번 다른 결과가 나온다. Few-shot은 이 문제를 예시로 해결한다.
Few-shot이 효과적인 이유
LLM은 패턴 매칭에 최적화되어 있다. 입력→출력 쌍을 2~5개 보여주면 모델은 명시적 규칙 없이도 출력 구조, 어조, 길이를 추론한다.
- zero-shot: 규칙을 언어로 설명 → 모델이 해석
- few-shot: 완성된 예시 제공 → 모델이 패턴 복제
- 많은 예시 ≠ 항상 좋음: 3~5개가 최적, 이후엔 토큰 낭비
실전 코드: 고객 리뷰 감성 분류기
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
const FEW_SHOT_EXAMPLES = [
{
input: "배송이 3일이나 늦었고 포장도 구겨져 있었어요.",
output: JSON.stringify({ sentiment: "negative", category: "delivery", score: 2 }),
},
{
input: "생각보다 품질이 좋네요. 가격 대비 만족합니다.",
output: JSON.stringify({ sentiment: "positive", category: "quality", score: 4 }),
},
{
input: "그냥 평범해요. 나쁘진 않은데 특별하지도 않아요.",
output: JSON.stringify({ sentiment: "neutral", category: "overall", score: 3 }),
},
];
function buildFewShotPrompt(userInput: string): string {
const examples = FEW_SHOT_EXAMPLES.map(
(ex, i) =>
`예시 ${i + 1}\n입력: ${ex.input}\n출력: ${ex.output}`
).join("\n\n");
return `당신은 한국어 리뷰를 분석하는 전문가입니다.
아래 예시를 참고해 동일한 JSON 형식으로만 응답하세요.
${examples}
실제 분석 대상
입력: ${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 : "";
try {
// 모델이 JSON 앞뒤에 텍스트를 붙이는 경우 방어
const jsonMatch = raw.match(/\{[\s\S]*\}/);
if (!jsonMatch) throw new Error("JSON not found in response");
return JSON.parse(jsonMatch[0]);
} catch {
throw new Error(`파싱 실패: ${raw}`);
}
}
// 실행
(async () => {
const result = await classifyReview("색상이 사진이랑 달라요. 반품하고 싶어요.");
console.log(result);
// { sentiment: 'negative', category: 'product', score: 1 }
})();
Few-shot 설계 체크리스트
예시를 만들기 전에 다음을 확인하자.
- [ ] 예시가 엣지 케이스를 커버하는가? — 긍정/부정/중립 모두 포함
- [ ] 입력·출력 형식이 100% 일관한가? — 예시끼리 형식 불일치 시 모델 혼란
- [ ] 출력에 불필요한 설명이 없는가? — 모델이 설명을 따라 흉내낼 수 있음
- [ ] 예시 순서가 최신/대표적인가? — 마지막 예시에 모델이 가장 영향받음
- [ ] 총 예시 토큰이 컨텍스트의 30% 이하인가? — 본문 공간 확보 필수
- [ ] 실제 배포 전 3가지 이상 케이스로 검증했는가?