The Art of Asking ChatGPT for High-Quality Answers: A Complete Guide to Prompt Engineering Techniques

매 장이 몇 페이지 안 되는 매우 얇은 책이다. 프롬프트 엔지니어링 고급 주제는 하나 하나가 논문이 될 정도지만, 전체적인 내용은 이 책 처럼 간결하게 핵심만 열거하는 게 좋다고 본다.

프롬프트 작성 시, llm에게 시킬 일에 따라 구조가 달라질 수 있다. llm이 잘 하는 일을 시킬 때와 못하는 문제를 시킬 때는 구조가 달라진다. 잘 못하는 문제를 잘하게 하려니 연구가 필요하고, 대부분 프롬프트 엔지니어링에서 연구되는 것은 대부분 이 부분이다. llm은 언어 모델이기 때문에 수학 문제나 추론에 태생적으로 약하다.

llm이 잘하는 일을 시킬 때는 원하는 내용이 달라짐에 따라 프롬프트 내용이 달라진다. 원하는 게 뭐야?에 따라 적용할 기술이 달라진다는 것.

 

책 본문 내용을 그대로 사용할 때는, 사각형 박스 내에 작성한다. 프롬프트 관련 책들을 정리하는 이유 중 하나는 뉴테크프라임에서 개발하고 있는 Pilot AI Smarteasy 개발을 위한 목적이 있는데, 이 부분에 대한 생각을 정리할 때는 [Pilot AI Smarteasy ]로 구분해서 할 것이다.

 

Chapter 1: Introduction to Prompt Engineering Techniques

사람이 생성형 AI(모델)에게 유일하게 던져 줄 수 있는 게 프롬프트니, 프롬프트는 작성해야 한다. 그래서 프롬프트 작성에 공학이라 이름 붙인 Prompt Engineering도 등장한 거고.

 

이 책은 사용자가 open ai의 (Chat)GPT 모델에게 원하는 응답을 얻기 위한 프롬프트 작성 기법들을 이해하고 다룰 수 있도록 안내한다.

프롬프트 작성을 프롬프트 프로그래밍 이라고 한다면, 프롬프트 프로그래밍을 다룬다고 할 수 있다. 자연어를 사용하기 때문에 프롬프트 설계를 다룬다고 하는 게 더 적합하다.

(Chat)GPT는 사람과 유사한 텍스트를 생성할 수 있는 openai의 최첨단 언어 모델이다. 이 모델은 트랜스포머 아키텍처를 기반으로 구축되었다.
openai는 gpt를 계속 업그레이드하고 있는 데, 지금은 버전 4까지 나와 있다. gpt를 실행하려면 원하는 목적에 따라 환경 설정을 해야 하지만, 전달될 유일한 입력은 프롬프트다. 이거 하나로 출력이 결정나니, 주의해서 잘 작성해야 한다.

재미나 흥미를 위해서라면 프롬프트를 대충 작성해도 되겠지만, 업무를 한다면 좀 더 명확하고 구체적인 지침을 따라야 할거다.

 

프롬프트는 다음과 같은 세 가지 요소로 구성된다.
– 작업: llm에게 시킬 내용. llm을 사용하는 목표. 프롬프트를 입력으로 전달하는 이유.
– 지침: 텍스트를 생성할 때 모델이 따라야 하는 지침
– 역할: 텍스트를 생성할 때 모델이 수행해야 하는 역할

task: a clear and concise statement of what the prompt is asking the model to generate.
instructions: the instructions that should be followed by the model when generating text.
role: the role that the model should take on when generating text.

 

[Pilot AI Smarteasy ]

프롬프트 엔지니어링에 따라 프롬프트를 작성한다. 우리는 프롬프트 작성을 프롬프트 프로그래밍이라고 한다. 프로그래밍을 하려면 프로그래밍 언어가 필요하지만 자연어를 사용하니 프로그래밍 언어를 새로 개발할 필요는 없다. 복잡한 프롬프트라면 분석, 설계가 필요하다.

