프롬프트 엔지니어링(Prompt Engineering)은 인공지능(AI) 모델, 특히 자연어 처리(NLP) 또는 생성 모델 같은 모델에게 원하는 결과를 얻기 위해 사용자의 요청이나 질문을 특정 방식으로 구성하는 기술입니다. 이 방법은 AI가 사용자의 의도를 더 정확하게 이해하고, 그에 따라 더 정확하거나 유용한 답변을 생성할 수 있도록 돕습니다.
프롬프트 엔지니어링은 다음과 같은 과정을 포함할 수 있습니다:
질문 최적화: 가장 관련성 높고 유용한 답변을 얻기 위해 질문이나 명령어를 구체적이고 명확하게 구성합니다. 이 과정에서는 질문의 형태, 사용하는 용어, 문맥의 명확성 등이 중요한 역할을 합니다.
맥락 설정: 때로는 질문에 앞서 AI에게 주어진 맥락이나 배경 정보를 제공함으로써 AI가 주어진 질문을 더 정확하게 이해하고 처리할 수 있도록 합니다. 이는 특히 복잡한 주제나 미묘한 뉘앙스가 포함된 경우에 유용할 수 있습니다.
피드백 반영: AI로부터 받은 응답을 바탕으로, 프롬프트를 조정하여 더 나은 결과를 얻을 수 있습니다. 이 과정에서는 반복적인 실험과 조정이 필요할 수 있으며, 사용자의 목표에 따라 다양한 접근 방식을 시도할 수 있습니다.
창의적 사용: 특정한 목적이나 창의적인 결과를 얻기 위해 기존에 생각하지 못한 방식으로 질문을 구성하거나 AI의 기능을 활용합니다.
프롬프트 엔지니어링은 AI와의 상호작용을 최적화하고, 기술의 가능성을 최대한 활용하기 위한 중요한 기술로 간주되며, 연구, 교육, 콘텐츠 생성, 소프트웨어 개발 등 다양한 분야에서 활용됩니다.
프롬프트 엔지니어링의 권장 기법들
프롬프트 엔지니어링에서는 효과적인 상호작용을 위해 다양한 기법들이 권장됩니다. 여기 몇 가지 주요 기법들을 상세하게 설명합니다:
명확성과 구체성: 프롬프트는 명확하고 구체적이어야 합니다. 모호하거나 일반적인 질문보다는 특정한 정보, 상황, 또는 목적을 명시하는 것이 더 좋은 결과를 가져올 수 있습니다. 예를 들어, “고양이 사진” 대신 “행복하게 뛰어노는 샴 고양이의 사진”과 같이 구체적으로 요청하는 것이 좋습니다.
반복적인 조정: AI로부터 원하는 결과를 얻지 못했을 때, 프롬프트를 조정하여 다시 시도하는 것이 중요합니다. 이 과정에서는 다양한 표현 방식을 실험하고, 응답에서 얻은 정보를 토대로 프롬프트를 미세 조정합니다.
문맥 제공: 복잡한 주제나 세밀한 뉘앙스가 필요한 경우, 질문에 앞서 AI에게 충분한 배경 정보나 문맥을 제공하는 것이 도움이 될 수 있습니다. 이는 AI가 주제를 더 잘 이해하고 관련성 있는 답변을 제공하는 데 기여합니다.
피드백 반영: AI의 응답을 분석하고, 그것을 바탕으로 프롬프트를 개선하는 과정을 반복하는 것이 중요합니다. 이를 통해 점점 더 정확하고 만족스러운 결과를 얻을 수 있습니다.
창의적 접근: 때로는 기존의 사고방식을 벗어나, 창의적이거나 비전통적인 방식으로 프롬프트를 구성하는 것이 효과적일 수 있습니다. 예를 들어, 문제 해결이나 아이디어 생성에 있어서 다른 관점에서 질문을 재구성해 보는 것입니다.
Zero-shot, Few-shot, Many-shot 학습 활용: 특히 고급 프롬프트 엔지니어링에서는, AI가 이전에 보지 못한 작업을 수행하도록 하는 Zero-shot, 소수의 예시를 통해 학습하는 Few-shot, 다수의 예시로부터 학습하는 Many-shot 접근 방식을 적절히 활용하는 것이 중요합니다.
언어의 다양성 이해: AI 모델은 사용하는 언어나 표현 방식에 따라 다르게 반응할 수 있습니다. 다양한 언어 스타일, 전문 용어 사용, 문화적 뉘앙스 등을 고려하여 프롬프트를 구성하는 것이 유용할 수 있습니다.
이러한 기법들은 사용자가 AI와 더 효율적으로 상호작용하고, 원하는 결과를 얻기 위한 전략적인 접근 방법을 제공합니다. 프롬프트 엔지니어링의 목표는 AI의 가능성을 최대한 활용하면서, 동시에 사용자의 의도와 목적에 부합하는 결과를 얻는 것입니다.
코넬대가 제시하는 ChatGPT 프롬프트 26가지 방법
본론만 말하라: 간결한 답변을 원한다면, ChatGPT 프롬프트로 “부탁합니다”, “상관없다면”, “감사합니다”, “저는 ~하고 싶습니다” 같은 말을 추가하지 않아도 됩니다. 바로 요점으로 들어가면 됩니다. 이 포스팅에서 정리한 26개의 프롬프트는 ChatGPT뿐만아니라 라마, 제미나이와 같은 LLM에도 적용할 수 있습니다.
청중을 설정하라: 중학교 3학년 학생에게 설명할 수 있게 해주세요’처럼 대상자를 알려줍니다.
- 세분화하라: 큰 덩어리의 주제라면 작은 덩어리로 쪼개서 순서대로 정보를 요청합니다.
- 긍정지시문을 사용하라: 긍정적인 지시어를 사용합니다. 되도록 ‘하지 말고’ 등의 부정적인 지시어를 피합니다.
- 구체적으로 어린아이 대하듯 초보자 대하듯 알려주라고 요구하라:
특정 주제나 정보에 대해 더 명확하게, 깊이 이해하고 싶을 때, 아래의 프롬프트를 추천합니다. 위의 (2)번이 여기에 포함된다고 보시면 되겠습니다.
– [구체적인 주제]를 간단하게 설명해주세요.
– 마치 저가 11살인 것처럼 설명해주세요.
– [분야]에 대해 초보자인 저에게 설명하듯이 말해주세요.
– 5살짜리 아이에게 무언가를 설명하듯이, 간단한 언어로 [에세이/문장/단락]을 작성해주세요. - 팁을 주겠다고 꼬셔봐라 : 더 나은 해결책을 위해 $100의 팁을 줄게요!”라고 추가하세요. 팁을 주는 것은 미국 스타일인데, 아무래도 현재 대부분의 LLM이 미국에서 나온 것이라 그런 것 같습니다.
- 예시설정 : 원하는 정보와 관련된 간단한 예를 들어줍니다.
- 지시,예시, 질문 설정 : 프롬프트를 작성할 때, ‘###지시사항(Instruction)###’으로 시작하세요. 혹시 그 다음에 추가 가능하다면 ‘###예제(Example)###’ 또는 ‘###질문(Question)###’을 추가합니다. 지시사항, 예제, 질문을 작성한 후에 내용을 제시하세요. 지침(Instruction), 예시, 질문, 맥락 및 입력 데이터를 구분하기 위해 Shift+Enter를 쳐서 줄 바꿈합니다.
- 임무나 의무를 부여하라 : 다음 문구를 포함시킵니다. “당신의 임무는” 그리고 “당신은 반드시 해야 합니다”.
- 벌을 준다고 협박해봐라 : 다음 문구를 포함시킵니다. “당신은 제재를 당할 것입니다. 또는 벌을 받을 것입니다.
- 인간적인 방식을 유도하라: 프롬프트 작성할 때 “인간처럼 자연스럽게 또는 사람이 말해주듯 주어진 질문에 답하세요”라는 문구를 사용합니다.
- 단계별 설명을 유도하라: “차근차근(step-by-step) 설명해 주세요 또는 단계별로 설명해주세요”.를 사용합니다.
- 편견을 제거하라 : “당신의 답변이 공정하며, 고정관념에 사로잡히지 않은 답변이라는 것을 확실해 해주세요“를 추가합니다.
- 질문시키기 : LLM이 내가 필요로 하는 답변을 제공할 수 있을 만큼 충분한 정보를 얻을 때까지 내게 질문을 해서 정확한 세부 요구사항을 이끌어낼 수 있도록 허용해 줍니다. 예를 들어, “지금부터는 당신이 저에게 거꾸로 질문을 해서 …”
- 테스트 추가 : 특정 주제에 대해 묻고 LLM이 대답한 것을 내가 잘 이해하고 있는지 테스트하고 싶을 때, 다음과 같은 문구를 사용합니다. : “저에게 [주제]에 대해 가르쳐 주시고 마지막에 내가 이해했는지 테스트해 주세요. 그러고는 저의 답이 맞는지 알려주세요, 제가 답한 후에 알려주세요.“
- 역할을 부여 : LLM에게 역할을 줍니다. “지금부터 당신을 저의 영어선생님으로 모십니다.”처럼 말입니다.
- 구분기호 사용 : 구분자를 사용합니다. 여기서 구분자는 쉼표(,), 세미콜론(;), 콜론(:), 파이프(|), 슬래시(/), 괄호() [], 따옴표(‘ “), 대시(-), 언더스코어(_)와 같은 것들을 의미합니다.
- 반복하기 : 프롬프트를 작성할 때, 원하는 주제와 관련된 특정 단어나 문구를 여러 번 반복합니다.
- 사고 연결과정과 프롬프트 예제를 결합 :
“사고 연결 과정(Chain-of-thought, CoT)”과 “프롬프트 예제(few-Shot prompts)”를 결합합니다. 말이 참 어려운데요. 레고 블록으로 CoT와 few-shot prompt를 설명해보겠습니다.
먼저, “사고 연결 과정”은 큰 레고 성을 만들기 위해 각 블록을 하나씩 차례대로 어떻게 쌓아야 하는지 생각하는 과정입니다. 예를 들어, 성의 기초를 만들고, 벽을 쌓고, 마지막으로 탑을 만드는 것처럼 말입니다. 여기서 각 단계가 바로 문제를 해결하기 위한 작은 ‘생각의 단계’라고 할 수 있습니다. 프롬프트 예제는 선생님이 작은 레고 모델 몇 개를 보여주며, “이런 식으로 만들어 보세요”라고 말하는 것과 같습니다. 이렇게 몇 개의 예시를 보면서, 우리는 큰 레고 성을 만드는 방법을 더 잘 이해하고, 스스로도 비슷한 모델을 만들 수 있게 됩니다.
이 두 방법을 결합하면, 문제를 해결하는 방법을 단계별로 잘 배우면서, 실제 예시를 통해 그 방법을 실천해 볼 수 있게 됩니다. 마치 레고 블록을 조립하면서, 자신만의 멋진 작품을 만들어 가는 것처럼 말입니다. 다만, 프롬프트 작성에 이것을 적용해보려면, LLM과 여러차례 대화해서 어느정도 개념이 잡힌 상태이어야 합니다.
- 출력 문구를 지정하라 :
대화나 글에서 우리가 원하는 답변이나 내용을 쉽게 시작할 수 있도록 도와주는 첫 문장이나 질문 같은 ‘도입부(primer)’를 써줍니다.
도입부에 관해 예를 들어보면, 글쓰기 수업에서 이야기를 쓰기 시작할 때, 선생님이 “오늘은 우주 여행에 대한 이야기를 써보자. ‘한 소년이 우주선을 타고…’로 시작해볼까?” 라고 말씀하셨다면,
‘한 소년이 우주선을 타고…’라는 부분이 바로 도입부입니다. 이 도입부는 이야기를 어떻게 시작해야 할지에 대한 아이디어를 줍니다. 이렇게 시작 문구를 주면, 우리는 그 다음에 무슨 일이 일어날지 생각하면서 글을 써내려갈 수 있습니다.
- 필요한 모든 정보를 추가하라. : 세부적으로 설명이 필요한 에세이, 글, 단락, 기사 등을 작성하려면: “[주제]에 대해 필요한 모든 정보를 추가한 후 작성해달라고 요청합니다.
- 텍스트 개선 : 내가 쓴 글의 문체나 표현 방식을 그대로 유지하면서 문법과 어휘만 개선하고 싶을 때는 “문법과 어휘만 개선하고 자연스럽게 들리도록 해주되, 원래의 스타일을 유지해세요.”라고 요청합니다. 만약 공식적으로 유지하면서, 공식적인 단락이 여전히 공식적으로 남아 있도록 해야 합니다.
- 여러 개의 파일에 분산되어 있을 경우 : 복잡한 코딩 문제를 해결해야 하고, 코드가 여러 파일에 분산되어 있을 때에는 아래와 같이 프롬프트를 작성합니다. 파이썬 코드를 작성해야 할 경우를 예로 들어보겠습니다.
“지금부터는 a.py라는 코드를 자동으로 생성하거나, 기존 b.py를 변경해서 [~을 할 수 있는 코드]를 작성해주세요”. - 제시어 기반글 :
특정 단어, 문구 또는 문장을 사용하여 글을 쓰고 싶을 때, 다음과 같은 프롬프트를 작성합니다.
제가 글을 시작할 수 있는 기본 틀을 제공할 예정이니, 이 기본 틀을 이용하여 글을 써 주세요. 글의 흐름을 일관되게 유지해 주세요.
- 키워드 제시 : LLM이 콘텐츠를 생성하기 위해 따라야 할 요구사항을 키워드, 규칙, 힌트 또는 지시사항의 형태로 명확하게 제시합니다.
- 동일한 언어 사용 :
특정한 글과 유사한 에세이나 단락과 같은 어떤 글을 작성하려면 아래의 프롬프트를 이용합니다. 아래에서 ‘동일한 언어(same language)를 사용한다’는 것은, 주어진 예시와 같은 종류의 단어, 문장, 그리고 스타일을 사용하여 글을 써야 한다는 것을 의미합니다.
제가 제공하는 글[단락/제목/에세이/답변]을 기반으로 동일한 언어를 사용해 주세요.
Custom Instructions 작성시 단계별 가이드
1단계: 목적 정의
- 작업의 목적이 무엇인지 명확하게 정의하세요. 이는 글쓰기, 데이터 분석, 아이디어 생성 등 다양할 수 있습니다. 목적을 분명히 하는 것이 첫걸음입니다.
2단계: 구체적인 요구사항 제시
- 구체적인 요구사항을 명시하세요. 예를 들어, 글쓰기 작업의 경우 글의 종류, 주제, 원하는 단어 수, 특정 포인트를 포함할지 여부 등을 포함시킬 수 있습니다.
3단계: 형식과 스타일 지정
- 원하는 결과물의 형식과 스타일을 지정하세요. 이는 보고서 작성, 친근한 톤의 블로그 글, 공식적인 비즈니스 제안서 등 다양할 수 있습니다.
4단계: 예시 제공
- 가능하다면, 구체적인 예시나 참고 자료를 제공하세요. 이는 ChatGPT에게 명확한 기준을 제시하고, 기대하는 결과물의 품질을 높일 수 있습니다.
5단계: 제한사항과 선호도 명시
- 특정한 제한사항이나 선호도가 있다면 명시하세요. 예를 들어, 특정 주제나 용어를 피해야 하는 경우, 또는 특정 형태의 결과만 원하는 경우 이를 분명히 합니다.
프롬프트 예시
예시 1: 데이터 분석 요청
- 프롬프트: “다음 데이터셋을 사용하여 2020년부터 2023년까지의 연도별 매출 증가율을 계산해주세요. 각 연도의 총 매출을 기준으로 연간 성장률을 백분율로 표시하고, 이러한 변화에 대한 간략한 분석을 제공해주세요.”
예시 2: 콘텐츠 생성 요청
- 프롬프트: “지속 가능한 패션에 대한 500단어 글을 작성해주세요. 현재 패션 산업이 환경에 미치는 영향, 지속 가능한 패션의 중요성, 그리고 소비자들이 지속 가능한 패션을 지원할 수 있는 방법에 대해 포함시켜주세요.”
예시 3: 프로그래밍 문제 해결
- 프롬프트: “Python을 사용하여 주어진 배열에서 가장 큰 수를 찾는 함수를 작성해주세요. 함수는 임의의 정수 배열을 입력으로 받고, 배열 내의 최대값을 반환해야 합니다. 또한, 작성한 코드에 대한 간단한 설명을 추가해주세요.”
예시 4: 아이디어 생성 요청
- 프롬프트: “중소기업을 대상으로 한 디지털 마케팅 전략 5가지를 제안해주세요. 각 전략이 해당 기업에 어떤 이점을 제공할 수 있는지 설명하고, 실현 가능성에 대한 간략한 평가를 포함해주세요.”
예시 5: 블로그 생성 요청
- 프롬프트:”500단어 분량의 블로그 글을 작성해주세요. 주제는 ‘지속 가능한 생활 방식의 중요성’입니다. 글에는 지속 가능한 생활 방식을 채택함으로써 개인이 환경에 미치는 긍정적인 영향에 대한 내용을 포함해야 합니다. 친근하고 설득력 있는 톤으로 작성해주세요. 가능하면 실제 사례를 들어 설명을 보충해 주세요. 글 마지막에는 독자들이 쉽게 실천할 수 있는 3가지 지속 가능한 생활 습관을 제안해주세요.”
프롬프트 권장사항
- 구체적이고 명확하게: 목적과 기대하는 결과를 명확히 정의합니다.
- 배경 정보 제공: 필요한 경우, AI가 작업을 이해하고 수행할 수 있도록 충분한 맥락이나 배경 정보를 제공합니다.
- 제한 조건 명시: 결과물에 특정 형식, 길이, 사용 언어 등 제한 조건이 있는 경우 이를 명시합니다.
- 가능한 명령어 사용: AI가 요청을 이해하고 실행할 수 있도록 간결하고 명령적인 언어를 사용합니다.
관련 동영상 강좌
프롬프트 엔지니어링 강좌
핑백: ChatGPT 영어학습 방법 - IT 5W1H, IT의 모든 것.