본문으로 건너뛰기
김신건의 로그

[Prompting] Zero-Shot Prompting

· 수정 · 📖 약 4분 · 1,748자/단어 #ai #llm #prompting #instruction-tuning
Zero-Shot Prompting, Zero-shot prompting, zero-shot, zero shot, 제로샷 프롬프팅, 0-shot, instruction prompting, instruction following

정의

Zero-shot prompting 은 프롬프트에 예시 없이 태스크 지시문만 제공해 모델이 태스크를 수행하도록 하는 기법입니다. K=0 few-shot 이지만 의미가 다르며, 모델이 사전학습 + instruction tuning 으로 얻은 일반화 능력에 의존합니다.

Radford et al. (2019) 의 GPT-2 논문에서 “unsupervised multitask learners” 라는 표현으로 처음 대중화되었고, InstructGPT (2022) 이후 실용화되었습니다.

언제 쓰이나

  • 표준 태스크: 요약, 번역, 감정 분석, 텍스트 분류
  • 자연어 인터페이스 (챗봇): 사용자 발화가 매번 달라 few-shot 이 비실용적
  • 비용 최소화: 대량 배치 처리에서 입력 토큰 절감
  • 탐색적 실험 초기: 새 태스크를 설계할 때 반복 실험 시작점
  • 프로덕션 간단 태스크: 모델이 이미 잘 아는 태스크에서 예시 없이도 충분

기본 흐름

flowchart LR
    Inst["지시문\n(태스크 설명)"] --> Model["Instruction-tuned LLM"]
    Input["입력 텍스트"] --> Model
    Model --> Output["예측 출력"]

예시가 없다. 지시문 + 입력만으로 추론. 모델의 instruction tuning 품질이 곧 zero-shot 성능.

기본 구조

{지시문}

{입력}

예:

다음 문장의 감정을 positive 또는 negative 중 하나로만 답하시오.

문장: 이 식당은 서비스도 좋고 음식도 맛있었습니다.
답:

왜 zero-shot 이 가능한가

  • 사전학습 데이터에 이미 태스크가 섞여 있음: 인터넷 코퍼스에는 “번역: … -> …”, “요약: …”, “질문: … 답: …” 형태가 자연스럽게 포함되어, 모델이 pattern 을 학습.
  • Instruction tuning (FLAN, T0, InstructGPT): 다양한 태스크의 지시문 + 정답 쌍 으로 파인튜닝. 미지의 지시문에도 일반화.
  • RLHF: 사람 선호도 기반 강화학습으로 지시 준수 능력 강화.
flowchart TD
    PT["사전학습\n(웹 텍스트 수조 토큰)"] --> IT["Instruction Tuning\n(FLAN, T0, SFT)"]
    IT --> RLHF["RLHF / DPO\n(사람 선호도 학습)"]
    RLHF --> ZS["Zero-shot 능력\n(미학습 태스크도 수행)"]

Few-shot 대비 장단점

기준Zero-shotFew-shot
입력 토큰매우 짧음K 배 증가
비용낮음예시 개수만큼 증가
형식 준수지시문에만 의존예시가 강력한 앵커
엣지 케이스지시문에 안 쓰면 놓침예시로 커버 가능
성능 (단순 태스크)Instruction-tuned 모델이면 대등소폭 우위
성능 (복잡/특이 태스크)지시문만으론 부족예시로 disambiguate

Zero-shot CoT

Kojima et al. (2022) 는 프롬프트 끝에 “Let’s think step by step” 을 붙이는 것만으로 CoT 를 유도할 수 있음을 보였습니다.

Q: {question}
A: Let's think step by step.

Multi-Arith 정확도 17.7% → 78.7% (InstructGPT-003). 자세한 내용은 Chain-of-Thought 참조.

sequenceDiagram
    participant U as 사용자
    participant L as LLM

    U->>L: 문제 + "단계별로 풀이하시오"
    L-->>L: 내부 추론 단계 생성
    L-->>U: 1단계 풀이 ... 최종 답

한국어에서는:

  • “차근차근 생각해 봅시다.”
  • “단계별로 풀이해 봅시다.”
  • “먼저 문제를 정리하고, 단계별로 계산합니다.”

