딱 한 줄 바꿨을 뿐인데, 답변의 퀄리티가 이렇게 차이난다고? 맞습니다. 똑같은 돈을 내고 AI 모델을 사용하더라도, 어떻게 질문을 하느냐에 따라 얻을 수 있는 결과는 천차만별입니다. 어떻게 하면 AI의 성능을 최대로 끌어내어 정확하고 의미있는 답변을 출력하게 할 수 있을까요? 구글에서 발간한 화제의 백서, “Lee Boonstra의 프롬프트 엔지니어링 백서”를 보면 알 수 있습니다. 원문은 모두 영어로 되어 있는데요. 이번 백서의 내용을 꼼꼼히 공부하고, 직접 실험해보면서 중요한 개념들을 해설하는 시리즈를 기획했습니다. 총 8편에 걸쳐 진행될 예정이며, 구글 백서 원문은 이곳(링크)에서 확인할 수 있습니다.
[구글 프롬프트 엔지니어링 백서 파헤치기 시리즈]
1편 - LLM의 작동 방식과 config 조정하기
2편 - 일반 프롬프트, 제로샷, 원샷, 퓨샷
3편 - 시스템, 컨텍스트, 역할 프롬프트(현재글)
4편 - 스텝백 프롬프트
5편 - CoT, 자기 일관성
6편 - ToT, ReAct
7편 - 자동 프롬프트 엔지니어링, 코드, 멀티모달
8편(완) - 이렇게 쓰세요! 최종 정리
이번 편에서 살펴볼 프롬프트 테크닉은 3가지입니다. 시스템 프롬프트, 컨텍스트 프롬프트, 역할 프롬프트로, 이 세 가지 테크닉은 LLM에게 어떻게 텍스트를 생성해야 할 지를 알려줍니다.
큰그림 그리는, 시스템 프롬프트
시스템 프롬프트는 LLM에게 어떤 일을 시킬 것인지, 모델이 수행해야 할 작업을 알려주는 프롬프트입니다. 전반적인 맥락과 목적을 설정해주는 것인데요. 말로만 들으면 헷갈리기 때문에 바로 예시를 보겠습니다.
위 예시를 보면 첫 문장에 “영화 리뷰를 ‘긍정, 중립, 부정’으로 분류를 하세요. 대문자만 사용해서 응답하세요.”라고 써있는데요. 이와 같이 작업에 대해 설명해주는 것을 시스템 프롬프트라고 합니다. 즉 시스템 프롬프트는 LLM이 무엇을 해야하는지에 대한 기본적인 틀을 말하며, 시스템 프롬프트를 정의해줌으로서 모델의 기본적인 능력과 목표를 설정해줄 수 있습니다.
또한 시스템 프롬프트는 특정 요구 사항에 맞춰서 대답을 만들도록 할 때 유용합니다. 아래 예시에서도 볼 수 있듯이 출력을 json 포맷에 맞추도록 만들 수 있습니다.
충족하는 출력을 생성하는 데 유용할 수 있습니다. 예를 들어 특정 프로그래밍 언어와 호환되는 코드 스니펫을 생성하거나, 특정 구조로 출력을 반환하는 데 사용할 수 있습니다. 이렇게 json 형식으로 요청을 하면 애플리케이션을 만들 때 수동으로 json 파일을 만들 필요가 없으며, 모델이 관련 없는 정보를 생성하거나 사실이 아닌 내용을 만들어 내는 환각현상을 줄이는 데에도 도움이 됩니다. (참고로 json은 각 데이터 필드를 명시적으로 정의해, 데이터를 파싱하거나 활용하기 좋다는 장점도 있습니다.)
또한 시스템 프롬프트에 “답변은 정중하게 하시오”라는 말을 추가하여 LLM의 답변의 안전성과 유해성을 제어할 수도 있습니다.
캐릭터를 주는, 역할 프롬프트
이미 잘 알려져 있는 프롬프트 기법이기도 한데요. LLM에게 특정 캐릭터나 정체성을 부여하는 방법입니다. 예를 들어 “너는 생물학 교수야.”, “여행 가이드야”와 같이 역할을 주면, 그 역할에 따라 관련된 지식을 일관성있게 생성할 수 있습니다.
아래 예시를 보면 왼쪽 gpt에 바다와 해변을 잘 아는 해양 전문가로, 오른쪽 gpt는 제주 관광 가이드로 역할을 설정했습니다. 그리고 “제주도 관광지 추천해줘”라는 동일한 질문을 던졌습니다. 어떤 결과가 나왔을까요? 당연하게도 바다를 잘 아는 gpt는 바다를 잘 볼 수 있는 관광지를, 전문 가이드 역할에서는 현지인들이 자주 가는 곳을 위주로 답변했습니다.
이와 같이 역할 프롬프트는 LLM에게 일종의 ‘행동 지침’이 됩니다. 배우가 특정 캐릭터를 연기하기 위한 대본을 받는 것과 같이, 대본을 받아든 LLM은 그 역할에 맞춰 일관된 어조와 문체, 전문성을 유지하며 답변을 내놓습니다. 명확한 역할을 줄 때 LLM의 응답 품질과 답변의 관련성이 더 높아지는 것을 확인할 수 있습니다.
역할 프롬프트에서 또 중요한 것은 ‘스타일’을 정해줄 수 있다는 점입니다. 답변의 톤, 스타일을 선택할 수 있는 것인데요. LLM이 어떤 성격과 특성을 가지고 답변을 할지를 정해줍니다. 프롬프트 엔지니어링 백서에서 ‘효과적이라고 검증한’ 몇 가지 스타일은 다음과 같습니다.
- 대립적(Confrontational): 비판적 사고를 자극하거나 반대 관점을 제시할 때 유용합니다. 예를 들어 "악마의 변호사" 역할을 할 때 사용됩니다.
- 묘사적(Descriptive): 상세한 설명이 필요한 경우에 적합합니다. 시각적 묘사나 과정 설명에 효과적입니다.
- 직접적(Direct): 간결하고 명확한 정보 전달이 필요할 때 사용합니다. 기술적인 지침이나 빠른 응답이 필요한 상황에 적합합니다.
- 격식적(Formal): 공식 문서, 학술 논문, 비즈니스 커뮤니케이션 등에 적합합니다.
- 유머러스(Humorous): 가벼운 주제나 사용자 참여도를 높이고 싶을 때 효과적입니다.
- 영향력 있는(Influential): 독자에게 특정 관점이나 아이디어를 소개하고 영향을 미치려 할 때 사용합니다.
- 비격식적(Informal): 친근하고 대화체 스타일로, 일상적인 커뮤니케이션이나 접근성이 중요한 콘텐츠에 적합합니다.
- 영감을 주는(Inspirational): 동기부여나 긍정적인 메시지 전달이 필요한 경우에 사용합니다.
- 설득력 있는(Persuasive): 독자의 행동이나 생각의 변화를 유도하고자 할 때 적합합니다.
실제 스타일을 지정했을 때 답변이 어떻게 달라지는지를 살펴보겠습니다. 왼쪽 해양 전문가 역할에게는 냉소적이고 시니컬한 스타일로, 관광 가이드에게는 가볍고 유머러스한 스타일로 답변해달라고 했습니다. 답변이 확실히 달라진 것을 볼 수 있습니다.
지금 참고할 정보를 주는, 컨텍스트 프롬프트
컨텍스트 프롬프트는 현재 대화 또는 작업과 관련된 특정 세부 정보나 배경 정보를 제공합니다. 즉, 현재 작업이나 입력한 질문에 대해 즉각적이고 구체적인 정보를 추가해주는 것을 말합니다. 이것도 예시를 통해 자세히 살펴보겠습니다.
위 예시를 보면 “컨텍스트: 80년대 복고풍 아케이드 비디오 게임에 대한 블로그를 작성하고 있습니다.”와 같은 맥락을 제공했습니다. 이렇게 컨텍스트를 제공하면 LLM은 해당 주제에 맞는 아이디어를 생성하는 데 도움이 됩니다.
시스템 프롬프트가 전반적인 맥락과 목적을 설정하고, 역할 프롬프트가 모델의 스타일과 어조를 형성한다면, 컨텍스트 프롬프트는 “현재 얘기하고 있는 입력과 출력의 상호작용에 초점을 맞춰 맥락을 주는 것”입니다. 더 구체적이고 바로 사용할 수 있는 정보를 줌으로서 LLM이 질문의 미묘한 뉘앙스를 이해하고, 관련 없는 정보는 제외하고, 요청과 관련된 정보에만 집중할 수 있도록 돕습니다. 또한 대화가 진행되거나 새로운 작업이 주어질 때마다 컨텍스트 프롬프트의 내용이 달라질 수 있습니다.
동일한 역할 프롬프트를 준 상태에서 컨텍스트만 ‘여름 휴가’와 ‘겨울 휴가’로 바꿨을 때 답변이 달라지는 모습을 볼 수 있습니다.
이번 편에서 살펴봤던 세 가지 유형의 프롬프트는 서로 중복되어 쓰일 수도 있습니다. 무 자르듯이 확실하게 구분할 필요가 없다는 뜻이기도 합니다. 시스템 프롬프트가 역할을 할당하는 프롬프트와 겹칠 수도 있고, 컨텍스트를 시스템 프롬프트 안에서 한번에 작성하여 줄 수도 있습니다.
하지만 굳이 이렇게 구분하여 개념을 이해하는 이유는, 각 유형의 프롬프트가 각기 다른 목적을 수행하고 있기 때문입니다. 마지막으로 정리해보면,
- 시스템 프롬프트는 모델의 기본적인 기능과 전반적인 목적을 정의하고,
- 컨텍스트 프롬프트는 응답을 안내하기 위해 즉각적인 작업별 정보를 제공하며,
- 역할 프롬프트는 모델의 출력 스타일과 어조를 구성하여 특정성과 개성을 더합니다.
제로샷, 원샷, 퓨샷과 같은 일반적인 프롬프트 기법과 함께 사용되고 있으며, 특히 역할을 줬을 때 퓨샷 예시를 제공하면 출력 패턴을 더욱 공고하게 만들 수 있습니다. 또한 다음 편에서 다룰 스텝백, 사고 등의 프롬프트와 결합하여 LLM의 추론 능력과 출력의 품질을 향상시킬 수 있습니다.
재밌게 읽으셨나요?
이 글이 흥미로웠다면 제가 직접 쓰고 만드는
AI 안테나 뉴스레터도도 재밌을 거예요!
매주 수요일마다 주요 AI 소식과 인사이트를
메일함에 넣어드립니다.
AI 안테나에서 또 만나요.
https://eddienewsletter.stibee.com/
AI안테나
인공지능과 함께 만드는 AI 뉴스
eddienewsletter.stibee.com
'공부방' 카테고리의 다른 글
맥북 도커 창 사라졌을 때 도커 강제 재시작, 도커 설정 초기화 (1) | 2025.04.26 |
---|---|
프롬프트 엔지니어링 4편 | 스텝백 프롬프트 (0) | 2025.04.25 |
사용자의 감정을 자극하는 먼데이, 왜 그렇게 된걸까? (1) | 2025.04.23 |
GPT-4.1 프롬프트 잘 쓰는 팁 13가지 (0) | 2025.04.22 |
프롬프트 엔지니어링 2편 | 일반 프롬프트, 제로샷, 원샷, 퓨샷 (1) | 2025.04.21 |