프롬프트 엔지니어링에 따라 프롬프트를 설계하는 도구가 필요하다. 뉴테크프라임에서 개발 중인 Pilot AI Smarteasy에서는 Prompt Pilot 기능으로 이것을 포함하려 한다.

Chapter 2: Instructions Prompt Technique

지시만 잘 하면 되는 시대가 오는 것 같다. 시킬 일이 있는가? 잘 지시하자.

프롬프트 instruction부분을 작성하자.

 

gpt는 생성형 ai 모델이니, 뭘 시킨다는 것은 뭘 생성하라는 거다. 생성된 것은 주로 텍스트이겠지만, 오디오나 이미지나 비디오가 될 수 있다. 뭘로 생성하는 지를 모달이라고 한다. task 결과로 모달이 정해져야 겠다.

원하는 응답을 생성할 수 있도록, llm을 가이드하는 분명하고 간결하고 구체적인 지침(instruction)을 작성한다.

 

gpt에게 시킬 일(task)이 있다면, 어떤 일을 시킬 지 정한다. 시킬 일은 아마도 원래 자기가 하던 일의 일부일 거다. 업무들이 있고, 그 중 한 업무의 특정 일을 시키고 싶을 것이다.
어떻게 일을 할 지는 gpt가 알아서 한다고 보자. 이 일을 하는 데  꼭 지켜야 할 것들이 있다면 이걸 지침(instruction)으로  작성해서 지시한다. 지침 중 중요하게 작성 할 부분은 gpt의 응답이 어떠해야 하는 지(형식과 구조)에 대한 지침이다. 내용은 알아서 작성할거니.

예를 들어,

generating customer service responses하는 업무를 할 때

generate responses to customer inquiries 일을 하는 데, 이걸 gpt에게 시키고 싶다면.

시킬 일은  “Generating customer service responses – Generate responses to customer inquiries”이고,  지침은 “The responses should be professional and provide accurate information”라면, 프롬프트는 “Generate professional responses to customer inquiries following these instructions: The responses should be professional and provide accurate information.”와 같이 작성한다.

 

This will help to ensure that the output is relevant and high-quality. The instructions prompt technique can be combined together with “role
prompting” and “seed-word prompting” as explained in the next chapter to enhance the output of ChatGPT.

다음 장에서 role prompting을 다루고, seed-word prompting은 다음 장과 8장에서 다룬다.

 

[Pilot AI Smarteasy ]

  1. 시킬 일(task)은 사용자가 선택할 수 있도록 분류되어 제공되면 좋을 것 같다. prompt design 폼에서 왼쪽 트리로 설계.
  2. gpt에게 원하는 대부분 응답은 아직까지는 텍스트모달이다. 텍스트는 json과 같은 원하는 형식이 있을 수 있기 때문에 task를 선택하고 원하는 출력 형식을 선택할 수 있도록 해야 한다.  형식 선택에 대한 고민은 불필요해 보인다. json이면 된다.

 

Chapter 3: Role Prompting

역할을 부여해서 모델을 안내해 주자. 역할을 부여해 주면 응답을 더 잘한다고 한다.

The role prompting technique is a way of guiding the output of ChatGPT by providing a specific role for the model to take on. This technique is useful for generating text that is tailored to a specific context or audience.
To use the role prompting technique, you will need to provide a clear and specific role for the model to take on. For example, if you are
generating customer service responses, you would provide a role such as “customer service representative”.

 

시킬 일이 정해지면, 그 일을 잘 할 역할을 정하도록 하자. 그리고 프롬프트에는 다음과 같과 작성한다. “Generate [task] as a [role]”
예) Generate responses to customer inquiries as a customer service representative.

 

