02 - 기본기 다지기 (Zero-shot, One-shot, Few-shot 프롬프팅)

2025-09-04

#Prompt-Engineering#LLM#ChatGPT#Gemini#Claude

들어가며

지난 1편에서는 프롬프트 엔지니어링이 무엇이며, 왜 개발자들에게 중요한지, 그리고 좋은 프롬프트를 구성하는 핵심 요소(과업, 맥락, 페르소나 등)에 대해 알아보았다. 이론적 기반을 다졌으니, 이제는 실제 코드를 작성하듯 프롬프트를 만들어 보자.

이번에는 프롬프트 엔지니어링의 가장 기초적이면서도 강력한 세 가지 기법인 제로샷(Zero-shot), 원샷(One-shot), 퓨샷(Few-shot) 프롬프팅에 대해 알아본다. 이 기법들은 모델에게 얼마나 많은 '예시'를 제공하는지에 따라 구분되며, 마치 함수에 전달하는 인자의 개수에 따라 동작이 달라지는 것처럼, AI의 응답을 제어하는 가장 기본적인 방법이다.

제로샷(Zero-shot) 프롬프팅: 직접적인 지시의 힘

제로샷(Zero-shot) 프롬프팅은 모델에게 어떠한 사전 예시도 제공하지 않고, 오직 작업에 대한 지시문만으로 결과를 요청하는 가장 간단하고 직접적인 기법이다. 이 방식은 모델이 사전 훈련 과정에서 학습한 방대한 지식과 패턴 인식 능력을 바탕으로 새로운 작업을 수행할 수 있다는 전제에 기반한다.   

개발자에게 이는 가장 빠르고 직관적인 방법이다. 별도의 준비 없이 바로 원하는 바를 지시하는 것이다.

프롬프트 예시 (감성 분석):

다음 문장의 감정을 '긍정', '부정', '중립'으로 분류해줘.

텍스트: 이 영화는 기대했던 것만큼 재미있지는 않았어.
감정:

예상 출력:

중립

이 기법은 텍스트 요약, 간단한 번역, 일반적인 질문에 대한 답변 등 모델이 이미 잘 알고 있는 보편적인 작업에 매우 효과적이다. 하지만, 우리가 원하는 결과물의 형식이 매우 구체적이거나, 작업이 미묘한 뉘앙스를 포함하는 복잡한 경우에는 원하는 결과를 얻지 못할 수 있다. 마치 명확한 스펙 문서 없이 "알아서 잘 만들어줘"라고 말하는 것과 비슷하다. 제로샷 프롬프팅이 기대처럼 작동하지 않을 때, 우리는 다음 단계로 넘어가야 한다.

원샷(One-shot) 프롬프팅: 올바른 방향으로의 작은 유도

원샷(One-shot) 프롬프팅은 모델에게 단 하나의 예시를 제공하여 원하는 결과물의 방향을 안내하는 기법이다. 이 단일 예시는 모델이 작업의 모호성을 해소하고, 따라야 할 특정 형식이나 스타일을 이해하는 데 중요한 단서 역할을 수행한다.   

제로샷으로 원하는 결과가 나오지 않을 때, "예를 들면 이런 식으로 해줘"라고 한 번 보여주는 것과 같다. 이 작은 유도가 결과의 질을 극적으로 바꿀 수 있다.

프롬프트 예시 (특정 형식으로 데이터 추출):

텍스트에서 도시 이름을 추출하고 다음 형식을 따라줘.

텍스트: "파리에서 열린 기술 컨퍼런스에 참석한 후, 나는 다음 목적지인 베를린으로 향했다."
출력: ["파리", "베를린"]

---

이제 다음 텍스트에서 도시 이름을 추출해줘.

텍스트: "서울의 활기찬 밤과 도쿄의 정갈한 거리는 나에게 깊은 인상을 남겼다."
출력:

예상 출력:

