Agent Mentor Learn
프롬프트 엔지니어링 기초: 효과적인 지시문 쓰는 법 · 3 / 6강

레슨 3: Few-Shot 학습: 예시로 AI를 이끌기

학습 목표:

  • zero-shot, one-shot, few-shot의 차이 이해하기
  • 예시 2~5개로 AI가 패턴을 파악하게 만들기
  • 좋은 예시를 고르는 원칙 익히기

전제: << 레슨 2: 프롬프트의 기본 구조 | 다음: 레슨 4 >>

설명보다 예시가 더 명확할 때

AI가 특정 형식으로 데이터를 출력하기를 바랄 때가 있습니다. 이를테면 '이 글에서 핵심 사실을 뽑아 JSON으로 돌려줘' 같은 요청입니다. 프롬프트에서 필드명, 데이터 타입, 중첩 구조까지 한참을 설명했는데도, AI는 여러분이 머릿속에 그린 것과 다른 모양의 결과를 내놓습니다.

다른 방법을 써 보세요. 형식을 설명하는 대신 깔끔한 예시 2~3개를 AI에게 보여 주는 것입니다. AI는 그것을 읽고 여러분이 원하는 바를 정확히 파악해, 첫 시도에서 형식을 맞춥니다. 이것이 few-shot 학습의 힘입니다. 예시 하나가 설명 한 문단보다 명확합니다1.

few-shot 학습이란 무엇인가

few-shot 학습은 소수의 예시(보통 2~5개)를 프롬프트 안에 넣어 원하는 패턴 쪽으로 AI를 이끄는 프롬프트 기법입니다2 1. AI는 그 예시들에서 입력과 출력의 관계, 형식, 문체를 배우고, 그것을 새로운 입력에 적용합니다.

비교해 볼 세 가지 방식이 있습니다.

  • Zero-shot: 예시 없이 지시만3
  • One-shot: 예시 하나
  • Few-shot: 예시 2~5개2

Zero-shot: 지시만 주기

Zero-shot 프롬프트:

아래 사용자 리뷰를 "긍정", "부정", "중립" 중 하나로 분류해 주세요.
리뷰: 제품은 잘 작동하는데, 가격이 조금 비싸네요.분류:

AI는 이렇게 답할 수 있습니다.

  • '중립'(타당합니다)
  • '부정'('비싸다'는 말이 있다는 이유로)
  • '유보적 긍정'(그 자리에서 지어낸 범주)

예시가 없으면 AI는 애매한 경우를 자기 판단에만 기대어 처리할 수밖에 없습니다.

Few-shot: 예시를 주기

Few-shot 프롬프트:

사용자 리뷰를 "긍정", "부정", "중립"으로 분류해 주세요.
예시:
리뷰: 마감이 훌륭해요, 아주 만족합니다.분류: 긍정
리뷰: 전혀 쓸 수가 없네요, 돈 낭비였습니다.분류: 부정
리뷰: 기능은 괜찮은데 고객 지원이 느립니다.분류: 중립
이제 이 리뷰를 분류해 주세요.
리뷰: 제품은 잘 작동하는데, 가격이 조금 비싸네요.분류:

예시를 본 뒤 AI는 이렇게 이해합니다.

  • '긍정'은 완전히 만족한 리뷰에 붙인다
  • '부정'은 심각한 불만이다
  • '중립'은 좋은 점과 나쁜 점이 섞인 리뷰다
  • 출력은 설명 없이 단어 하나다

그래서 AI는 '중립'을 돌려줍니다. 이 리뷰가 세 번째 예시의 패턴과 맞아떨어지기 때문입니다.

few-shot 학습이 동작하는 원리

few-shot 학습은 대규모 언어 모델의 인컨텍스트 학습(in-context learning) 능력을 활용합니다2. 모델을 다시 학습시키는 것이 아니라, 지금의 대화 안에서 예시 몇 개를 보고 규칙을 추론해 적용하는 것입니다.