시킬 일이 정해지면, 역할도 정하도록 한다. 그런 일을 잘하는 역할을 gpt에게 물어볼 수도 있을 것 같다. 많이 사용하는 역할에는 다음과 같은 것들이 있다.

  • 정보 검색자: 데이터베이스나 인터넷에서 정보를 찾아 제공한다.
  • 데이터 분석가: 주어진 데이터를 분석하고 통찰력을 제공한다.
  • 창의적 작가: 시, 이야기, 노래 가사 등 창의적인 콘텐츠를 생성한다.
  • 대화 파트너: 사용자와 대화를 나누며 상호작용한다.
  • 교육자: 특정 주제에 대한 교육적 설명을 제공한다.
  • 번역가: 한 언어에서 다른 언어로 문서나 대화를 번역한다.
  • 코드 작성자: 프로그래밍 문제를 해결하거나 코드 예제를 제공한다.
  • 문서 검토자: 문서를 검토하고 편집 제안 한다.
  • 게임 마스터: 게임이나 퍼즐을 만들고 진행한다.
  • 비서: 일정 관리, 알림 설정 등의 조직적인 역할을 수행한다.

 

응답 방향성을 정해 주는 데, 역할 처럼 영향을 미치는 것으로 seed-word가 있다. 시킬 일이 정해지면, 응답 생성의 기초가 되며, 특정 주제나 개념에 초점을 맞추도록 안내해줄 시드 단어를 생각해 보자. 시드 단어가 들어가도록 지침 문장을 바꿔준다.

  • 시드 단어 – 특정 주제나 내용을 생성할 때 기초가 되는 단어나 개념을 의미한다.

 

[Pilot AI Smarteasy ]

  1. task와 role 작성을 지원한다.
  2. task는 tree 구조로 업무 계층 최하위에 작성하도록 한다. 생성형 ai를 전제로 하기 때문에, 질의 응답이 아닌 경우 “Generate [task] as a [role]”를 적용해 프롬프트를 작성한다.
  3. 역할은 질의 응답은 정보 검색자로 하고, 생성은 데이터 분석가에서 비서까지의 목록을 사용한다. 추가 정의(역할 이름, 역할 정의)가 가능하도록 한다.
  4. 시킬 일  – 이름, 정의, 역할, 지침 – 시드 단어

Chapter 4: Standard Prompts

gpt는 llm이기 때문에 잘 생성하는 것들이 있다. 요약 번역이 대표적이다. 이런 일에는 시킬 일을 그냥 프롬프트에 작성해 주면 된다. 많이 사용되는 프롬프트를 그대로 사용하면 된다.

좀 더 노력하고 싶으면 이전 배운 내용들을 적용하면 된다.

 

[Pilot AI Smarteasy ]

  1. 시킬 일 분류에 자연어 처리(Natural Language Processing, NLP)를 두고 하위에 다음을 둔다. 프롬프트가 구체화될 수준까지 분류하고, 프롬프트를 제공한다.
    • 텍스트 분류: 문서나 메시지를 주제나 감정 등에 따라 분류한다.
    • 기계 번역: 한 언어에서 다른 언어로 텍스트를 번역한다.
    • 음성 인식: 음성 데이터를 텍스트로 변환한다. (이건 별도 분리)
    • 대화 시스템: 사용자와 자연스러운 대화를 나누는 챗봇을 개발한다. (상호작용 방식의 기본, 여기서 제거)
    • 정보 추출: 텍스트에서 특정 정보나 의미 있는 패턴을 추출한다. (좀 더 구체화될 필요가 있다)
    • 요약 생성: 긴 문서를 짧고 핵심적인 내용으로 요약한다.
    • 감정 분석: 텍스트에서 작성자의 감정이나 태도를 분석한다.
    • 문법 검사: 텍스트의 문법적 오류를 찾아 수정한다.

Chapter 5: Zero, One and Few Shot Prompting

사용할 예가 하나만 있는 것도 있고 몇 개 밖에 없는 것도 있다. 예가 주어지면 예가 응답 생성을 가이드 한다. 예를 안 줘도 된다는 것은 수 없이 많은 예가 있다는 거니 예를 준다고 가이드 되지 않는다는 것이다.

예가 주어지면 모델이 해야 할 일을 더 잘 이해하게 된다. 예가 하나나 몇 개로 정해질 수 있다면, 이에 대한 언급을 프롬프트로 해 줘서, 모델이 응답 생성에 불필요한 노력을 하지 않아도 하게 해 주자.

 