["서울", "도쿄"]

원샷 프롬프팅은 제로샷만으로는 부족하지만, 여러 예시를 제공할 필요는 없는 중간 난이도의 작업에 매우 적합하다. 잘 선택된 단 하나의 예시는 모델의 성능을 크게 향상시킬 수 있는 효율적인 방법이다. 하지만 예시의 품질에 따라 성능이 크게 좌우되며, 더 복잡한 패턴을 학습시키기에는 여전히 한계가 있다.

퓨샷(Few-shot) 프롬프팅: 예시를 통한 학습 (문맥 내 학습)

퓨샷(Few-shot) 프롬프팅은 모델에게 여러 개(일반적으로 2개에서 5개)의 예시를 제공하여 특정 패턴이나 규칙을 학습시키는 가장 강력한 기초 기법이다. 이는 문맥 내 학습(In-context Learning) 이라고도 불리는데, 모델이 프롬프트 내에 제공된 예시들로부터 실시간으로 작업을 학습하기 때문이다. 모델의 가중치를 변경하는 파인튜닝과는 달리, 오직 프롬프트 문맥 안에서만 학습이 이루어진다.

이 기법은 복잡한 지시사항을 말로 길게 설명하기보다, 여러 예시를 통해 직접 보여주는 것이 더 효과적인 경우에 특히 유용하다. 예를 들어, 자연어 질의를 특정 구조의 JSON 형식으로 변환하는 작업을 생각해 보자.

프롬프트 예시 (자연어를 JSON으로 변환):

자연어 설명을 JSON 객체로 변환해줘.

설명: "사용자 ID가 123이고 이름이 'Alice'인 사용자를 찾아줘."
JSON: {"user_id": 123, "name": "Alice"}

설명: "제품 코드가 'X-42'이고 재고가 100개 이상인 제품을 검색해줘."
JSON: {"product_code": "X-42", "stock": { "$gte": 100 }}

설명: "이메일이 'bob@example.com'인 고객의 주문 내역을 조회해줘."
JSON:

예상 출력:

{"customer_email": "bob@example.com", "query": "orders"}

퓨샷 프롬프팅은 모델이 복잡한 패턴을 일반화하고, 일관된 형식의 출력을 생성하도록 유도하는 데 매우 효과적다. 흥미로운 점은 한 연구에 따르면 예시에 포함된 레이블의 정확성보다 예시의 형식이나 레이블의 분포가 모델 성능에 더 큰 영향을 미칠 수 있다는 것이다. 이는 모델이 예시를 통해 '무엇'을 학습하는 것뿐만 아니라 '어떻게' 응답해야 하는지를 학습한다는 것을 명확히 보여준다.   

어떤 기법을 언제 사용해야 할까?

이 세 가지 기초 기법은 프롬프트 엔지니어링의 출발점이다. 상황에 맞는 최적의 기법을 선택하는 것이 중요하며, 다음 표는 각 기법의 특징과 사용 사례를 비교한 예시이다.

기법정의사용 시점핵심 장점주요 한계점
제로샷 (Zero-Shot)예시 없이 지시문만 제공간단하고 일반적인 작업 (요약, 번역 등)빠르고 간결하며, 추가 데이터가 필요 없음복잡하거나 특수한 형식의 작업에는 부적합
원샷 (One-Shot)단 하나의 예시를 제공작업의 모호성을 해소하거나 특정 형식을 안내할 때최소한의 정보로 모델을 효과적으로 유도 가능예시의 품질에 따라 성능이 크게 좌우됨
퓨샷 (Few-Shot)여러 개의 예시를 제공복잡한 패턴을 학습시키거나 일관된 출력이 필요할 때문맥 내 학습을 통해 높은 정확성과 일관성 확보프롬프트가 길어지고, 적절한 예시를 구성해야 함

참고 자료

Zero-Shot Prompting

Few-Shot Prompting

What is one shot prompting?