프롬프트를 구성하는 기본 요소

by 정상우
(!) ChatGPT Plus 버전을 기준으로 합니다.

"프롬프트, 그거 그냥 작성하면 되는 거 아니야?" 맞습니다. 프롬프트는 AI에게 작업을 지시하기 위한 자연어 명령입니다. 단지 그게 전부입니다. 하지만 우리는 이전에 문제는 프롬프트야 바보야에서 프롬프트의 품질에 따라 AI가 일하는 방식과 작업 품질에 영향을 줄 수 있다는 것을 살펴보았습니다. 우리가 별생각 없이 작성하던 프롬프트도 체계화하고, 연구되면 이는 곧 기술이자 학문이 됩니다.


비즈니스 환경에서는 사람 간의 대화에서 대화 기법은 이미 적용되고 있습니다. 예를 들면 리더의 대화법, 고객의 마음을 사로잡는 화법, 설득과 협상의 기술과 같이 말이죠. 사람의 성향에 따라 다른 대화법을 사용하는 것이 좋다는 이야기도 있습니다. 리더로서 같은 업무 결과를 사원에게 이야기하더라도 어떤 사원은 과정보다는 최종적인 일의 결과를 위주로 받아들이는 반면, 또 다른 사원은 일의 결과는 나쁘더라도 그 일을 하면서 들인 노력과 시간을 알아주는 리더를 선호하기도 합니다.


하지만 이제 이러한 대화법들은 사람과 사람 간의 대화에만 적용되지 않습니다. 우리가 아이들에게 이야기를 할 때 아이에게 적합한 단어와 화법을 구사하듯이 AI에게 지시를 내릴 때도 AI가 지시를 잘 이해할 수 있도록 프롬프트를 구성하고, 설계할 필요가 있습니다. 프롬프트 엔지니어링은 이를 위해 탄생했으며, 이번 시간에는 프롬프트를 설계하기 위한 가장 기본이 되는 요소들에 대해 알아보는 시간이 되겠습니다.


역할

프롬프트 엔지니어링에서 가장 기초가 되는 요소는 '역할 명시'입니다. 역할을 명시한다는 의미는 에이전트에게 해당 역할을 연기하도록 지시하는 것이라고 볼 수 있으며, 일반적으로 시스템 프롬프트(System Prompt)의 가장 첫 줄에 명시합니다. 예를 들어 다음과 같이 '초등학교 선생님' 역할을 부여할 수 있습니다.

당신은 초등학교 선생님입니다.

위와 같이 '초등학교 선생님' 역할을 명시하면 AI는 사용자를 초등학생으로 간주하고 특정 개념에 대해 쉽게 설명하려고 할 것입니다. 이와 같이 역할을 명시하는 것은 기본적으로 에이전트의 말투를 바꿀 뿐만 아니라, 사용자가 어떠한 특성을 가지고 있음을 암묵적으로 설정하게 됩니다. 역할 명시는 대부분의 에이전트에 설정되어 있는 가장 기본이 되는 요소로서 AI UX(AI User Experience)에 큰 영향을 미칩니다.


예를 들어 초등학생 아이들을 대상으로 하는 AI 서비스를 운영하려는데 에이전트가 너무 어려운 말을 구사하거나 적절하지 않은 표현으로 대답한다면 이는 바람직한 AI 서비스라고 볼 수 없습니다. 따라서 에이전트를 '초등학교 선생님'으로 지정함으로써, 해당 에이전트의 사용자를 '초등학생'으로 설정하는 것과 비슷한 효과를 가지게 할 수 있습니다. 이는 다음으로 설정하는 것과 유사합니다.

사용자는 초등학생입니다. 전문적인 표현은 지양하고, 쉬운 표현을 사용하여 대답하세요.


역할의 또 한 가지 사례는 현재 하려는 업무의 특성에 따라 배경 지식과 '관점'이 요구되는 경우, 이를 위해 의도적으로 역할을 명시하는 경우입니다. 예를 들어 사용자가 '초등학생'이 아니라 '(예비) 초등교사'인 경우 AI를 '초등학교 선생님'으로 명시하는 것은 적절하지 않을 수 있습니다. 이럴 때는 다음과 같이 '초등교육 전문가'로 명시하는 것이 더 나을 수 있습니다.

당신은 초등교육 전문가입니다.

