Insight

프롬프트 (Prompt) 란 무엇인가? - 정의, 원리, fine tuning

Gen AI 시대의 프롬프트와 효과적인 엔지니어링에 대해서

2023
.
08
.
14
프롬프트 (Prompt) 란 무엇인가? - 정의, 원리, fine tuning

프롬프트 (Prompt) 란 무엇인가?

정의

What is Prompt Engineering?
What is Prompt Engineering?. Why should every Business Analyst… | by Shashika Manoj Nanayakkara


프롬프트는 누군가의 특정한 작업 수행을 도우려 전달하는 메시지라는 뜻이 있습니다. 연극이나 TV 프로그램에서 진행자의 행동이나 대사를 지시하는 것을 의미했습니다. 그 동안 우리 인간은 컴퓨터의 언어를 이해하고 그에 맞게 명령을 내리는 방법을 공부해 왔습니다. DOS 시절에 다양한 명령어가 그것이었고, 개발자들이 쓰는 각종 code가 그 예입니다.

컴퓨터 분야에서 프롬프트는 원하는 결과물을 얻기 위한 CLI(Command Line interface)와 같은 명령어입니다. 컴퓨터가 사람의 언어를 이해할 수 없기 때문에, 사전에 명령어를 정해놓으면 그에 따른 결과물을 출력하는 것이죠. 그러나 수많은 명령어와 옵션이 정해져있는 만큼, 컴퓨터가 사전에 정해놓은 결과만 제시할 수 있다는 단점이 있었습니다. 사람은 컴퓨터의 명령어를 외우고 익혀야만 제대로 된 명령을 할 수 있고, 컴퓨터는 그것에 한정된 결과 만을 출력하는 방식이었습니다.

최근에 Generative AI가 발전함에 따라, 컴퓨터는 드디어 ‘자연어’를 이해할 수 있게 되었습니다. 컴퓨터가 기존의 명령어가 아닌 인간의 언어를 이해할 수 있기 때문에 훨씬 더 자유롭고 다양한 결과물을 도출할 수 있게 된 것입니다. 사람의 언어로 이야기해도 컴퓨터가 이를 이해하고 명령을 수행할 수 있게 된거죠. 이제 프롬프트 (prompt) 라는 말은 생성형 모델에게 어떤 행동을 해야 하는지 자연어로 설명하고 원하는 결과물을 출력할 수 있도록 하는 방식으로 그 의미가 확장되고 있습니다.

프롬프트 엔지니어링, Prompt Engineering 이란?

최근 몇 년 동안 자연어 처리(NLP)의 발전으로 입력 프롬프트를 기반으로 사람과 유사한 텍스트를 생성할 수 있는 ChatGPT 및 GPT-4와 같은 강력한 언어 모델이 개발되었습니다. 생성형 AI가 사람의 말, 자연어를 알아들을 수 있게 되었지만 여전히 컴퓨터의 특성에 맞춰서 AI에게 input해야 하는 한계는 남아 있습니다. 프롬프트의 품질에 따라서 의도는 같지만 다르게 말하기 때문에 AI의 답변 내용을 달라지게 됩니다.

이것이 바로 프롬프트 엔지니어링이 필요한 이유입니다. 프롬프트를 신중하게 제작하고 최적화함으로써 LLM을 사용하여 보다 정확하고 관련성이 높으며 매력적인 텍스트를 생성할 수 있습니다. 데이터 사이언티스트, 콘텐츠 제작자 또는 자연어 처리의 기능을 탐색하는 데 관심이 있는 사람이라면 프롬프트 엔지니어링을 사용하는 방법을 배우면 목표를 달성하는 데 도움이 될 수 있습니다.

예를 들면, 아래 처럼 2가지 다른 질문 방법이 있다면 2번째 질문이 더 이해하기 쉬운 답변을 주게 됩니다.

첫번째 질문 유형
블랙홀에 대해서 설명해줘.
두번째 질문 유형
다음은 AI 연구 보조원과의 대화입니다.
보조원은 초등학생도 이해할 수 있는 수준으로 답변해야 합니다.
질문: 블랙홀 생성에 대해 설명해줄래?
AI:

