AI랑 상관 있는 이야기들

프롬프트 엔지니어링 2편 | 일반 프롬프트, 제로샷, 원샷, 퓨샷

Eddie_D 2025. 4. 21. 12:53
딱 한 줄 바꿨을 뿐인데, 답변의 퀄리티가 이렇게 차이난다고? 맞습니다. 똑같은 돈을 내고 AI 모델을 사용하더라도, 어떻게 질문을 하느냐에 따라 얻을 수 있는 결과는 천차만별입니다. 어떻게 하면 AI의 성능을 최대로 끌어내어 정확하고 의미있는 답변을 출력하게 할 수 있을까요? 구글에서 발간한 화제의 백서, “Lee Boonstra의 프롬프트 엔지니어링 백서”를 보면 알 수 있습니다. 원문은 모두 영어로 되어 있는데요. 이번 백서의 내용을 꼼꼼히 공부하고, 직접 실험해보면서 중요한 개념들을 해설하는 시리즈를 기획했습니다. 총 8편에 걸쳐 진행될 예정이며, 구글 백서 원문은 이곳(링크)에서 확인할 수 있습니다. 

[구글 프롬프트 엔지니어링 백서 파헤치기 시리즈]

1편 - LLM의 작동 방식과 config 조정하기 
2편 - 일반 프롬프트, 제로샷, 원샷, 퓨샷(현재글)
3편 - 시스템, 컨텍스트, 역할 프롬프트
4편 - 스텝백 프롬프트
5편 - CoT, 자기 일관성
6편 - ToT, ReAct(4월 30일 발행 예정)
7편 - 자동 프롬프트 엔지니어링, 코드, 멀티모달(5월 2일 발행 예정)
8편(완) - 실제 사례 살펴보기(5월 7일 발행 예정)


지난 편에서 프롬프트 엔지니어링을 위해 알아야 할 기본적인 LLM의 작동 방식과 구성 옵션들에 대해 알아봤다면, 이번 편부터는 본격적인 프롬프트 테크닉에 대해 알아보겠습니다. 

시작은 제로샷부터

처음 ChatGPT가 나왔을 때, 여러분은 어떤 질문을 하셨나요? 저는 “이거 알아봐줘”, “저건 뭐야?”처럼 일반적인 사실이나 정보를 대신 검색하는 용도로 자주 사용하곤 했습니다. 이처럼 특정 작업에 대해 설명을 요청하거나, 질문을 하거나, 지시를 내리는 형태의 프롬프트를 ‘일반 프롬프트’라고 부릅니다. 

“면접에서 자주 나오는 질문 알려줘”
“외국 카페에서 주문하려면 어떻게 말해?”
“제주도 3박 4일 여행 계획 짜줘”

일반 프롬프트 안에서도 위와 같이 곧바로 LLM에게 답변을 요청하는 방식은 ‘제로샷 프롬프트’라고 합니다. 여기서 ‘샷’은 예시를 말하며, 제로샷은 예시를 하나도 주지 않는다는 뜻입니다. 가장 기본적이고 널리 사용되는 형태로, LLM을 처음 접할 때 많은 사람들이 사용하는 출발점이라고 할 수 있습니다.

제로샷 프롬프트는 모델이 사전 학습한 지식에 직접적으로 의존합니다. 만약 모델이 학습하지 못한 지식에 대해 제로샷 프롬프트로 질문을 한다면 LLM은 뭐라도 답변을 하기 위해 ‘거짓말’, 또는 ‘환각’을 만들어낼 수 있습니다. 처음 ChatGPT가 나왔을 당시에 유행했던 밈, ‘세종대왕 맥북 던짐 사건’처럼 말이죠. 

더 많은 데이터를 학습하고 성능이 좋아진 요즘에는 제로샷 프롬프트만으로도 충분한 답변을 얻기도 합니다. 하지만 LLM은 이미 가지고 있는 지식을 얘기하는 것 외에도 훨씬 더 많은 일들을 할 수 있습니다. 이를 위해서는 제로샷 프롬프트를 기본 블록으로, 더 많은 블록들을 만들어 쌓아 올려야 합니다. 

먼저 백서에서 제공하고 있는 제로샷 프롬프트의 예시를 한번 보겠습니다. 구글 백서답게, 구글 Vertex AI Studio를 사용해서 실험을 했습니다. Vertex AI Studio는 프롬프트를 실험하고 비교하기 편하도록 플레이그라운드 제공하고 있습니다. 

출처: 구글 프롬프트엔지니어링 백서

영화 감상평을 받아 긍정, 중립, 부정으로 구분하는 작업을 하고 있으며, 세 가지 감정 중 하나를 출력하고 있습니다. 제로샷 프롬프트만으로도 충분한 결과물을 얻을 수 있었네요. 