[Pilot AI Smarteasy ]

  1. 왜 예시가 왜 중요한 지 안내 문구를 제공한다.
  2. 예시 여부 체크, 예시 유형(one shot, few shot) 선택 , 예시 작성할 수 있다.

 

Chapter 6: “Let’s think about this” prompt

gpt에게 신중하게 분석하고 응답하라고 시키는 것이다.

생각해 보자라고 하면서 대화를 시작한 거다. 이후 대화가 계속되어야 의미가 있다. 토론하고자 하는 주제나 아이디어가 있을 때 유용하다.

encourage ChatGPT to generate text that is and reflective contemplative.

“Let’s think about this” followed by a topic or question.

Generating a reflective essay:
Task: Write a reflective essay on the topic of personal growth
Prompt: “Let’s think about this: personal growth”

This prompt is asking for a conversation or discussion about a specific topic or idea. The speaker is inviting ChatGPT to engage in a dialogue about the subject at hand.

The model is provided with a prompt, which serves as the starting
point for the conversation or text generation. The model then uses its training data and algorithms to generate a response that is relevant to the prompt. This technique allows ChatGPT to generate contextually appropriate and coherent text based on the provided prompt.

This unique prompt helps ChatGPT to give answers in different perspectives and angles, resulting in more dynamic and informative passages.

 

[Pilot AI Smarteasy ]

  1. 지침은 기본 지침이 있고, 추가적으로 고려해야 할 사항이 있다.
    • 추가적으로 고려해야 할 것들을 선택할 수 있게 한다.
    • 추가적으로 고려해야 할 것들에 “신중하게 분석하고 응답하기(주제 토론이나 협력적인 문제 해결 과정 필요)” 포함
      • 이걸 선택 했을 때, 프롬프트에 영문인 경우 “Let’s think about this”, 한국어인 경우 “이것에 대해 신중하게 고민하고 생각해보자.”를 추가할 수 있도록 하자.

Chapter 7: Self-Consistency Prompt

일관되게 응답을 생성하라고 시킬 때. 입력과 일관성을 유지해야 하고, 챗 한다면 이전 챗 이력에 일관되게.

The prompt formula for the Self-Consistency prompt is the input text followed by the instruction “Please ensure the following text is self-consistent”

Alternatively, the model can be prompted to generate text that is consistent with the provided input.

 

“Summarize the following news article in a way that is consistent with the information provided [insert news article]”

“Please ensure the following text is self-consistent: The article states that the population of the city is 5 million, but later on, it says that the population is 7 million.”

 

[Pilot AI Smarteasy ]

  1. 추가적으로 고려해야 할 것들에 “일관성 유지” 포함
    • 이걸 선택 했을 때, 위 내용 반영해서 프롬프트를 작성할 수 있도록 지원

Chapter 8: Seed-word Prompt

“Complete the following sentence in a way that is related to the seed word ‘science’ and in the style of a research paper as a researcher: [insert sentence]”

The summary should be related to the seed word “politics” and should be written in a neutral and unbiased tone.

“Summarize the following news article in a way that is related to the seed word ‘politics’ in a neutral and unbiased tone as a journalist: [insert news article]”

이전 예에서는 seed word를 문장에 seed word라는 것을 직접 언급하지 않고 포함했었다. 직접 언급하는게 더 분명해 보인다. 응답에 대한 스타일 언급도 보여주고 있다. 이것도 응답에 대한 조건으로 포함한다.

Chapter 9: Knowledge Generation prompt

시킬 일을 하려면 지식 생성이 요구된다.

To use this prompt with ChatGPT, the model should be provided with a question or topic as input, along with a prompt that specifies the task or goal for the generated text. The prompt should include information about the desired output, such as the type of text to be generated and any specific requirements or constraints.

Example 1: Knowledge Generation
Task: Generate new information about a specific topic

Instructions: The generated information should be accurate and relevant to the topic “Generate new and accurate information about [specific topic] “