이렇게 자연어 명령의 의도를 잘 파악하고 더 좋은 답변을 주기 위한 프롬프트의 구성을 만들어 가는 것을 프롬프트 엔지니어링, Prompt Engineering 이라고 합니다. 프롬프트 엔지니어링은 인공지능 분야의 한 개념으로 AI로부터 높은 수준의 결과물을 얻기 위해 적절한 프롬프트를 구성하는 작업입니다.

아무리 고도화된 Generative AI라고 해도, 인간의 의도와 목적을 완벽하게 파악할 수 있는 것은 아닙니다. 때로는 부적절하거나 오류가 있는 결과물을 생성하기도 하고, 인간의 창의성이나 감성을 완전히 대체할 수는 없습니다. 그렇기 때문에 생성형 AI를 제대로 활용하기 위해서는 인간의 감독과 조정이 필요합니다. 최근에는 프롬프트 엔지니어라는 새로운 직군이 나타났으며 그들의 가치도 급상승하고 있습니다. AI를 이용하기 위해 프롬프트를 탐색하고 설계하여 개발하는 과정이 그 만큼 중요해진 시대 상황을 잘 보여주고 있습니다.

프롬프트 (Prompt) 예시

생성 AI는 내가 원하는 것을 AI가 뚝딱 만들어 줄 것이라는 기대감을 키워주었습니다. 하지만 실제로 사용해 보면 실망하게 되는 경우가 많습니다. Prompt에 대한 지식이 필요한 이유입니다. 자연어로 명령할 수 있는 시대이지만, 컴퓨터에게 말하는 방식을 배워야 하는 수고는 남아 있다고 할 수 있습니다.

prompt template in PromptBase
PromptBase에서 유료로 판매되는 prompt template

다양한 생성 AI를 사용하는데 필요한 Prompt template 은 프롬프트 마켓을 비롯해 이미 인터넷에 다양하게 공개되어 있습니다. ChatGPT와 같은 언어 모델의 경우, Prompt Engineering Guide 라는 사이트를 통해 사용 방법을 익힐 수 있고, ChatGPT cheat sheet 처럼 ChatGPT에서 원하는 답변을 얻기 위해 명령을 내리는 방법이 잘 정리되어 있습니다.

ChatGPT cheat sheet
레딧에 공개된 ChatGPT cheat sheet

프롬프트 엔지니어링은 단순히 프롬프트를 설계하고 개발하는 것이 아닙니다. 프롬프트는 LLM과 상호작용하고 구축 및 이해하고, 개발하는 데에 중요한 기술이죠. 즉, 프롬프트 엔지니어링을 통해 LLM의 연관성을 개선하고 도메인 지식 및 외부 도구로 LLM을 확장하는 등 새로운 기능을 구축할 수 있다는 장점이 있습니다.

최근 잘 만들어진 프롬프트를 기반으로 모델이 개발됨에 따라, Zero-shot이나 few-shot, chain of thought (연속된 질문으로 더 좋은 답을 얻는 방법) 등 다양한 테크닉이 발전하고 있습니다. 구체적인 프롬프트 기술이 궁금하시다면 Prompt Engineering Guide 문서를 참고해 주세요.

좋은 프롬프트를 만드는 방법이란?

프롬프트의 구성요소

Components of an Effective Prompt
Components of an Effective Prompt

유효한 프롬프트에는 다음 구성 요소가 포함되어야 합니다.

  • Context: 프롬프트의 단계를 설정하고 LLM이 해야 할 작업을 이해하는 데 필요한 배경 정보를 제공합니다. 예를 들어 문제에 대한 간단한 설명이나 관련 정보의 요약을 제공할 수 있죠.
  • Task: 프롬프트의 구체적인 목표 또는 목표를 정의하는 내용을 의미합니다. 명확하게 정의되고 간결해야 하며, LLM이 필요로 하는 구체적인 정보나 조치에 초점을 맞춰야 합니다.
  • Constraints: 프롬프트에 대한 경계 또는 제한을 제공합니다. 특정 요구 사항이나 응답의 길이 또는 복잡성에 대한 제한을 걸 수 있습니다.
  • Extra Information: 추가 컨텍스트 또는 출력 형식을 지정할 수 있습니다. 출력 형식 옵션에는 마크다운이나 JSON 또는 프로그래밍 언어 등이 있습니다.