이는 에이전트의 말투나 어조에는 영향을 미치지는 않겠지만, AI는 사용자를 '(예비) 초등교사'로 간주하고 대화에 임할 수 있으며 에이전트는 초등교육의 관점에서 이와 관련된 배경 지식을 근거로 하여 당신의 질문에 대답할 것입니다. 이 또한 다음과 같이 사용자 중심으로 다음과 같이 프롬프트를 바꿔볼 수 있습니다.

사용자는 예비 초등교사입니다. 초등교육 관점에서 사용자의 질의에 대답하세요.


기본적으로 역할 설정은 에이전트의 역할과 정체성을 설정하는 기본 요소이므로 한 줄로 끝나는 것이 아니라 다음과 같이 조금 더 구체적이고 부가적인 설명이 포함됩니다. 대체로 에이전트를 제작하는 경우, 사용자 중심으로 규정하는 것이 아니라, 에이전트 중심으로 역할을 명시하는 것이 일반적인 방식입니다. 만약 서비스 사용자의 페르소나가 명확한 경우에는 사용자를 관점으로 프롬프트를 설계하는 것도 실험해 볼 만한 요소입니다.

사용자는 현재 공부 중이며 이 채팅 중에 다음과 같은 엄격한 규칙을 따르라고 요청했습니다. 다음 규칙을 준수해야 합니다.

- 접근하기 쉬우면서도 교사가 되어 사용자가 공부를 안내함으로써 학습을 돕습니다. 사용자를 알아보세요. 목표나 성적 수준을 모르면 사용자에게 물어보세요. 대답하지 않으면 중학생에게 이해가 될 만한 설명을 찾아보세요.
- 사용자에게 답만 주지 말고 안내하세요. 질문, 힌트, 작은 단계를 사용하여 사용자가 스스로 답을 찾을 수 있도록 합니다.
- 어려운 부분이 끝나면 사용자가 아이디어를 다시 설명할 수 있는지 확인합니다. 아이디어가 계속 유지될 수 있도록 간단한 요약, 기억법 또는 미니 리뷰를 제공합니다.
- 사용자의 작업을 대신하지 마세요. 숙제 질문에 답하지 말고, 사용자와 협력하고 이미 알고 있는 것을 바탕으로 구축하여 답을 찾을 수 있도록 도와주세요.


지식

에이전트는 대부분 GPT와 같은 사전 학습(Pre-Trained)된 기초 모델을 사용합니다. 하지만 우리가 소설을 쓰려고 한다거나, 아직 현실 세계는 없는 사업 아이디어나 제품 기획을 하는 경우, 에이전트에게 우리가 하려는 일에 대한 배경 지식을 미리 던져줄 필요가 있습니다. 또는 사내 문서와 같이 대외비 문서의 경우에도 프라이빗 환경이라면 포함될 수 있습니다.

(!) 에이전트에게 프롬프트로 지식을 전달하는 방식은 가장 기초적인 방식입니다. 일반적으로 에이전트에게 공개되지 않은 내부 지식을 제공하는 방식으로는 (시스템) 프롬프트, 파일 업로드, MCP(Model Context Protocol)과 같은 기술을 사용합니다. 웹 검색도 지식을 검색하여 활용하기 위한 방법이지만, 이는 대외적으로 공개된 자료를 바탕으로 한다는 점에서 차이를 보입니다.
활용 Tip.

파일 업로드로 에이전트에게 관련 지식을 제공하는 것이 가장 흔한 방법이지만, 이 경우 파일의 이름이 중요합니다. '사용자의 질의와 관련된 데이터가 있을 법한 파일'을 먼저 찾는 게 응답속도를 높이는 것에 도움이 되기 때문입니다. 이는 에이전트가 자율적으로 결정합니다.


예를 들어 현재 사용자를 'SF 추리/미스터리 소설가'로 가정하고, 다음과 같은 세계관 설정을 가진 소설을 쓰고 있다고 미리 에이전트에게 알려줄 수 있습니다.

사용자는 SF 추리/미스터리 소설가로서 소설을 쓰고 있으며, 다음과 같은 세계관을 가지고 있습니다.

제목: 네온 아래의 증명

# 시대와 배경

서기 2147년, 동아시아 메가시티 신도(新都). 도시는 초고층 네온과 하층 슬럼이 수직으로 겹쳐진 구조다. 상층은 기업 연합이 통제하는 청정 구역, 하층은 불법 증강과 데이터 암시장이 지배한다. 범죄율은 낮지만, 미해결 사건의 비율은 높다. 이유는 단 하나—범죄의 상당수가 합법이기 때문이다.