하지만 제로샷 프롬프트로 원하는 결과를 얻지 못한다면 그때 시도해볼 수 있는 방법이 바로 원샷, 퓨샷 프롬프트입니다. 원샷은 하나의 예시를 주는 것이고, 퓨샷은 여러 개의 예시를 주는 방법입니다. AI는 샷을 통해 사용자가 무엇을 물어보는 건지 파악하여 답변할 수 있습니다. 샷이 중요한 특정한 작업들이 몇 가지 있는데, 모델에게 특정한 출력 구조나 패턴을 따르도록 유도하고 싶을 때가 바로 그런 순간들입니다. 

원샷 프롬프트:

말 그대로 한 번의 샷, 하나의 예시를 주는 것입니다. 이 방식의 아이디어는 모델이 작업을 잘 수행하기 위해서 모방할 수 있는 예시를 준다는 것입니다. 예시를 보고 따라하라는 것이죠. 간단한 작업이나 모델이 이미 잘 이해하고 있는 작업에 효과적입니다. 

퓨샷 프롬프트: 

예시를 여러 개 주는 것으로, 보통 3~5개의 샷을 주는 경우가 많습니다. 이 접근은 모델에게 따라야 하는 패턴을 보여준다는 것입니다. 여러 샷을 통해 원하는 패턴의 여러 예시들을 보여주기 때문에 모델이 그 패턴을 따를 가능성이 높아집니다. 복잡하거나 미묘한 패턴을 요구하는 작업에 더 효과적입니다.

 

퓨샷 프롬프트에 필요한 샷의 개수는 진리의 ‘케바케’입니다. 작업의 복잡성, 예시의 품질, 사용 중인 생성형AI 모델의 성능에 따라 달라지기 때문입니다. 

일단 작업이 복잡하면 복잡할 수록 더 많은 예시가 필요합니다. 또한 명확하고 일관성있는 샷을 넣어줘야 효과적이며, 성능이 높은 모델을 사용한다면 샷이 적어도 좋은 결과를 얻을 수 있습니다. 반면 샷의 품질이 낮거나 성능이 좋지 않은 모델을 써야 한다면 가능한 샷을 많이 넣어주는 게 좋을 수도 있습니다. 다만, 모델에 따라 인풋으로 받아들일 수 있는 길이 제한이 있으므로 샷이 너무 많으면 토큰 제한에 걸릴 수도 있습니다. 

 

샷은 어떻게 써야 할까?

먼저 수행하려는 작업에 직접적인 관련이 있는 예시를 만들어 주세요. 그리고 다양한 예시를 들어 모델이 패턴을 일반화하여 이해할 수 있도록 해주세요. 예시를 다양화하는 방법 중에는 엣지 케이스를 포함하는 것도 좋은 방법입니다. 엣지 케이스는 비정상적이거나 예상치 못한 입력이지만, 모델이 여전히 처리할 수 있어야 합니다. 엣지 케이스를 넣게 되면 더욱 견고한 출력을 생성할 수 있습니다. 

또한 고품질의 예시를 입력할수록 모델 또한 고품질의 답변을 내놓게 됩니다. 샷의 품질은 하나의 기준점이 되기 때문입니다. 마지막으로 샷이 부정확한 내용이 들어간다면, 사소하고 작은 오류라 하더라도 모델을 잘못된 방향으로 이끌 수 있습니다. 작은 실수 하나가 모델을 혼란스럽게 하고 원치 않는 출력을 초래할 수 있습니다. 그러므로 샷은 최대한 부정확한 오류 없이 작성해야 합니다. 

실제 제가 부트캠프에서 했었던 기업 연계 프로젝트를 예로 들어보겠습니다. ChatGPT API를 호출하여 문장 속 숫자들을 전부 한글로 바꾸는 작업을 했었는데요. 당시에 제가 사용했던 프롬프트입니다. 좋은 프롬프트 예시는 아니지만, 이렇게 샷을 여러 개 줄 수 있다는 것만 보시면 될 것 같습니다.

중요한 것은 한번에 끝내지 않고, 여러 번 반복적으로 실험해보는 자세입니다. 프롬프트 엔지니어링은 반복적인 일이는 것, 작업의 특성과 원하는 출력에 따라 적절한 프롬프트 기법을 선택하고 실험하는 것이 중요하다는 것을 꼭 기억해 두세요! 

그리고 반복적인 실험을 하기 위해서는 기록이 중요하겠죠? 구글 백서에서는 프롬프트를 기록할 때에는 테이블 형식으로 정리하는 것을 추천했습니다. 실제 프롬프트를 코드에 포함시키기 전까지, 여러 번의 반복 과정을 거치면서 체계적이고 구조화된 방식으로 정리하고 이를 추적하는 것이 중요합니다. 

 


 

재밌게 읽으셨나요?
이 글이 흥미로웠다면 제가 직접 쓰고 만드는
AI 안테나 뉴스레터도도 재밌을 거예요!
매주 수요일마다 주요 AI 소식과 인사이트를
메일함에 넣어드립니다.
AI 안테나에서 또 만나요.

https://eddienewsletter.stibee.com/

 

AI안테나

인공지능과 함께 만드는 AI 뉴스

eddienewsletter.stibee.com