좋은 프롬프트를 만드는 방법

본격적으로 좋은 프롬프트를 만드는 방법에 대해 구체적으로 알아보겠습니다.

명확하고 구체적인 지침 작성

ChatGPT와 같은 언어 모델을 사용하는 것은, 똑똑한 사회초년생 신입사원을 온보딩하는 것과 닮아있습니다. 즉, 명확하고 명시적인 지침만 있으면 더 높은 업무 효율을 낼 수 있다는 것입니다. OpenAI에서 공개한 ChatGPT의 사용자를 위한 프롬프트 가이드를 참조하면 더 많은 도움이 될 수 있습니다.

Briefly describe the problem or task at hand. [context]
Clearly define the specific goal or objective of the prompt.
[task]
Provide any relevant constraints or limitations for the prompt.
[constraints]
Include any additional information or prompts that may be useful for
the LLM to generate a relevant response.
[extra]

  • 컨텍스트 제공
    예를 들어, ChatGPT에게 이메일 초안 작성을 요청할 경우 모델에게 수신자와 사용자와의 관계, 작성자의 역할, 의도한 결과 및 기타 관련 세부 정보를 알려주면 훨씬 더 좋은 결과물을 도출할 수 있습니다.
  • 사용자 지정
    모델이 당면한 작업에 맞춰 특정 역할을 할당하면 해당 시나리오에 맞게 더 고도화된 결과물을 도출할 수 있습니다.
  • 구분 기호 사용
    구분 기호는 프롬프트 엔지니어링에서 중요한 도구로 사용되며, 더 큰 프롬프트 내에서 특정 텍스트 세그먼트를 구별하는 데에 도움이 됩니다. 구분 기호는 따옴표(""), 따옴표(""), 대시("-"), 대괄호(<>), XML 태그(</tag>) 또는 섹션 제목과 같은 다양한 형식을 사용하고 있습니다.
  • 구조화된 출력 요청
    출력 형식을 특정 요구 사항에 맞게 조정하면 사용자 환경이 크게 향상될 뿐만 아니라, 응용프로그램 개발자의 작업도 단순화할 수 있습니다. 필요에 따라 글머리 기호 목록이나 표, HTML, JSON 형식 등의 구조로 출력을 요청할 수 있습니다.
  • 사용자 입력의 유효성 검사
    모델이 응답을 생성하기 전에 입력에 오류가 있는지 확인해야 합니다. 예를 들어, 사용자가 너무 짧거나 긴 텍스트를 입력하면 모델이 응답을 생성하지 않습니다.
  • 사례/예제 제공
    성공적인 예제를 제공하면, 이를 통해 모델이 어떤 종류의 응답이 예상되는지 학습할 수 있습니다.

프롬프트는 생성형 모델에게 어떤 작업을 수행해야 하는지 알려주는 지침입니다. 명확하고 구체적인 지침을 작성하면 AI가 더 잘 이해하고 더 나은 결과를 생성할 수 있습니다. 예를 들어, "이메일을 작성해 주세요"라는 프롬프트는 너무 모호하죠. AI는 어떤 이메일을 작성해야 할지 알 수 없습니다. 반면 "이메일을 작성해 주세요. 이메일은 제 친구에게 보내고, 제 친구의 생일을 축하하는 내용이어야 합니다"라는 프롬프트는 더 명확하고 구체적이죠.

Chain of thought, 순차적 추론

모델은 성급하게 결론을 낼수록 추론 오류가 발생하기 쉽습니다. 최종 답변 전에 순차적 추론을 요구하도록 쿼리를 재구성하는 것 역시 프롬프트의 효율성을 향상시킬 수 있습니다. LLM이 단계별로 생각하고 문제를 해결하도록 유도하는 방법이 있습니다.

Language Models Perform Reasoning via Chain of Thought
Language Models Perform Reasoning via Chain of Thought – Google Research Blog