Instruction tuning 의 영향

Zero-shot 성능은 모델의 instruction tuning 품질에 강하게 의존합니다.

FLAN (Wei et al., 2021)

Google 의 137B LaMDA-PT 를 62개 NLP 태스크의 지시문으로 파인튜닝. 미학습 태스크에서 zero-shot 성능이 raw LM 대비 큰 폭 개선.

T0 (Sanh et al., 2022)

Multitask prompted training. 다양한 프롬프트 템플릿을 학습하여 새 지시문 형태에도 robust.

InstructGPT / RLHF

Ouyang et al. (2022) 는 사람 라벨러의 지시문 예시로 SFT + PPO. ChatGPT 계보의 시작. Zero-shot 이 사실상 표준이 된 계기.

오늘의 instruction-tuned 모델

  • OpenAI GPT-4o, GPT-5, o1/o3
  • Anthropic Claude 3.5/3.7/4/Opus 4
  • Google Gemini 2.5 Pro/Flash
  • Meta Llama 3.3, Llama 4
  • DeepSeek V3, R1
  • Mistral Large 2, Ministral

모두 zero-shot 시나리오를 기본으로 튜닝되어 있고, 실전 사용의 90%+ 는 zero-shot 형태입니다.

잘 쓰는 지시문의 원칙

  1. 구체적 태스크 정의: “이 텍스트를 요약하시오” 보다 “다음 뉴스 기사를 3문장 이하 한국어로 요약하시오”.
  2. 출력 형식 명시: JSON 객체로 답하되 {"summary": ..., "keywords": [...]} 형태.
  3. 제약 명시: “고유명사를 그대로 유지”. “300자 이내”.
  4. 역할 부여 (선택): “당신은 시니어 백엔드 엔지니어입니다”. 스타일 조정에는 유효, 정확도에는 미미.
  5. 분리자 사용: <입력>...</입력>, ###, --- 로 지시문과 데이터 경계 명확화.
  6. 부정보다 긍정 지시: “하지 마세요” 보다 “이렇게 하세요”. 부정문은 놓치기 쉬움.

Claude 계열에는 XML 구분자가 특히 효과적입니다:

<instruction>
다음 고객 이메일의 의도를 분류하시오.
분류 결과: INQUIRY, COMPLAINT, REFUND_REQUEST, OTHER 중 하나
</instruction>

<email>
{email_body}
</email>

분류:

실전 예시

감정 분석

당신은 한국어 고객 리뷰 분석기입니다.
아래 리뷰의 감정을 POSITIVE, NEGATIVE, NEUTRAL 중 하나로만 답하시오.

리뷰: "배송은 빠른데 포장이 엉망이었어요. 제품 자체는 괜찮습니다."
감정:

예상 출력: NEUTRAL

구조화 JSON 추출

다음 채용 공고에서 정보를 추출해 JSON 으로 반환하시오.
형식: {"role": "...", "company": "...", "skills": [...], "location": "..."}

텍스트: (주)테크스타트에서 시니어 백엔드 엔지니어를 채용합니다.
주요 기술: Java, Spring Boot, Kubernetes. 서울 강남 근무.

JSON:

Zero-shot CoT: 수학 문제

다음 문제를 단계별로 풀이하시오.

문제: 사과가 32개 있다. 4명이 균등하게 나누면 각자 몇 개씩 받는가?
단계별 풀이:

Python 에서 zero-shot 호출

from openai import OpenAI

client = OpenAI()

def zero_shot(instruction: str, input_text: str) -> str:
    response = client.chat.completions.create(
        model="gpt-4o",
        temperature=0.0,
        messages=[
            {"role": "system", "content": instruction},
            {"role": "user", "content": input_text},
        ],
    )
    return response.choices[0].message.content.strip()

# 감정 분석
result = zero_shot(
    instruction="고객 리뷰를 POSITIVE, NEGATIVE, NEUTRAL 중 하나로 분류하시오.",
    input_text="배송이 빠르고 포장도 깔끔해서 아주 만족합니다.",
)
print(result)  # "POSITIVE"

성능 한계

