
예시를 많이 넣을수록 AI가 더 잘 따라온다고 믿었습니다. 그런데 직접 실험해보니 예시 다섯 개가 두 개보다 나을 게 없었습니다. 토큰은 두 배 넘게 쓰면서요. Few-shot 프롬프팅에 대해 흔히 알려진 것과 실제 사이에는 꽤 큰 간격이 있습니다. 그 간격을 직접 좁혀가면서 알게 된 것들을 정리했습니다.
예시 수량보다 중요한 것이 있었습니다
텍스트 분류 작업을 처음 맡았을 때, 저는 Zero-shot으로 시작했습니다. Zero-shot이란 예시 없이 지시문만으로 모델에게 작업을 맡기는 방식입니다. "다음 텍스트를 긍정, 부정, 중립으로 분류해줘"라고만 했는데, 결과가 제 기대와 계속 어긋났습니다. "배송이 좀 늦었지만 제품은 좋았어요"를 모델은 긍정으로 처리했고, 저는 중립을 원했습니다. 지시문을 아무리 정교하게 다듬어도 그 경계를 맞추기 어려웠습니다.
그래서 Few-shot 프롬프팅으로 전환했습니다. Few-shot이란 모델에게 몇 가지 입출력 예시를 미리 보여주고, 그 패턴을 따라 응답하도록 유도하는 기법입니다. 긍정 예시 하나, 부정 예시 하나를 넣었더니 결과가 눈에 띄게 달라졌습니다. 경계가 애매한 케이스에서 오류율이 줄었고, 길고 장황하게 썼던 지시문보다 예시 두 개가 훨씬 강력하다는 걸 그때 처음 체감했습니다.
여기서 욕심이 생겼습니다. 예시를 다섯 개로 늘리면 더 좋아질 거라 생각했습니다. 결과는 거의 차이가 없었습니다. 토큰 소비는 두 배 이상 늘었는데 성능 개선은 미미했습니다. 솔직히 이건 예상 밖이었습니다. "예시가 많으면 많을수록 좋다"는 생각을 수치로 직접 반박하게 된 순간이었습니다.
이 결과는 GPT-3 논문에서 Few-shot 학습을 처음 체계적으로 분석했을 때부터 이미 시사된 부분이기도 합니다. 예시 개수보다 예시의 구성 방식이 성능에 더 큰 영향을 미친다는 점은 이후 연구들에서도 반복적으로 확인됩니다(출처: arXiv - Brown et al. 2020).
핵심은 어떤 예시를 넣느냐입니다. 제 경험상 가장 효과적인 방법은 모델이 실제로 틀렸던 케이스를 예시로 쓰는 것이었습니다. 랜덤하게 고른 예시를 그냥 넣으면 성능 개선이 생각보다 작습니다. 모델이 헷갈리는 경계 케이스를 직접 찾아서 그걸 예시로 구성하면, 같은 두 개짜리 예시도 훨씬 잘 작동합니다. 예시 품질이 예시 수량을 압도한다는 것, 이게 제가 이 작업에서 얻은 가장 실용적인 결론입니다.
예시를 잘 선별할 때 고려할 포인트를 정리하면 다음과 같습니다.
- 모델이 실제로 틀렸거나 헷갈렸던 경계 케이스를 우선 포함한다
- 각 예시는 원하는 출력 형식과 판단 기준을 동시에 보여줄 수 있어야 한다
- 예시끼리 서로 비슷한 패턴이 아니라, 다양한 엣지 케이스를 커버하도록 구성한다
형식이 복잡할수록 예시 하나의 힘이 달라집니다
JSON 형식으로 특정 필드를 추출하는 작업을 맡았을 때, Zero-shot에서는 필드 이름이나 값 형식이 매번 달라졌습니다. 지시문에서 형식을 길게 설명해도 마찬가지였습니다. 그런데 예시를 하나만 넣었더니 출력 형식이 일관되게 나왔습니다. 형식을 설명하는 문단보다 예시 하나가 훨씬 강력했습니다. 제가 직접 써봤는데, 이런 구조화된 출력 작업에서는 Few-shot의 효과가 분류 작업보다 더 즉각적이고 뚜렷했습니다.
이와 관련해 Chain-of-Thought(CoT) 프롬프팅이라는 개념도 짚고 넘어갈 필요가 있습니다. CoT란 예시 안에 단순한 입출력 쌍만 넣는 게 아니라, 중간 추론 과정을 함께 보여주는 방식입니다. Wei et al. (2022) 연구에서는 CoT 방식으로 예시를 구성했을 때 복잡한 수학 문제나 다단계 추론 과제에서 성능이 크게 오른다는 걸 보여줬습니다(출처: arXiv - Wei et al. 2022). 단순 분류나 형식 추출과 달리, 추론이 필요한 작업에서는 예시 안에 생각의 흐름을 담아주는 것이 핵심입니다.
Few-shot 예시는 모델을 재학습시키는 게 아닙니다. 이 대화 안에서 어떤 출력 형식과 판단 기준을 쓰면 되는지 알려주는 컨텍스트(context)에 가깝습니다. 컨텍스트란 모델이 응답을 생성할 때 참고하는 대화 내의 배경 정보 전체를 뜻합니다. 그래서 대화가 길어지면 초반에 넣은 Few-shot 예시의 영향력이 희미해질 수 있습니다. 영구적인 설정이 아니라 이 대화 안에서만 유효한 신호라는 점을 기억해야 합니다.
"Few-shot이 항상 Zero-shot보다 낫다"는 전제를 그냥 받아들이는 분들도 있는데, 저는 그 전제를 의심하는 편입니다. 최신 대형 언어 모델(LLM)들은 Zero-shot 성능 자체가 이전 세대보다 훨씬 올라가 있습니다. 단순한 작업에서 Few-shot 예시를 무조건 넣는 건 불필요한 토큰 낭비가 될 수 있습니다. 제 경험상 효율적인 순서는 먼저 Zero-shot으로 시도하고, 결과가 기대에 못 미칠 때 예시를 추가하는 것입니다. Anthropic의 프롬프트 엔지니어링 가이드에서도 예시를 넣기 전에 작업의 성격과 모델의 기본 응답을 먼저 확인할 것을 권장합니다.
Few-shot을 잘 쓰려면 결국 두 가지로 귀결됩니다. 예시 수보다 예시 질, 그리고 필요할 때만 쓰는 절제. 이 둘을 실제 작업에서 직접 부딪히며 확인하기 전까지는, 저도 "예시가 많으면 무조건 낫겠지"라는 막연한 믿음을 갖고 있었습니다. 틀렸던 케이스에서 배우는 게 이 기법의 핵심입니다.
참고:
Brown et al. (2020) GPT-3 논문 - Few-Shot Learners https://arxiv.org/abs/2005.14165
Wei et al. (2022) Chain-of-Thought Prompting 논문 https://arxiv.org/abs/2201.11903
OpenAI 프롬프트 엔지니어링 - 예시 제공 전략 https://platform.openai.com/docs/guides/prompt-engineering/strategy-provide-examples
Anthropic 예시 기반 프롬프팅 가이드 https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/use-examples
Min et al. (2022) Few-shot 예시 레이블 영향 논문 https://arxiv.org/abs/2202.12837