GPT-3에 의해 많이 사용되는 표준 프롬프트를 사용하면 모델에 input-output pair의 답변 예시를 제공한 후 답변을 주도록 요청받게 됩니다. (이미지 왼쪽). Chain of thought를 이용한 prompt (이미지 오른쪽)에서는 모델에게 중간 추론 단계를 출력하라는 메시지를 표시합니다. 

Chain of thought 이전에는 Fine tuning을 통해 이러한 답변이 가능했지만, 대규모 학습 데이터 세트나 언어 모델의 가중치를 수정할 필요 없이 프롬프트만으로 이러한 사고 과정을 유도할 수 있게 되었습니다.

프롬프트를 통해 환각 증상 극복하기

앞서 언급한 팁을 따라도 모델이 예상치 못한 결과를 만들어내는 경우가 있을 수 있습니다. 이는 Generative AI의 만성적 문제인 ‘환각’ 현상일 수도 있습니다. 이를 극복하기 위해 많은 기업에서 고군분투하고 있죠. 프롬프트를 통해 이 문제를 일부 극복할 수 있는 방법도 있습니다.

환각 증상에 의한 Overfitting 이란, 단일 관점에서 모델이 과도하게 집착하거나 부정확한 정보에 의존하는 경향을 의미합니다. 이럴 때 프롬프트를 통해 다양한 관점에서의 정보를 요청할 수 있습니다. 

예를 들어, 

  • “고객 검토를 분석하고 해당 제품의 장단점을 평가해 주세요” 라는 명령어 대신 
  • “고객검토를 프로젝트 관점에서 분석하고, 고객 만족도와 제품 품질에 대한 평가를 해 주세요” 

위 내용처럼 서로 다른 관점을 요청하는 것입니다. 모델이 제한된 관점에서 강한 편향성을 보이는 것을 방지하기 위해 프롬프트에서 다양한 측면을 고려하도록 요청하는 것입니다.

환각 증상을 극복하기 위해 모델에게 명확한 문맥을 제공하는 것도 중요합니다. 예를 들어, 이전 대화나 문장에서 언급한 정보를 프롬프트에 포함시켜 문맥을 설정할 수 있습니다. 이를 기반으로 모델은 문맥을 이해하고 일관된 응답을 생성할 수 있게 됩니다. 그러나 모델이 과도하게 완벽한 결과를 생성하고자 본의 아니게 ‘거짓말’을 하는 경우도 종종 발견되었습니다. 따라서 프롬프트에 잡음을 추가하여 보다 현실적인 결과를 생성하도록 유도할 수도 있죠. 

ChatGPT 프롬프트 템플릿

ChatGPT Prompt example
ChatGPT로 영어 그림 책 만들기


잘 만들어진 프롬프트는 다양한 상황에서 유용하게 사용할 수 있습니다. 예를 들어, 이 문서에서는 ChatGPT로 영어 그림책을 만드는 방법에 대해 설명하고 있습니다. 이 문서를 살펴보면, ChatGPT에게 영어 동화 작가라는 역할을 먼저 부여합니다. 이후 원하는 주제와 내용을 가지고 영어 동화책을 작성해달라고 요청하죠.

위 사례처럼 프롬프트를 이해하고, 제대로 사용할 수 있다면 생성형 AI를 200% 활용할 수 있습니다. 이 효과를 위해 유료 템플릿을 판매하고, 구매하는 사례도 많아졌죠.

프롬프트 엔지니어링 vs. 파인 튜닝

프롬프트 엔지니어링과 파인 튜닝 비교

Master Prompt Engineering: LLM Embedding and Fine-tuning
Master Prompt Engineering: LLM Embedding and Fine-tuning

