k
korAI
중급 전체
중급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가지 이상 케이스로 검증했는가?