ChatGPT에게 "이메일 써줘"라고 하면 그럭저럭 결과가 나온다. 그런데 "이런 톤으로, 이런 구조로" 예시를 2~3개 먼저 보여주면 결과가 완전히 달라진다. 이것이 Few-Shot Prompting이다.

Fine-tuning처럼 모델을 재훈련하는 것도 아니고, RAG처럼 외부 데이터를 붙이는 것도 아니다. 그냥 프롬프트 안에 예시를 몇 개 넣는 것뿐인데, 왜 이렇게 효과가 큰 걸까?

Few-Shot이란 무엇인가

기계학습에서 Few-Shot Learning은 원래 "적은 데이터로 새로운 태스크를 학습하는 능력"을 뜻한다. 수천 장의 고양이 사진 없이도 3~4장만 보고 고양이를 인식하는 것처럼.

LLM 시대에서 Few-Shot은 의미가 약간 달라졌다. 모델을 재훈련하는 게 아니라, 프롬프트 안에 예시를 넣어서 모델의 출력 패턴을 유도하는 기법이다. GPT-3 논문(2020)에서 본격적으로 정의한 개념으로, 이후 프롬프트 엔지니어링의 가장 기본적인 테크닉이 되었다.

용어를 정리하면 이렇다.

  • Zero-Shot: 예시 없이 지시만 내림. "이 문장의 감정을 분석해줘."
  • One-Shot: 예시 1개 제공. "예: '배송이 빨라요' → 긍정. 이제 이 문장을 분석해줘."
  • Few-Shot: 예시 2~5개 제공. 패턴을 더 명확하게 잡아줌.

왜 예시 몇 개가 이렇게 강력한가

LLM은 본질적으로 패턴 매칭 기계다. 다음에 올 토큰을 예측하는 것이 전부인데, 프롬프트 안에 입력-출력 쌍을 넣으면 모델이 "아, 이 패턴을 반복하면 되는구나"라고 추론한다. 학습이 아니라 문맥 내 추론(In-Context Learning)이다.

핵심은 암묵적 규칙의 전달에 있다. "JSON으로 응답해줘"라고 말로 설명하는 것보다, 실제 JSON 예시를 3개 보여주는 게 훨씬 정확하다. 말로 표현하기 어려운 톤, 구조, 포맷, 판단 기준 같은 것들이 예시를 통해 자연스럽게 전달된다.

실제로 이런 차이가 난다.

Zero-Shot 예시

 
 
다음 고객 리뷰의 감정을 분석해줘.
"배송은 빨랐는데 포장이 엉망이었어요"

모델 응답: "이 리뷰는 긍정과 부정이 혼합되어 있습니다. 배송 속도에 대해서는 만족하지만..."
→ 장황하고, 출력 포맷이 일정하지 않다.

Few-Shot 예시

 
고객 리뷰를 분석해서 아래 형식으로 응답해.

리뷰: "제품 품질이 정말 좋아요"
결과: { "감정": "긍정", "키워드": ["품질"], "점수": 0.9 }

리뷰: "환불 처리가 너무 느려요"
결과: { "감정": "부정", "키워드": ["환불", "느림"], "점수": 0.2 }

리뷰: "가격 대비 괜찮은데 AS가 아쉬워요"
결과: { "감정": "혼합", "키워드": ["가격", "AS"], "점수": 0.5 }

리뷰: "배송은 빨랐는데 포장이 엉망이었어요"
결과:

모델 응답: { "감정": "혼합", "키워드": ["배송", "포장"], "점수": 0.4 }
→ 포맷 정확, 판단 기준 일관, 후처리 파싱 가능.

예시 3개를 추가했을 뿐인데 출력의 품질과 일관성이 완전히 달라졌다.

실전에서 Few-Shot을 잘 쓰는 법

1. 예시의 다양성이 핵심이다

비슷한 예시 3개보다 서로 다른 케이스 3개가 낫다. 위의 감정 분석 예시에서도 긍정/부정/혼합을 골고루 넣었다. 모델이 "긍정만 답하면 되나?"라고 오해할 여지를 차단하는 것이다.

2. 예시 순서가 결과에 영향을 준다

LLM은 마지막 예시에 더 강하게 영향받는 경향이 있다(recency bias). 가장 전형적인 케이스를 마지막에 배치하거나, 어려운 케이스를 뒤에 놓으면 까다로운 입력에 대한 처리가 좋아진다.

3. 네거티브 예시를 포함하라

"이렇게 하지 마라"를 말로 쓰는 것보다, 잘못된 출력과 올바른 출력을 대비시키는 게 효과적이다.

 
 
# 나쁜 예시 (이렇게 하지 말 것)
입력: "서버 에러 500"
출력: "서버에 문제가 있는 것 같습니다. 관리자에게 문의하세요."