파인 튜닝과 프롬프트 엔지니어링은 모두 사전 훈련된 언어 모델을 기반으로 특정 작업에 맞게 모델의 성능을 개선하는 방법입니다. 그러나 두 방식의 접근 방식과 사용 상황에 있어서 차이점이 있습니다.


  • 파인 튜닝(Fine-tuning):
    사전 훈련된 언어 모델의 가중치를 조정하여 특정 작업이나 도메인에 대한 성능을 개선하는 방법입니다.
    작업 특화를 위한 추가 데이터 세트 및 레이블을 사용합니다.
    이를 통해 기존 모델에 대한 변경 사항을 학습하며 모델의 성능을 개선하게 됩니다.
    파인 튜닝을 사용하면 각각 작업별로 전문화된 성능을 얻을 수 있습니다.
    일반적으로 다루기 어려운 도메인이나 복잡한 작업에 대한 성능 개선이 필한 경우 사용합니다.
  • 프롬프트 엔지니어링(Prompt Engineering):
    사전 훈련된 언어 모델 입력 인터페이스에 면밀한 변경을 가하여, 원하는 결과를 산출하는 것에 초점을 맞춥니다.
    입력 문장(프롬프트) 구조와 형식 등의 요소들로 조작해가며 최적화합니다.
    추가적인 학습 데이터가 필요하지 않으며, 주로 소비자들과 상호작용할 때 유용합니다.
    일반적으로 간단하거나 일상적인 질문-응답 상황에서 좋은 결과를 가져옵니다.

결론적으로, 파인 튜닝은 주로 복잡하고 전문화된 작업에서 좋은 성능 개선을 가져오는 반면, 프롬프트 엔지니링은 보다 간단하고 일상적인 상황에서 최소한의 리소스와 시간 소모로 원하는 결과를 산출하기 위해 사용할 수 있습니다.

Parameter-efficient fine-tuning (PEFT)

Unleashing the Potential of PEFT (Parameter efficient fine tuning) in training large language models
Unleashing the Potential of PEFT (Parameter efficient fine tuning) in training large language models | by Venkata sai santosh | Jul, 2023 | Medium

Parameter-efficient fine-tuning (PEFT)은 사전 훈련된 언어 모델을 특정 작업이나 상황에 적용할 때, 가중치의 일부만 업데이트하는 파인 튜닝 방법입니다. 이 방법의 목표는 모델의 성능을 유지하면서 파라미터의 개수를 줄여, 훈련 시간과 학습에 필요한 메모리 비용을 줄이는 것입니다.

PEFT는 각종 작업에 대한 공통 상위 계층에 있는 모델 구조만을 파인 튜닝하는 방식으로 사용됩니다. 이를 통해 학습된 모델 개선에 필요한 파라미터 업데이트를 최소화할 수 있습니다.

직접적으로 많은 파라미터 업데이트가 사용되지 않기 때문에, 이러한 접근 방식은 효율성과 작은 학습 데이터 세트의 활용 측면에서 장점이 있습니다. 전체 모델 대신 부분적으로 모델을 파인 튜닝함으로써, 학습 속도를 높이고, 자원 사용량을 줄이며, 적은 양의 데이터로도 효과적인 학습과 개선이 가능합니다.

PEFT는 수많은 딥러닝 프로젝트에 유용할 수 있으며, 특히 작은 데이터 세트와 제한된 컴퓨팅 리소스를 가진 환경에서 효과적인 방법입니다. 하지만 사용 사례에 따라 일반적인 파인 튜닝과의 성능 차이는 발생할 수 있으므로 주의해야 합니다.

Fine tuning 시 필요한 데이터 세트의 구조 및 유형

Introduction to Prompt Engineering
Introduction to Prompt Engineering

Fine tuning은 사전 훈련된 언어 모델을 기반으로 하여, 추가적인 학습 데이터셋을 사용하여 모델을 더욱 섬세하게 조정하는 과정입니다. 이를 통해 해당 도메인이나 애플리케이션에 대한 좋은 성능을 달성할 수 있습니다. 파인 튜닝에 필요한 데이터 세트의 구조가 올바르게 설정되면 모델이 더 높은 성능과 올바른 학습 결과를 유지할 수 있습니다.