모델은 예시에서 세 종류의 정보를 얻습니다.

  1. 입력에서 출력으로 가는 대응 관계: 어떤 종류의 입력이 어떤 종류의 출력을 낳는가
  2. 출력 형식과 문체: 짧은 답인가 자세한 답인가, JSON인가 일반 텍스트인가
  3. 엣지 케이스의 기준: 애매한 경우를 어떻게 분류해야 하는가

핵심 연구 결과: 연구에 따르면 예시 하나하나가 정확한지보다 예시의 형식다양성이 더 중요합니다2. 예시 안의 레이블 몇 개가 틀렸더라도, 형식이 일관되고 예시가 서로 다른 종류의 입력을 포괄하기만 하면 AI는 여전히 쓸 만한 패턴을 배울 수 있습니다.

좋은 예시를 설계하는 원칙

아무 예시나 몇 개 던져 넣어서는 안 됩니다. 예시의 품질이 AI의 결과물을 그대로 좌우합니다1.

원칙 1: 최소 2개, 보통 5개를 넘지 않게

  • 예시 하나(one-shot)로는 부족할 때가 있습니다. AI가 그것을 특수한 경우로 받아들일 수 있습니다
  • 2~3개면 대체로 AI가 패턴을 파악하기에 충분합니다
  • 4~5개는 더 복잡한 작업이나 엣지 케이스가 많은 작업을 위한 것입니다
  • 5개를 넘으면 얻는 것은 줄어들고 토큰만 꽤 더 들어갑니다

2개로 시작하고, 결과가 충분히 좋지 않을 때만 세 번째와 네 번째를 더하세요1.

원칙 2: 예시는 대표성이 있고 다양해야 한다

예시는 그 작업이 마주할 수 있는 서로 다른 종류의 입력을 포괄해야 합니다. 이것이 예시의 다양성입니다2.

다양성이 부족한 예시:

예시 1: iPhone 15 Pro → 휴대폰예시 2: iPhone 14 → 휴대폰예시 3: iPhone 13 → 휴대폰
이제 분류: MacBook Pro

모든 예시가 휴대폰입니다. AI는 다른 종류의 전자 제품을 본 적이 없으니, 그런 것이 오면 어떻게 처리할지 모를 수 있습니다.

다양성을 갖춘 예시:

예시 1: iPhone 15 Pro → 휴대폰예시 2: MacBook Air → 노트북예시 3: AirPods Pro → 이어폰
이제 분류: iPad Pro

서로 다른 제품 범주를 포괄하므로 AI는 더 일반적인 분류 논리를 배울 수 있습니다.

원칙 3: 예시 사이의 형식을 똑같이 유지한다

형식의 일관성은 few-shot 프롬프트가 성공하는 열쇠입니다2.

일관되지 않은 형식:

예시 1:입력: 날씨 참 좋다출력: 긍정
예시 2:"이 영화 진짜 지루했다" --> 부정 감정
예시 3: 그냥 그렇다 → 중립

형식이 제각각이라 AI는 '긍정'을 출력해야 할지, '긍정 감정'을 출력해야 할지, 또 다른 무언가를 출력해야 할지 알 수 없습니다.

일관된 형식:

예시 1:입력: 날씨 참 좋다출력: 긍정
예시 2:입력: 이 영화 진짜 지루했다출력: 부정
예시 3:입력: 그냥 그렇다출력: 중립

깔끔하고 균일해서 AI는 출력이 형용사 하나여야 한다는 것을 압니다.

원칙 4: 엣지 케이스와 헷갈리기 쉬운 예시를 넣는다

작업에 회색 지대가 있다면 그것을 예시에 넣으세요1.

상황: 코드 주석이 쓸모 있는지 판단하기

뻔한 예시만 있을 때:

예시 1:코드: x = x + 1  # 1 더하기판정: 쓸모없음 (주석이 코드를 그대로 반복한다)
예시 2:코드: result = calculate_tax(income, deductions)  # 납부할 세금 계산판정: 쓸모 있음 (업무적 의미를 설명한다)

엣지 케이스를 포함했을 때:

