k
korAI
중급 전체
중급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 중 비용-정확도 트레이드오프를 검토했는가?