Example 2: Question Answering
Task: Answer a question
Instructions: The answer should be accurate and relevant to the question

Prompt formula: “Answer the following question: [insert question]

Example 3: Knowledge Integration
Task: Integrate new information with the existing knowledge

Instructions: The integration should be accurate and relevant to the topic
Prompt formula: “Integrate the following information with the about new existing knowledge information[specific topic] : [insert new information”

 

[Pilot AI Smarteasy ]

  1. 추가적으로 고려해야 할 것들에 “지식 생성” 포함

 

Chapter 10: Knowledge Integration prompts

llm은 사전훈련된 데이터에만 접근할 수 있다. 사전 훈련 이후에 만들어 진 데이터나 기밀 데이터로 외부에 공개되지 않은 데이터에 대해서는 모른다. Knowledge Integration prompts는 이런 경우 필요한 기술이다.

프롬프트에 context 영역을 두고, 이 영역을 활용하라는 지침을 줄 수도 있다.

 

[Pilot AI Smarteasy ]

  1. 추가적으로 고려해야 할 것들에 “추가 데이터 필요” 포함하고, 컨텍스트(Context) – 추가 데이터/정보/ 지식 – 작성할 수 있도록 한다.
  2. 이를 반영할 수 있도록 프롬프트를 작성한다.

 

Chapter 11: Multiple Choice prompts

목록을 주고 그 중에서 응답을 선택하도록 하고 싶을 때 사용한다.

예)

Example 1: Question Answering
Task: Answer a multiple-choice question
Instructions: The answer should be one of the predefined options
Prompt: “Answer the following question by selecting one of the following options: [insert question] [insert option 1] [insert option 2] [insert  option 3]”

Example 2: Text completion
Task: Complete a sentence with one of the predefined options
Instructions: The completion should be one of the predefined options
Prompt: “Complete the following sentence by selecting one of the following options: [insert sentence] [insert option 1] [insert option 2] [insert option 3]”

Example 3: Sentiment analysis
Task: Classify a text as positive, neutral or negative

Instructions: The classification should be one of the predefined options
Prompt: “Classify the following text as positive, neutral or negative by selecting one of the following options: [insert text] [positive] [neutral] [negative]”

 

[Pilot AI Smarteasy ]

  1. 추가적으로 고려해야 할 것들에 “선택 목록 제공” 포함
  2. 프롬프트 템플릿을 지원하고, 템플릿을 사용해 프롬프트를 작성하는 기능을 제공한다.
    • 템플릿은 ‘[ ]’로 작성, 목록을 지원해야 하니 [ ] 뒤에 *를 사용한다.
  3. 시킬 일을 선택하면, 프롬프트에 템플릿이 있는지 확인하고, 이 값을 작성할 수 있게 지원해야 한다.

 

Chapter 12: Interpretable Soft Prompts

입력이나 출력에 대한 제약을 추가하고 싶을 때 사용한다.

 

[Pilot AI Smarteasy ]

  1. 프롬프트 템플릿을 지원하면 된다.

 

Chapter 13: Controlled Generation prompts ~ Chapter 24: Text generation prompts

시킬 일에 대한 표준 프롬프트 제시로 볼 수 있다.

 

[Pilot AI Smarteasy ]

  1. 각 장의 예들 까지 살펴보고 시킬 일 항목에 추가한다. 이에 대한 표준 프롬프트를 관리한다. 프롬프트 템플릿을 지원한다.
  2. 프롬프트 템플릿에서 변수의 다중 성을 알고, 다인 경우 목록 작성을 지원해야 한다. 변수 값 작성을 직접 작성할 것인지 함수를 사용할 것인지 선택할 수 있도록 한다. 함수를 사용한다면 rag라고 보면 된다. rag를 위한 함수를 선택하도록 한다.

 

About the Author
(주)뉴테크프라임 대표 김현남입니다. 저에 대해 좀 더 알기를 원하시는 분은 아래 링크를 참조하세요. http://www.umlcert.com/kimhn/

Leave a Reply

*