예시 1:코드: x = x + 1  # 1 더하기판정: 쓸모없음 (주석이 코드를 그대로 반복한다)
예시 2:코드: result = calculate_tax(income, deductions)  # 납부할 세금 계산판정: 쓸모 있음 (업무적 의미를 설명한다)
예시 3:코드: time.sleep(2)  # API 레이트 리밋이 풀릴 때까지 대기판정: 쓸모 있음 (왜 기다리는지를 설명하며, 이는 드러나 있지 않다)
예시 4:코드: users = users.filter(active=True)  # 활성 사용자 필터링판정: 쓸모없음 (메서드 이름만으로 이미 분명하다)

예시 3과 4는 AI가 경계를 파악하도록 돕습니다. '코드가 무엇을 하는지 설명하는' 주석이라고 해서 모두 쓸모 있는 것은 아닙니다. 중요한 것은 코드가 이미 스스로 의도를 분명히 드러내고 있는지입니다.

실전 예제: few-shot으로 구조화된 데이터 추출하기

여기서 가장 흔한 작업은 비구조화된 텍스트에서 구조화된 데이터를 뽑아내는 것입니다.

작업: 채용 공고에서 핵심 필드 추출하기

Zero-shot 버전(불안정):

아래 채용 공고에서 다음을 추출해 주세요: 직무명, 연봉 범위, 근무지,요구 경력. JSON으로 돌려주세요.
채용 공고: 시니어 Python 개발자를 채용합니다, 서울 근무, 3~5년 경력,연봉 9000만~1억 원.

AI는 온갖 형식을 돌려줄 수 있습니다.

또는

필드명도, 형식도, 단위도 모두 제각각입니다.

Few-shot 버전(안정된 형식):

채용 공고에서 핵심 필드를 추출해 아래 JSON 형식으로 돌려주세요.
예시 1:입력: 프론트엔드 엔지니어 채용, 판교, 2~3년 경력, 연봉 6000만~7500만 원출력:{  "position": "프론트엔드 엔지니어",  "location": "판교",  "experience": "2~3년",  "salary": "연봉 6000만~7500만 원"}
예시 2:입력: 급구: Java 백엔드, 부산(서면), 5년 이상 필수, 월급 500만~700만 원출력:{  "position": "Java 백엔드",  "location": "부산(서면)",  "experience": "5년 이상",  "salary": "월급 500만~700만 원"}
예시 3:입력: 데이터 분석가, 원격, 경력 무관, 시급 4만~6만 원출력:{  "position": "데이터 분석가",  "location": "원격",  "experience": "무관",  "salary": "시급 4만~6만 원"}
이제 이것을 처리해 주세요:입력: 시니어 Python 개발자를 채용합니다, 서울 근무, 3~5년 경력,연봉 9000만~1억 원.출력:

예시들이 세 가지 급여 단위(연봉, 월급, 시급)와 세 가지 근무지 유형(도시, 도시와 세부 지역, 원격)을 포괄하므로 AI는 다음을 배웁니다.

  • 영어 필드명을 쓴다
  • 원문의 급여 단위를 그대로 유지한다
  • 근무지를 추출할 때 세부 정보를 남긴다
  • '무관' 역시 유효한 경력 요건이다

few-shot에서 흔한 함정

함정 1: 예시가 너무 적어 포괄 범위가 좁다

예시를 하나만 주면 AI는 규칙이 아니라 사례 하나를 볼 뿐입니다.

해결: 최소 2개, 가능하면 3개.

함정 2: 예시 사이의 형식이 일관되지 않다

여기서는 화살표 →, 저기서는 콜론 :, 또 다른 곳에서는 여러 줄로 씁니다.

해결: 형식 하나를 정하고 모든 예시에서 엄격하게 지킵니다.

함정 3: 쉬운 경우뿐이고 엣지 케이스가 없다

실제 데이터에는 잡음과 모호함, 빈 곳이 있습니다. 예시가 이상적인 경우만 보여 주면 AI는 엣지 케이스를 만나는 순간 멈춰 섭니다.