...
(!) 위와 같은 내용을 파일로 제공하려는 경우 파일의 이름을 [네온_아래의_증명]_세계관.pdf 처럼 에이전트가 직관적으로 이해할 수 있도록 표현하세요.


목표

조직에서 비전을 공유하고 명확히 하는 일은 조직이 좋은 성과를 내는 것에 있어서 아주 중요합니다. 이는 에이전트에게도 마찬가지입니다. 현재 사용자가 달성하고자 하는 목표가 무엇인지를 명시해 주는 것이 좋습니다. 예를 들어 현재 이 시리즈의 제목은 '비전공자를 위한 챗GPT 101'이죠. 작성하고 있는 글들에 대해 논의를 하기 전에, 다음과 같이 목표를 설정할 수 있습니다.

'비전공자를 위한 챗GPT 101'은 단순하게 챗GPT 사용법을 이야기하는 것이 아니라, 생성형 AI의 '기본'을 이야기함으로써 챗GPT를 자유롭게 구사하며 실무에서 활용할 수 있도록 기초를 익히는 것이 목표입니다.


입력

우리가 에이전트에게 주는 입력은 텍스트뿐만 있는 것은 아닙니다. 이미지, 사운드, PDF와 같은 다양한 멀티모달 입력을 줄 수 있는데요, 이때 우리가 업로드한 파일 또는 이미 업로드되어 있는 파일 중 참고해야 할 파일이 무엇인지 에이전트에게 알려주는 것은 에이전트가 사용자의 지시를 수행하기 위해 참고해야 하는 파일들이 무엇인지 판단할 때 큰 도움이 됩니다.


예를 들어 '비전공자를 위한 챗GPT 101'의 원고를 업로드하고, 해당 파일을 바탕으로 어떤 일을 수행한다고 가정했을 때 다음과 같이 파일에 대한 힌트를 줄 수 있습니다.

지식으로 제공된 파일들은 '비전공자를 위한 챗GPT 101'의 원고이며, 크게 두 개의 대단원으로써 챗GPT 활용과 프롬프트 엔지니어링으로 분리되어 있습니다. 각 파일 이름에는 대단원을 나타내는 표현이 라벨로 붙어있는데, 의미는 다음과 같습니다.

- CG → 챗GPT
- PE → 프롬프트 엔지니어링

'01'처럼 숫자로 표현된 것은 글의 순번을 나타냅니다.

# 예시

- CG_01_챗GPT가_거짓말을_한다고_하기_전에.pdf
- PE_11_문제는_프롬프트야_바보야.pdf


지시

지시는 역할, 지식, 목표, 입력 등의 구성 요소가 작성된 다음에 오는 것이 일반적입니다. 이와 같은 요소들은 시스템 프롬프트와 같이 사용자의 입력과는 별개의 레이어에 작성이 이미 되어있는 경우가 많기 때문입니다. 예를 들어 다음과 같이 '비전공자를 위한 챗GPT 101'을 평가하기 위한 지시는 다음과 같이 작성해 볼 수 있습니다.

'비전공자를 위한 챗GPT 101' 업로드되어 있는 원고를 다음의 {기준}에 따라 [아주 나쁨, 나쁨, 보통, 좋음, 아주 좋음]으로 평가하세요.

# 기준

- 정확성: 기술적 서술과 시각화 자료는 정확한 내용이어야 하며, 각 챕터와 하위 챕터에 대한 내용이 모자람 없이 담겨있어야 합니다.
- 연결성: 각 교안의 내용은 '이전에 배운' 내용(교안 ↔ 교안, 또는 각 교안 내부의 주제 ↔ 주제)과 자연스럽게 학습 흐름이 구성되어야 합니다.
- 맞춤화: '비전공자 대상'이라는 목적에 분명하도록 직관적인 표현이나 비유가 적절하게 사용되어야 합니다. 따라서 기술적이거나 너무 어렵게 서술되어 있으면 안 됩니다.


예시

예시는 에이전트의 처리 방향성을 조정하기 위한 가장 쉽고 빠른 수단입니다. 예시는 보통 1~5개 정도로 주어지며, 출력 예시만 주어지는 경우도 있고 입출력 예시가 둘 다 주어지는 경우도 있습니다. 무수히 많은 입출력 예시가 작성된 데이터셋은 모델 제작이나 파인튜닝과 같은 머신러닝 작업을 처리할 때 학습을 위한 입력으로 사용될 수 있습니다.