한계 상황원인대안
사내 고유 분류 체계지시문으로 표현 어려움few-shot 예시 추가
10개 이상 라벨 분류라벨 집합이 너무 큼few-shot 또는 파인튜닝
엄격한 구조 출력형식 오류율 높음[[function-calling
도메인 특화 어휘사전학습에 희소few-shot + [[llm-rag
수치 추론 및 계산직접 계산 실수zero-shot CoT 또는 code interpreter

함정

WARNING

모호한 태스크에서 오답률이 급등합니다. 라벨 후보가 표준적이지 않거나 (예: 5단계 감정, 자체 스키마), 도메인 특수 어휘가 나오면 예시 없이 정확히 맞추기 어렵습니다. 이럴 때는 최소한 one-shot 이라도 붙여야 합니다.

CAUTION

잘못된 지시문에 순응합니다. 지시문에 모순이 있어도 모델은 대개 뭐라도 답하려 합니다. 이상한 라벨 조합, 존재하지 않는 태스크 이름에도 그럴싸한 답을 내니, 지시문 자체의 검증이 필요합니다.

WARNING

Zero-shot 은 재현성이 낮을 수 있습니다. temperature=0 이어도 시스템 프롬프트, 컨텍스트 캐시, provider 백엔드 상태에 따라 결과가 흔들립니다. 여러 시드로 평균 내는 편이 안전.

IMPORTANT

모델별로 최적 지시문 스타일이 다릅니다. GPT 는 markdown 을 잘 따르고, Claude 는 XML 구분자에 강하고, Gemini 는 구조화된 프롬프트에 반응이 좋습니다. 이식성이 필요하면 공통 최소분모 형식으로.

언제 zero-shot 을 쓰나

  • 간단한 요약, 번역, 감정 분석 (표준 태스크)
  • 자연어 인터페이스 (챗봇): 사용자 발화가 매번 달라 few-shot 이 무의미
  • 비용 최소화: 대량 배치 처리
  • 탐색적 태스크 정의: 프롬프트 반복 실험 초기 단계

언제 zero-shot 대신 few-shot 이 낫나

  • 출력 스키마가 매우 엄격 (JSON 스펙, 특정 XML)
  • 도메인 특화 (법률, 의료, 사내 용어)
  • 분류 라벨이 비표준
  • 예시가 지시문보다 훨씬 짧고 명확할 때
  • 모델이 instruction tuning 이 약한 (base model) 계열일 때

관련 위키

이 글의 용어 (7개)
[LLM Eval] BIG-Bench (Beyond the Imitation Game)ai
정의 BIG-Bench (Beyond the Imitation Game Benchmark) 는 2022년 Google + 132개 기관 442명의 공저로 발표된 대형 언어 모델 …
[LLM Eval] HELM: Holistic Evaluation of Language Modelsai
정의 HELM (Holistic Evaluation of Language Models) 는 Stanford CRFM (Center for Research on Foundation…
[Prompting] Chain-of-Thought (CoT)ai
정의 Chain-of-Thought (CoT) prompting 은 대형 언어 모델이 최종 답을 내기 전에 중간 추론 단계를 자연어로 생성하도록 유도 하는 프롬프팅 기법입니다. …
[Prompting] Few-Shot Promptingai
정의 Few-shot prompting 은 프롬프트 안에 작업의 입력-출력 예시 K개 (보통 K = 216) 를 함께 제공해 모델이 그 형식과 규칙을 유추해 새 입력에 답하도록 …
[Prompting] One-Shot Promptingai
정의 One-shot prompting 은 프롬프트에 정확히 1개의 입력-출력 예시 를 함께 제공하는 프롬프팅입니다. K=1 인 few-shot 의 특수 케이스이자 zero-sh…
Function Calling / Tool Use: LLM 도구 사용ai
정의 Function Calling (또는 Tool Use) 은 LLM 이 사전 정의된 함수/도구를 호출하기 위한 인자를 JSON 으로 생성 하는 기능. JSON Schema 로…
LLM RAG: Retrieval-Augmented Generationai
정의 RAG (Retrieval-Augmented Generation) 는 LLM 생성 전에 외부 지식 베이스에서 관련 문서를 검색 하여 프롬프트에 삽입하는 패턴. 최신 정보, …

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기