해결: 최소 한 개의 예시에는 엣지 케이스를 넣습니다(빠진 필드, 애매한 표현 등).

함정 4: 예시가 너무 많다

예시가 5개를 넘어가면 얻는 것은 미미하고, 토큰을 더 쓰며 응답만 길어집니다.

해결: 2~3개로 시작하고 필요할 때만 늘립니다. 5개를 넘길 일은 거의 없습니다.

언제 few-shot을 쓸 것인가

few-shot은 이런 상황에 가장 잘 맞습니다.

  • 형식 변환: 비구조화 텍스트 → JSON, Markdown, CSV
  • 분류: 감성 분석, 주제 태깅, 의도 파악
  • 문체 모방: 특정한 글쓰기 스타일이나 코드 스타일 맞추기
  • 말로 옮기기 어려운 규칙: '어떤 주석이 쓸모없는가' 같은 것

잘 맞지 않는 경우는 이렇습니다.

  • 작업 자체가 단순할 때: '이걸 영어로 번역해 줘'에는 예시가 필요 없습니다
  • 입력이 매번 고유할 때: 창작 글쓰기나 브레인스토밍에서는 예시가 오히려 틀을 씌웁니다
  • 외부 지식이 필요할 때: '2024년 월드컵 우승팀이 어디야' 같은 질문은 예시로 해결되지 않습니다

경험칙 하나. 사람 동료에게 예시 2~3개를 보여 주면 무엇을 해야 할지 알아들을 만한 일이라면, few-shot이 잘 맞습니다.

정리

few-shot 학습은 예시 25개로 AI가 원하는 패턴을 파악하게 만드는 방법이며, 말로 설명하는 것보다 명확하다. 좋은 예시의 조건은 이렇다. 개수가 적당하고(25개), 대표성과 다양성을 갖추고, 형식이 동일하며, 엣지 케이스를 포함한다.

few-shot은 형식 변환, 분류, 문체 모방에 가장 잘 맞는다. 예시를 설계할 때는 2개로 시작하고, 서로 다른 종류의 입력을 포괄하는지 확인하며, 모든 예시에 같은 형식을 쓴다.

다음 레슨에서는 chain-of-thought를 다룹니다. AI가 추론 단계를 드러내게 해서 복잡한 작업의 정확도를 끌어올리는 방법입니다.

다음 레슨 Chain-of-Thought: AI가 추론 과정을 보여주게 하기 >>

Footnotes

  1. Few-Shot Prompting Guide — https://www.prompthub.us/blog/the-few-shot-prompting-guide 2 3 4 5

  2. Prompt Engineering Guide - Few-Shot Prompting — https://www.promptingguide.ai/techniques/fewshot 2 3 4 5 6

  3. Zero-shot Learning - Wikipedia — https://en.wikipedia.org/wiki/Zero-shot_learning

연습

01

작업: 사용자 피드백을 '기능 요청', '버그 신고', '사용법 문의' 세 범주로 AI가 분류하게 만들기.

레벨 1: 좋은 예시 설계하기

서로 다른 경우를 포괄하면서 형식이 일관된 few-shot 예시 3개를 설계해 보세요.

완료 기준 · 로컬에서 확인
02

잘 동작하지 않는 few-shot 프롬프트가 있습니다. 문제를 찾아 개선해 보세요.

레벨 2: 기존 few-shot 프롬프트 개선하기
제품 리뷰에서 장점과 단점을 뽑아서 JSON으로 출력해 줘.
예시:"품질 괜찮음" -> {"pros": ["품질"], "cons": []}"너무 비싸고 배송도 느림" -> {"pros": [], "cons": ["비쌈", "배송 지연"]}
이제 처리해 줘: [리뷰 텍스트]

문제: AI의 출력이 불안정합니다. 필드명이 다른 언어로 나오기도 하고, 장점이 구체적인 항목('품질')이 아니라 형용사('좋음')로 나오기도 합니다.

완료 기준 · 로컬에서 확인