다음의 예시는 기술적으로 작성된 프롬프트 엔지니어링의 정의를 풀어쓴 예시를 바탕으로 하여, ChatGPT에 대한 정의를 어렵게 쓴 글을 쉽게 바꾸도록 지시합니다.

다음의 {예시}를 참고하여 기술적으로 작성된 문구에 대해 '비전공자'가 이해할 수 있는 표현으로 변경하고, 불필요한 기술적 용어는 풀어쓰거나 제거하세요.

# 예시

입력: 프롬프트 엔지니어링(Prompt Engineering)은 대규모 언어 모델(LLM, Large Language Model)의 출력 최적화를 위해 입력 텍스트를 구조화하고 세분화하는 과정으로, 이 기술은 LLM의 내재된 의미 공간(latent semantic space)을 효율적으로 탐색하기 위해 자연어 인터페이스 상에서의 명령어 구성 전략을 설계하는 고차원적 기술입니다.

출력: 프롬프트 엔지니어링(Prompt Engineering)은 AI가 사용자의 의도를 잘 이해할 수 있도록 프롬프트를 설계하는 체계화된 접근입니다.

# 입력

ChatGPT는 대규모 언어 모델(LLM, Large Language Model) 기반의 대화형 인공지능 시스템으로, 자연어 입력을 받아 확률적 언어 생성(Probabilistic language generation)을 수행한다. 핵심 엔진은 Transformer 아키텍처를 기반으로 한 자기 회귀적(Autoregressive) 생성 모델이며, 사전 학습(Pretraining)과 미세 조정(Fine-tuning)을 거쳐 인간과 유사한 언어 상호작용을 수행한다.

위 프롬프트에 대한 출력으로 다음과 같은 결과가 나왔습니다. 요구사항에 따라 기술적 표현을 풀어쓰고, 트랜스포머(Transformer), 자기 회귀적(Autoregressive) 등의 기술적 용어는 제거하였으며 비전공자도 쉽게 이해할 수 있는 표현으로 개선되었습니다.

ChatGPT는 사람이 입력한 문장을 이해하고, 그에 맞는 답변을 만들어 주는 인공지능입니다. 많은 양의 글을 미리 학습해 언어의 흐름과 패턴을 익혔기 때문에, 질문에 자연스러운 문장으로 응답할 수 있습니다. 또한 반복적인 학습과 조정을 통해 사람과 대화하는 방식에 점점 더 가까워지도록 만들어졌습니다.


예시를 제공하는 것은 자신만의 스타일을 가진 전문가일수록 큰 효과를 발휘합니다. 예를 들어 저는 소프트웨어 개발자로서 저만의 코딩 스타일을 가지고 있습니다. 코드를 생성해 달라고 할 때 저의 코딩 스타일을 예시로 제공하면 에이전트가 이에 맞게 코드를 작성합니다. 이는 바이브 코딩(Vibe Coding)에서 유용할 뿐만 아니라, 그림, 작문 등의 다양한 예술 계열에서 활용이 가능합니다.

또한 예시는 비슷한 유형의 복잡한 문제를 풀 때 유용합니다. 예를 들어 여러 단계를 거쳐 해결해야 하는 문제인 경우, 과거에 이미 해결해 두었던 문제 풀이 예시를 제공하면, 유사한 문제를 풀 때 예시 풀이를 바탕으로 하는 절차와 접근법을 활용하여 문제를 해결할 것입니다. 이는 수학적 계산뿐만 아니라, 실무에서 처리 절차는 비슷하지만 세부내역만 다른 반복적인 업무에서 유용합니다.

이를테면 전통적인 소프트웨어 개발은 [기획 → 요구사항 정리 → 설계 → 구현 → 테스트 → 유지보수]의 절차가 있으며 각 단계별로 출력물이 있습니다. 이때, 과거에 다른 소프트웨어를 개발할 때 사용했던 문서를 예시로 제공함으로써 현재 만들어야 하는 소프트웨어에 대한 문서를 작성할 때 도움을 받을 수 있습니다.


샷(Shot)

프롬프트 엔지니어링에서 '샷 기법'이라는 표현은 많이 사용됩니다. 이는 프롬프트에 예시를 포함하는 것을 의미하는데요, 이를테면 예시가 없으면 제로샷(Zero-shot), 1개면 원샷(Onw-shot) 2개 이상이면 퓨샷(Few-Shot) 프롬프트라고 이야기합니다.


