딱 한 줄 바꿨을 뿐인데, 답변의 퀄리티가 이렇게 차이난다고? 맞습니다. 똑같은 돈을 내고 AI 모델을 사용하더라도, 어떻게 질문을 하느냐에 따라 얻을 수 있는 결과는 천차만별입니다. 어떻게 하면 AI의 성능을 최대로 끌어내어 정확하고 의미있는 답변을 출력하게 할 수 있을까요? 구글에서 발간한 화제의 백서, “Lee Boonstra의 프롬프트 엔지니어링 백서”를 보면 알 수 있습니다. 원문은 모두 영어로 되어 있는데요. 이번 백서의 내용을 꼼꼼히 공부하고, 직접 실험해보면서 중요한 개념들을 해설하는 시리즈를 기획했습니다. 총 8편에 걸쳐 진행될 예정이며, 구글 백서 원문은 이곳(링크)에서 확인할 수 있습니다.
[구글 프롬프트 엔지니어링 백서 파헤치기 시리즈]
1편 - LLM의 작동 방식과 config 조정하기
2편 - 일반 프롬프트, 제로샷, 원샷, 퓨샷
3편 - 시스템, 컨텍스트, 역할 프롬프트
4편 - 스텝백 프롬프트
5편 - CoT, 자기 일관성
6편 - ToT, ReAct
7편 - 자동 프롬프트 엔지니어링, 코드, 멀티모달
8편(완) - 이렇게 쓰세요! 최종 정리(현재글)
지난 1편부터 7편까지 프롬프트 테크닉에 대해 쭉 살펴보았습니다. 이제는 실전에서 사용하고 적용해봐야 하는데요! 백서에서 제공하는 Best Practices를 살펴보면서 프롬프트를 쓰는 방법 12가지 최종 꿀팁을 정리해보았습니다.
1. 퓨샷을 적극적으로 제공하세요!
프롬프트를 작성할 때 가장 중요한 팁은 예시를 함께 넣는 것입니다. 특히 '원샷'이나 '퓨샷' 예시를 넣으면 AI가 훨씬 더 잘 이해하게 됩니다. 우리가 새로운 일을 배울 때 예시를 보는 것이 도움이 되는 것처럼, AI도 마찬가지입니다. AI에게 "이런 결과가 나왔으면 좋겠어"라고 보여주는 셈이죠. 이런 예시들은 AI가 여러분이 원하는 답변 스타일과 형식을 파악하는 데 큰 도움이 됩니다. 마치 지도를 주는 것처럼, AI는 이 참조점을 통해 더 정확하고 여러분의 기대에 맞는 답변을 만들어낼 수 있습니다
2. 단순하게 쓰세요.
프롬프트를 작성할 때는 쉽고 명확하게 표현하는 것이 중요합니다. 여러분이 읽었을 때 헷갈리는 프롬프트는 AI에게도 마찬가지로 헷갈릴 확률이 높기 때문이에요. 복잡한 단어나 불필요한 세부 사항은 오히려 AI의 이해를 방해할 수 있어요. 마치 친구에게 설명하듯이 간결하게 작성해보세요.
Before
저는 지금 뉴욕을 방문 중이며, 멋진 장소들에 대해 더 알고 싶습니다. 3살짜리 아이 둘과 함께 있습니다. 휴가 중에 어디를 가야 할까요?
After
여행 가이드 역할을 해주세요. 3살 아이와 함께 뉴욕 맨해튼에서 방문할 만한 좋은 장소들을 설명해 주세요.
프롬프트를 쓸 대는 행동을 설명하는 동사를 사용해 작성해보세요.
행동하기(Act), 분석하기(Analyze), 분류하기(Categorize), 구분하기(Classify), 대조하기(Contrast), 비교하기(Compare), 창작하기(Create), 설명하기(Describe), 정의하기(Define), 평가하기(Evaluate), 추출하기(Extract), 찾기(Find), 생성하기(Generate), 식별하기(Identify), 나열하기(List), 측정하기(Measure), 정리하기(Organize), 분석하기(Parse), 선택하기(Pick), 예측하기(Predict), 제공하기(Provide), 순위매기기(Rank), 추천하기(Recommend), 반환하기(Return), 검색하기(Retrieve), 다시쓰기(Rewrite), 선택하기(Select), 보여주기(Show), 정렬하기(Sort), 요약하기(Summarize), 번역하기(Translate), 작성하기(Write).
3. 원하는 결과를 명확히 알려주세요.
AI에게 작업을 요청할 때는 원하는 결과물이 어떤 모습이어야 하는지 구체적으로 설명해줘야 합니다. 너무 짧거나 간단한 지시는 AI가 여러분의 의도를 정확히 파악하기 어렵게 만들 수 있습니다. 시스템 프롬프트나 컨텍스트 프롬프트를 통해 세부 사항을 제공하면 모델이 관련 내용에 집중하도록 도와 전반적인 정확도를 향상시킬 수 있어요.
Before
비디오 게임 콘솔에 대한 블로그 게시물을 생성하세요.
After
상위 5개 비디오 게임 콘솔에 대해 3단락 분량의 블로그 게시물을 생성하세요. 블로그 게시물은 유익하고 흥미로워야 하며, 대화체로 작성되어야 합니다.
4. “해야 할 것”에 집중하세요.
AI에게 지시할 때는 "하지 마라"보다 "이렇게 해라"라는 방식이 훨씬 효과적이에요. 사람도 마찬가지지만, 무엇을 피해야 하는지보다 무엇을 해야 하는지 명확히 알 때 더 좋은 결과를 만들어낼 수 있기 때문이에요.
긍정적인 지시는 AI에게 명확한 방향을 제시하고, 창의성을 발휘할 수 있는 공간을 줍니다. 반면 제약은 때로 혼란을 주거나 서로 충돌할 수 있어요.
물론 제약이 필요한 경우도 있습니다. 특히 안전 문제나 특정 형식이 꼭 필요할 때는 제약을 사용하는 것이 좋습니다. 하지만 기본적으로는 "이렇게 해주세요"라는 긍정적인 지시를 우선시하는 것이 좋은 결과를 얻는 지름길이에요! (더 나아가 작업에 가장 적합한 지시문과 제약의 조합을 찾기 위해 실험을 반복하고 문서화하세요.)
Before
상위 5개 비디오 게임 콘솔에 대해 1단락 분량의 블로그 게시물을 생성하세요. 비디오 게임 이름을 나열하지 마세요.
After
상위 5개 비디오 게임 콘솔에 대해 1단락 분량의 블로그 게시물을 생성하세요. 콘솔, 제조 회사, 출시 연도, 총 판매량에 대해서만 논의하세요.
5. 변수를 사용해 프롬프트를 재사용하세요.
프롬프트를 작성할 때 변수를 활용하면 같은 프롬프트를 여러 상황에 쉽게 재사용할 수 있습니다. 마치 문장에서 빈칸을 두고 필요할 때마다 다른 단어를 넣는 것과 비슷하죠. 변수는 입력에 따라 변경될 수 있습니다.
예를 들어, 아래 표에서 보이는 것처럼 도시에 대한 사실을 제공하는 프롬프트가 있습니다. 도시 이름을 하드코딩하는 대신 변수를 사용하면 프롬프트는 그대로 두고 {도시_이름} 부분만 바꿔서 다양한 도시에 대한 정보를 얻을 수 있어요.
특히 애플리케이션에 AI를 통합할 때 이 방식은 정말 유용합니다. 같은 형식의 프롬프트를 반복해서 작성할 필요 없이, 변수 값만 바꿔가며 사용할 수 있으니까요. 코드에서도 변수를 사용해 정보를 저장하고 참조하는 것처럼, 프롬프트에서도 변수로 작업을 더 효율적으로 만들 수 있습니다.
6. 다양한 방식으로 실험해보세요.
같은 질문이라도 어떻게 물어보느냐에 따라 AI의 답변이 완전히 달라질 수 있습니다. 마치 레시피에서 재료는 같아도 조리법에 따라 맛이 달라지는 것처럼요. 스타일, 단어 선택, 프롬프트 유형(제로샷, 퓨샷, 시스템 프롬프트) 같은 프롬프트 속성을 실험해보세요.
예를 들어, 세가 드림캐스트에 대한 정보를 얻고 싶을 때 질문, 진술, 지시문 형태로 표현할 수 있고 각각은 다른 출력 결과를 가져옵니다. 여러 방식을 사용해가며 작업에 맞는 방식을 찾아보세요.
질문 형식: "세가 드림캐스트는 무엇이었으며 왜 혁신적이었나요?"
진술 형식: "세가 드림캐스트는 1999년 출시된 콘솔입니다..."
지시 형식: "세가 드림캐스트의 혁신성에 대한 한 단락을 작성하세요"
7. 분류 작업을 할 때는 예시를 섞어주세요.
AI에게 분류 작업을 가르칠 때는 다양한 종류의 예시를 골고루 섞어서 보여주는 것이 중요합니다. 일반적인 퓨샷에서라면 예시의 순서가 크게 중요하지 않겠지만, 분류 작업을 수행할 때에는 가능한 골고루 혼합해야 합니다. AI가 단순히 "첫 번째는 A, 두 번째는 B..."처럼 패턴을 암기하는 대신, 각 카테고리의 진짜 특징을 파악해야 하기 때문이죠. (특정 퓨샷 순서에 과적합되는 것을 방지)
예를 들어 영화 리뷰 감성 분석을 가르친다면 긍정적 리뷰, 부정적 리뷰, 중립적 리뷰를 번갈아가며 보여주는 것이 좋습니다. 실제로 시작할 때는 약 6개 정도의 다양한 예시를 준비하는 것이 좋은 출발점이 됩니다. 이렇게 하면 AI가 각 카테고리의 특징을 제대로 이해하고, 새로운 데이터에도 잘 적용할 수 있는 능력을 기를 수 있어요!
8. 데이터는 구조화된 형식으로 받으세요.
입력 방법뿐 아니라, 출력 형식도 다양하게 실험해보면 좋은 결과를 얻을 수 있어요. 특히 데이터를 다룰 때(데이터 추출, 선택, 분석, 정렬, 순위 매기기, 분류와 같은 비창의적 작업에서)는 구조화된 형식이 큰 도움이 됩니다. AI에게 정보를 추출하거나 정리해달라고 할 때 JSON이나 XML 같은 구조화된 형식으로 결과를 요청해보세요. 필요한 정보만 쏙 받고, AI 대답의 환각도 줄어듭니다.
실제 앱이나 서비스에 AI를 연동할 때 특히 유용한데, 이렇게 구조화된 데이터는 프로그램에서 바로 활용하기 쉽기 때문이에요.
9. 스키마로 AI에게 명확한 정보를 전달하세요.
JSON은 AI가 결과물을 만들 때도 좋지만, 정보를 전달할 때도 아주 유용합니다. 특히 JSON 스키마를 활용하면 AI에게 훨씬 더 명확하게 정보를 전달할 수 있습니다.
JSON 스키마는 데이터의 구조와 유형을 미리 정의한 일종의 '설계도'예요. 이 설계도를 통해 AI는 어떤 정보가 필요한지 정확히 알 수 있고, 각 정보의 형식을 이해할 수 있습니다. 그리고 정보 간의 관계를 파악할 수 있고요. 또한 스키마는 특정 형식의 날짜나 타임스탬프 필드를 포함해 AI가 “시간을 인식”할 수 있게 만들어주기도 합니다.
예를 들어, 온라인 쇼핑몰에서 제품 설명을 자동으로 생성하고 싶다면 아래처럼 스키마를 짤 수 있습니다.
{
"제품명": "에어 줌 러너",
"카테고리": "운동화",
"색상": "빨간색",
"출시일": "2024-03-15",
"특징": ["쿠셔닝", "경량", "통기성"],
"사용목적": "러닝"
}
백서에서도 스키마를 사용하는 예시를 보여줬는데요.
먼저 스키마를 정의하고, 스키마에 맞게 실제 제품 데이터를 json 객체로 제공하고 있습니다.
이와 같이 전체 문서를 제공하는 대신, 데이터를 전처리하고 스키마와 데이터를 모두 제공하면 AI는 제품의 주요 특성을 더 잘 이해하고 훨씬 관련성 높은 설명을 만들 수 있습니다. 이 방식은 특히 많은 데이터를 처리하거나 AI를 복잡한 시스템에 통합할 때 큰 효과를 발휘합니다. AI가 중요한 정보에 집중하도록 도와주고, 날짜나 시간 정보도 정확하게 인식할 수 있게 해주기 때문이죠.
10. 다른 사람들은 어떻게 썼는지 공유하세요.
똑같은 작업을 하더라도, 사람마다 프롬프트를 쓰는 방식은 모두 다릅니다. 다른 사람들은 어떻게 사용하고 있는지, 나는 어떻게 사용했는지 서로 공유하고 그 결과를 비교해보세요.
11. CoT를 쓸 때는 기억해야 할 3가지!
- Chain of Thought(CoT, 사고 연쇄) 프롬프팅에서는 AI가 추론 과정을 먼저 보여주고 최종 답변을 나중에 제시하도록 구성하세요. 이렇게 하면 AI가 최종 답변을 더 정확하게 예측할 수 있어요. 추론 과정이 AI의 '생각 흐름'에 영향을 주기 때문이죠.
- 두 번째로는 "추론:"과 "답변:" 같은 명확한 구분선을 사용하세요. 이렇게 하면 AI의 사고 과정과 최종 결론을 쉽게 분리할 수 있습니다.
- CoT 프롬프팅에서는 온도(temperature)를 0으로 설정하세요. CoT는 가장 확실한 다음 단어를 선택하는 '탐욕적 디코딩' 방식에 기반합니다. 복잡한 문제를 풀 때는 보통 정확한 답변이 하나이므로, 온도를 0으로 설정해 가장 확실한 경로를 따르도록 하세요.
12. 프롬프트를 기록하고 문서화하세요.
백서에서 하는 마지막 조언은 프롬프트를 체계적으로 기록하라는 것입니다. 무엇이 잘 되었고, 어떻게 했을 때 잘못 나왔는지 말이죠. 이는 단순한 메모가 아니라 여러분의 AI 작업 성공을 위한 소중한 자산이 됩니다.
AI의 답변은 다양한 요소에 의해 달라집니다. 심지어 완전히 동일한 모델과 프롬프트를 사용하더라도 답변에 미세한 차이가 생길 수 있습니다. AI가 두 개의 단어를 선택할 확률이 같다면 무작위로 하나를 선택하고, 이 선택은 이후의 모든 텍스트에 영향을 미치기 때문입니다.
그렇다면 어떻게 하면 기록을 잘 할 수 있을까요?
백서에서는 위와 같은 템플릿으로 구글 시트를 만들기를 권장합니다. 이 표에 나타난 필드 외에도 프롬프트의 버전(반복했을 때), 결과에 대한 평가(OK/NOT OK/SOMETIMES OK), 구체적인 피드백과 개선점을 추가하면 좋습니다.
검색 증강 생성(RAG) 시스템에서 작업할 때는 쿼리, 청크 설정, 청크 출력 및 기타 정보를 포함하여 프롬프트에 삽입된 콘텐츠에 영향을 미치는 RAG 시스템의 특정 측면도 함께 기록해야 합니다. 프롬프트가 거의 완벽하다고 느끼면 프로젝트 코드베이스로 가져가세요. 코드베이스에서는 유지 관리가 더 쉽도록 프롬프트를 코드와 별도의 파일에 저장하세요. 마지막으로, 이상적으로는 프롬프트가 운영 시스템의 일부이며, 프롬프트 엔지니어로서 자동화된 테스트 및 평가 절차에 의존하여 프롬프트가 작업에 얼마나 잘 일반화되는지 이해해야 합니다.
마지막으로
프롬프트 엔지니어링은 반복적인 과정입니다. 다양한 프롬프트를 만들고 테스트하며, 결과를 분석하고 문서화하세요. 모델의 성능에 따라 프롬프트를 개선하세요. 원하는 출력을 얻을 때까지 계속 실험하세요. 모델이나 모델 구성을 변경할 때는 이전에 사용한 프롬프트로 돌아가서 계속 실험하세요.
재밌게 읽으셨나요?
이 글이 흥미로웠다면 제가 직접 쓰고 만드는
AI 안테나 뉴스레터도도 재밌을 거예요!
매주 수요일마다 주요 AI 소식과 인사이트를
메일함에 넣어드립니다.
AI 안테나에서 또 만나요.
https://eddienewsletter.stibee.com/
AI안테나
인공지능과 함께 만드는 AI 뉴스
eddienewsletter.stibee.com
'공부방' 카테고리의 다른 글
프롬프트 엔지니어링 7편 | 자동 프롬프트 엔지니어링, 코딩, 멀티모달 (1) | 2025.05.02 |
---|---|
프롬프트 엔지니어링 6편 | Tree of Thoughts(ToT), reason&act(ReAct) (1) | 2025.04.30 |
AI 모델의 성능을 극대화하는 스케일링 기법 총정리 (1) | 2025.04.29 |
프롬프트 엔지니어링 5편 | Chain of Thought(CoT), Self-consistency (0) | 2025.04.28 |
실전에서 바로 써먹는 'Post-training' 테크닉, 튜닝 계보 한방 정리 (0) | 2025.04.28 |