LLM 모델이 도메인 특정 작업에 대해 높은 성능을 발휘할 수 있도록 충분한 양의 다양한 데이터가 있어야 합니다. 또한 입력과 출력 예시의 형식과 구조가 일관성을 유지하도록 구성해야 합니다. 이것은 모델이 예측 결과를 쉽게 이해하고 평가할 수 있도록 돕습니다. 데이터셋 내부에서 error나 noise 등 원치 않는 요소들은 제거되어야 하며, 정확한 레이블이 지정되어 있어야 합니다. 이를 통해 모델의 학습 과정에서 더욱 정확한 결과를 얻을 수 있습니다.

결론: 모델 구축 시 특성과 인프라, 데이터를 고려해 fine tuning 방식을 선택해야 합니다.

오늘날, 딥러닝 및 자연어 처리(NLP) 분야에서 언어 모델은 인공 지능(AI) 기반 애플리케이션의 핵심 구성 요소입니다. 이러한 모델 중 일부, 특히 대형 언어 모델(Large Language Models, 이하 LLM)은 전반적인 자연어 이해(NLU) 성능을 향상시키기 위한 엄청난 양의 데이터를 통해 사전 훈련되어 있습니다. 그렇지만 이러한 기본 모델은 개별 작업에 대한 성능 최적화나 특정 도메인에 대한 고려 사항을 갖지 못한 상태로 제공됩니다.

  • LLM은 일반적으로 거대한 양의 데이터를 통해 사전 훈련되지만, 특정 작업이나 도메인과 관련된 세부 사항에 대해서는 약한 성능을 나타낼 수 있습니다. Fine tuning과 Prompt tuning은 이러한 문제를 해결하고 모델의 성능을 개선하는데 중요한 역할을 합니다.
  • 특정 도메인에 대한 지식을 포함하는 데이터를 통해 이러한 기술을 활용하면, 선택한 도메인에 대한 더 나은 이해와 결과를 달성할 수 있습니다. 이는 효과적인 솔루션을 만들기 위한 핵심 요소로 작용합니다.
  • 적절한 미세 조정 또는 프롬프트 튜닝을 사용하면, 우수한 결과를 얻으면서도 모델의 크기와 연산 단계를 줄일 수 있습니다. 이로 인해 자원을 절약하고 모델의 배포 과정이 간소화됩니다.

그러나 LLM 훈련 전에 모델의 속성에 대해 충분히 이해하고, 어떤 방법을 선택할 지 결정해야 합니다. LLM 훈련 및 조정 전에 고려해야 할 몇 가지 사항을 소개합니다.

  1. 개발자는 작업 및 도메인과 가장 적합한 LLM을 선택해야 합니다. 작업 성능, 모델 크기, 학습/추론 속도 등을 고려하여 적합한 모델을 결정하세요. 예를 들어, 소프트웨어 플랫폼 예제에서 코드와 문서가 오픈소스인지 여부를 고려해야 합니다.
  2. 조직이 머신러닝 엔지니어링과 관련된, 혹은 인프라를 관리할 수 있는 전문 지식과 인력을 보유하고 있는지 검토해야 합니다.
  3. 모델 조정을 위한 전문 지식이나 예산이 없을 경우, 비용이 많이 들지만 프롬프트 엔지니어링을 통해 모델을 조정하는 것이 더 나을 수 있습니다.

미세 조정과 프롬프트 튜닝의 사용은 경우에 따라 다양한 결과를 가져옵니다. 그러므로 목적과 도메인에 따라 적절한 접근 방식을 선택해야 합니다. 이러한 기술을 통해 기본 모델을 튜닝함으로써 성공적인 AI 솔루션을 만들 수 있을 것입니다.

Reference.

  1. AI 프롬프트와 프롬프트 엔지니어링 | 정의와 예시 - 코드스테이츠 공식 블로그
  2. 프롬프트 엔지니어 | 정의, 하는 일, 필요 역량과 전망
  3. Why is it important for using LLMs effectively? | MLExpert - Crush Your Machine Learning interview
  4. Prompt Engineering Guide
  5. Prompt Structure | MLExpert - Crush Your Machine Learning interview
  6. 10 Essential Prompt Engineering Methods For Successful ChatGPT & LLM Applications
  7. Quickstart tutorial - OpenAI API
  8. Fine Tuning vs. Prompt Engineering Large Language Models

Talk to Expert