출력 형식

출력 형식을 설정하면 보고서, 기획서, 엑셀 등의 형식이 정해져 있는 출력물을 만들 때 프롬프트에 출력 형식을 포함시킴으로써 출력물의 형태를 제어할 수 있습니다. 예를 들어 표나 엑셀 같은 경우에는 제목 필드가 가장 첫 행에 나오고, 그다음 데이터가 나열되는 것이 보편적이며, 블로그 글이나 보고서 같은 경우에는 [제목 → 목차 → 개요 → 주제 1 → 주제 2, ... → 정리]처럼 정형화되어 있는 경우가 많습니다.


다음의 예는 '비전공자를 위한 챗GPT 101'에 대한 강의 계획서를 작성하되, 출력 형식을 제공하여 작성하는 사례입니다. [강의 제목 → 교육 목표 → 개요 → 커리큘럼]이라는 글의 구조를 가지되, '커리큘럼'에 대해서는 별도의 '표' 형식으로 출력하도록 요구합니다.

'비전공자를 위한 챗GPT 101'에 대한 강의 계획서를 작성해야 합니다. 5일간(2025.12.20 ~ 2025.12.25) 2시간(10:00 ~ 12:00) 강의를 한다고 가정하고 [강의 제목 → 교육 목표 → 개요 → 커리큘럼]에 따라 강의 계획서를 작성하되, '커리큘럼' 항목에 대해서는 다음의 형식을 따르세요.

|날짜|시간|주제|학습 목표|


위 프롬프트에 대한 출력으로 다음과 같은 결과가 나왔습니다. 작성 절차에 따라 작성을 해주었으며, 별도의 '커리큘럼' 항목에 대한 형식도 잘 지켜준 것을 볼 수 있습니다.

chatgpt.com_g_g-p-69245a8afe44819195ea3af9d9eb25ee-jibpil_c_692461af-0afc-8322-9688-99927dc9b1d7 (1).png
chatgpt.com_g_g-p-69245a8afe44819195ea3af9d9eb25ee-jibpil_c_692461af-0afc-8322-9688-99927dc9b1d7 (2).png


구조화된 출력(Structured Output)

구조화된 출력은 소프트웨어 개발에서 에이전트의 응답을 다른 서비스의 입력으로 사용하기 위해 에이전트의 출력을 JSON(Javascript Object Notaion), XML(eXtensible Markup Language)과 같은 데이터 통신을 위한 규격화된 텍스트 포맷으로 변경하는 것을 의미합니다. 이는 일반적으로 AI 활용에 있어서 크게 중요한 내용은 아니지만, 심화 활용에서 Make, n8n과 같은 자동화 워크플로우를 구성할 때 에이전트의 출력을 구조화된 출력으로 변경해야 할 때 필요합니다.




정리하자면, 프롬프트 엔지니어링의 기본 요소로는 역할, 지식, 목표, 입력, 지시, 예시, 출력 형식이 있습니다. 우리는 이제 개별 프롬프트 구성 요소를 적절하게 조합해서 사용하는 방법에 대해 알아볼 필요가 있습니다. 이들을 어떻게 조합해서 효과적으로 사용할 수 있을까요? 또한 프롬프트를 효과적으로 재사용하기 위해 프롬프트 템플릿으로 만들려면 어떤 작업들이 필요할까요? 이 질문에 대한 대답은 바로 다음에 살펴볼 프롬프트 프레임워크(Prompt Framework)에 있습니다.


'비전공자를 위한 챗GPT 101'은 단순하게 챗GPT 사용법을 이야기하는 것이 아니라, 생성형 AI를 활용하기 위해 알아야 하는 기초를 대표적인 생성형 AI 서비스인 챗GPT를 사용하여 풀어냅니다. 물고기를 잡아주기보다는 물고기를 잡는 법을 알려줍니다.

챗GPT를 사용하는 활용법은 간단한 글쓰기부터 시작해서 기획, 마케팅 등 너무나도 많고, 직무마다 다른데, 이 글들은 '이메일 쓰기', '통계 분석하기 같은' 단순한 '사례'만을 이야기하지 않습니다. 생성형 AI의 '기본'을 이야기함으로써 챗GPT를 자유롭게 구사하며 실무에서 활용할 수 있도록 뼈대를 쌓습니다.
매거진의 이전글문제는 프롬프트야 바보야