# 좋은 예시 (이렇게 할 것)
입력: "서버 에러 500"
출력: "500 Internal Server Error. 1) 서버 로그 확인 2) 최근 배포 변경사항 점검 3) DB 연결 상태 확인"

4. 3~5개가 최적 구간이다

1개는 우연일 수 있고, 10개는 토큰 낭비다. 대부분의 태스크에서 3~5개 예시면 모델이 패턴을 충분히 파악한다. 단, 출력 구조가 복잡할수록(중첩 JSON, 다단계 추론) 예시를 늘려야 한다.

Few-Shot vs 다른 기법들

Few-Shot이 만능은 아니다. 상황에 따라 다른 기법이 더 적합할 수 있다.

Fine-tuning이 나은 경우: 동일한 태스크를 수만 번 반복 실행할 때. 매번 프롬프트에 예시를 넣는 토큰 비용보다 모델을 한 번 튜닝하는 게 경제적이다. 의료 진단, 법률 문서 분류처럼 도메인 특화 정확도가 중요할 때도 마찬가지.

RAG가 나은 경우: 모델이 모르는 최신 정보나 내부 문서를 참조해야 할 때. Few-Shot은 "어떻게 답할지"를 가르치고, RAG는 "무엇을 참고할지"를 제공한다. 둘은 경쟁이 아니라 조합 관계다.

Chain-of-Thought가 나은 경우: 수학 문제, 논리 추론처럼 단계별 사고가 필요한 태스크. 이때는 Few-Shot 예시 안에 추론 과정을 포함시키는 "Few-Shot CoT"가 가장 강력하다.

실무에서 가장 흔한 조합은 Few-Shot + RAG다. RAG로 관련 문서를 검색하고, Few-Shot으로 응답 포맷을 지정하는 패턴이다.

개발자를 위한 실전 패턴

패턴 1: 코드 변환기

# TypeScript → Python 변환기

TypeScript:
const greet = (name: string): string => `Hello, ${name}`;

Python:
def greet(name: str) -> str:
    return f"Hello, {name}"

---

TypeScript:
const sum = (arr: number[]): number => arr.reduce((a, b) => a + b, 0);

Python:
def sum_arr(arr: list[int]) -> int:
    return sum(arr)

---

TypeScript:
{변환할 코드}

Python:

패턴 2: API 응답 정규화

다양한 외부 API 응답을 우리 내부 포맷으로 변환해.

입력: { "user_name": "kim", "created": "2024-01-15T09:00:00Z" }
출력: { "name": "kim", "createdAt": "2024-01-15", "source": "external" }

입력: { "firstName": "lee", "timestamp": 1705312800 }
출력: { "name": "lee", "createdAt": "2024-01-15", "source": "external" }

입력: {실제 API 응답}
출력:

패턴 3: 커밋 메시지 생성

git diff를 보고 Conventional Commits 형식으로 커밋 메시지를 작성해.

diff: +const validateEmail = (email) => /^[^\s@]+@[^\s@]+$/.test(email);
message: feat: add email validation utility function

diff: -timeout: 3000 +timeout: 5000
message: fix: increase API timeout to prevent request failures

diff: {실제 diff}
message:

Few-Shot의 한계와 주의점

만능이 아닌 지점도 분명하다.

토큰 비용: 예시 5개 × 200토큰이면 매 요청마다 1,000토큰이 추가된다. 대량 처리 시 비용이 누적되므로, 안정화된 태스크는 Fine-tuning으로 전환을 고려해야 한다.

예시 편향: 예시가 특정 패턴에 치우치면 모델도 치우친다. 긍정 예시만 3개 넣으면 부정 입력에도 긍정으로 답하는 경향이 생긴다. 의도적으로 엣지 케이스를 포함시켜야 한다.

복잡한 추론의 한계: Few-Shot만으로 다단계 논리 추론을 유도하기 어렵다. 이때는 Few-Shot CoT(Chain-of-Thought)로 예시 안에 추론 과정을 명시해야 한다.

마치며

Few-Shot Prompting은 프롬프트 엔지니어링에서 가장 투자 대비 효과가 큰 기법이다. 모델을 재훈련하지 않고, 외부 시스템을 구축하지 않고, 프롬프트에 예시 몇 줄을 추가하는 것만으로 출력 품질이 극적으로 달라진다.

"AI를 잘 쓴다"는 것은 결국 "AI에게 내가 원하는 것을 정확히 전달하는 것"이다. 그리고 인간이 무언가를 가장 정확하게 전달하는 방법은 예시를 보여주는 것이었다. 수천 년 전 도제식 교육에서도, 2025년 LLM 프롬프트에서도, 원리는 같다.

말로 백 번 설명하는 것보다 한 번 보여주는 게 낫다. Few-Shot은 그 오래된 진리의 AI 버전이다.

LIST

+ Recent posts