k
korAI
중급 전체
중급2026-06-286분

예시 2~3개로 AI 출력 품질을 3배 끌어올리는 Few-Shot 설계법

Few-Shot 프롬프트는 단순히 예시를 나열하는 게 아니라 '무엇을 보여줄지'를 전략적으로 설계하는 기술입니다. 예시 선택·순서·형식만 바꿔도 모델의 응답 일관성이 극적으로 달라집니다.

few-shotprompt-engineeringclassification

왜 Few-Shot인가?

모델에게 지시(instruction)만 주는 Zero-Shot 방식은 모호한 작업에서 자주 흔들립니다. Few-Shot은 입력→출력 패턴을 직접 시연해 모델이 형식·톤·논리 구조를 빠르게 내재화하도록 돕습니다. 특히 분류, 변환, 요약처럼 '정답의 생김새'가 있는 작업에서 효과가 큽니다.

좋은 예시를 고르는 3가지 기준

  1. 경계 사례(edge case) 포함 — 전형적인 예시만 넣으면 모델은 쉬운 입력에만 잘 반응합니다. 헷갈릴 법한 사례를 1개 이상 넣으세요.
  2. 출력 길이·형식 일관성 — 예시마다 JSON이었다가 텍스트였다가 하면 모델이 혼동합니다. 출력 스키마를 고정하세요.
  3. 순서는 쉬운 것 → 어려운 것 — 연구에 따르면 복잡한 예시를 마지막에 배치할 때 모델이 더 잘 따릅니다.

실전 코드: 감성 분류기

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 테스트로 수치화했는가?