@senspond

>

빅데이터/AI 🍎>프롬프트 엔지니어링 / LLM

프롬프트(prompt)란 무엇인가? 프롬프트 구성요소, 프롬프트 엔지니어링 개요

등록일시 : 2023-09-07 (목) 08:15
업데이트 : 2024-01-04 (목) 02:20
오늘 조회수 : 7
총 조회수 : 699

    프롬프트(prompt)란 무엇이고, 프롬프트의 구성요소, 그리고 프롬프트 엔지니어링에 대해서 정리해봅니다



    프롬프트란 ?

    본래 프롬프트는 컴퓨터에서 명령어 입력을 위한 인터페이스입니다. 컴퓨터 분야에서 프롬프트는 원하는 결과물을 얻기 위한 CLI(Command Line interface)와 같은 명령어를 의미하였습니다.

    그러나 최근에 생성형 AI가 발전함에 따라, 컴퓨터는 사람이 평소에 사용하는 '자연어'를 인식할 수 있게 되었고 현재 프롬프트(prompt) 라는 말은 생성형 모델에게 어떤 행동을 해야 하는지 자연어로 설명하고 결과물을 출력할 수 있도록 하는 방식으로 그 의미가 확장되고 있습니다.


    프롬프트 구성 요소

    크게 프롬프트의 구성요소를 살펴보자면 4가지로 분류할 수 있습니다. 하지만 네 가지 요소가 모두 반드시 필수적으로 필요하지는 않으며 프롬프트의 구성은 당면한 작업에 따라 다릅니다.

    Instruction (지시어)

    LLM 모델이 수행하기를 원하는 구체적인 목표 또는 목표를 정의하는 내용을 의미합니다.

    Context (문맥)

    LLM이 해야 할 작업을 이해하는 데 필요한 배경 정보를 제공합니다. 예를 들어 문제에 대한 간단한 설명이나 관련 정보의 요약을 제공할 수 있습니다.

    Input Data (입력데이터)

    응답을 구하고자 하는 것에 대한 입력 데이터를 의미합니다. 예를 들어, 특정 문장을 주어지고 그 문장에 대한 감정 분류를 요청한다면 해당 문장이 입력데이터가 됩니다. 프롬프트 구성에 따라 입력데이터가 없을 수 도 있습니다. 일부 LLM 모델은 텍스트 뿐만 아니라 이미지 같은 데이터도 입력받을 수 있습니다.

    Output Indicator (출력 표시기)

    결과물의 유형 또는 출력 형식(format)을 지정할 수 있습니다. 마크다운, JSON 형태 등으로 요청할 수도 있습니다. 또한 특정 요구 사항에 맞춰 응답의 길이 또는 복잡성에 대한 제한을 걸 수도 있습니다.



    프롬프트 작성 가이드

    실제 프롬프트는 매우 다양한 요소들이 결합되어 작성됩니다.


    아래는 GPT 깃허브에 소개되어 있는 예제에 따라 미치광이 역할을 부여하고 질문해보았습니다.



    프롬프트를 작성할때 사용자가 의도한대로 좀더 낳은 응답을 얻기위해 고려해볼 만한 것들을 정리해보자면,


    주제(Topic) 는 무엇이고 수행해야할 작업(Task)은 무엇인가?

    AI에게 물어볼 궁금한 주제가 무엇이고 어떤 작업을 시킬것 인지를 명확하고 간단명료하게 규정하는 일입니다. 수행해야할 작업이 난해하고 복잡할수록 AI 모델이 이해하기 어려울 수가 있기 때문입니다.


    어떤 역할(Role) 을 부여해야 하는가?

    답변자로써 페르소나를 지정. 답변에 대한 배경 지식을 가지고 답하기 때문에 더 높은 정확도로 답하게 됩니다.

    예시) 당신은 영어 선생님입니다. 영어의 문법에 대해 설명해주세요.


    청중(Audience)은 누구인가?

    답변의 대상이 되는 특정 인구, 그룹, 또는 개인의 페르소나

    예시) 일식 요리사를 위한 일본 전통요리 레시피를 작성해주세요.


    필요한 정책( Policy )은 무엇인가?

    응답을 만들때 따라야 하는 특정 정책이나 규칙


    Style : 응답에 사용해야 할 특정 톤,유머,감정 등의 스타일



    예시) 공손하고 정중한 말투로 사과 메일을 작성해주세요.


    Constraint : 응답이 따라야 하는 특정 제한 사항이나 조건



    예시 ) 3분 내로 읽을 수 있는 간략한 연설문을 만들어주세요.


    응답결과에 대한 예시(Examples)를 제공할 수 있는가?

    원하는 응답의 예시를 제공하여 원하는 출력을 더 잘 이해하도록 돕습니다.



    프롬프트 엔지니어링이란 ?

    프롬프트 엔지니어링은 생성형 AI 모델에게 제공되는 입력(prompt)을 세심하게 디자인하고, 모델의 반응을 가이드하여 원하는 결과를 얻을 수 있도록 하는 과정입니다. 프롬프트 엔지니어는 AI 모델의 내재된 지식을 최적화하고, 다양한 작업에 효율적으로 적용할 수 있도록 지원합니다. 이를 통해 생성형 AI가 다양한 분야에서 효율적이고 효과적인 결과물을 생성할 수 있게 됩니다.


    ChatGPT 를 사용해 보신분을 아시겠지만 생각보다 생성형 AI에게 사용자가 의도한 결과대로 항상 일정한 형식의 출력으로 응답을 만들어 내는것이 그리 쉽지 만은 않습니다. 한번씩 AI가 엉뚱한 대답을 내놓거나 의도하지 않은 결과를 보여줄 때가 있거든요. 프롬프트 엔지니어링은 AI 에게 어떻게 명령을 시켜야 원하는 결과를 얻을 수 있을지에 대해 연구하고 보다 효율적인 작업을 할 수 있는 도구들을 만들어 냅니다.


    프롬프트 엔지니어링은 파인튜닝과 무엇이 다른가?

    프롬프트 엔지니어링(Prompt Engineering)은 언어모델을 개발하는 것이 아닙니다.

    사전 훈련된 언어 모델에 프롬프트를 통해 원하는 결과를 얻어내는데 초점을 둡니다. 반면

    파인튜닝(Fine-tuning) 은 사전 훈련된 언어 모델의 가중치를 조정하여 특정 작업이나 도메인에 대한 성능을 개선하는 방법입니다.


    • 파인 튜닝(Fine-tuning): 사전 훈련된 언어 모델의 가중치를 조정하여 특정 작업이나 도메인에 대한 성능을 개선하는 방법입니다. 작업 특화를 위한 추가 데이터 세트 및 레이블을 사용합니다. 이를 통해 기존 모델에 대한 변경 사항을 학습하며 모델의 성능을 개선하게 됩니다. 파인 튜닝을 사용하면 각각 작업별로 전문화된 성능을 얻을 수 있습니다. 일반적으로 다루기 어려운 도메인이나 복잡한 작업에 대한 성능 개선이 필한 경우 사용합니다.


    • 프롬프트 엔지니어링(Prompt Engineering): 사전 훈련된 언어 모델 입력 인터페이스에 면밀한 변경을 가하여, 원하는 결과를 산출하는 것에 초점을 맞춥니다. 입력 문장(프롬프트) 구조와 형식 등의 요소들로 조작해가며 최적화합니다. 추가적인 학습 데이터가 필요하지 않으며, 주로 소비자들과 상호작용할 때 유용합니다. 일반적으로 간단하거나 일상적인 질문-응답 상황에서 좋은 결과를 가져옵니다.


    프롬프트 엔지니어링 기법

    • Zero-Shot Prompting

    • One-Shot Prompting

    • Few-Shot Prompting

    • Chain of Thought

    • Tree of Thought (ToT)

    • Zero Shot Chain of Thought

    • Self Consistency

    • Meta-Reasoning over Mulpitle Chains

    • Genereated Knowledge Prompting

    • Synthetic Prompting

    • MRKL

    • Self Refine

    • ReAct Prompting

    • Automatic Prompt Engineering

    등 다양한 기법들이 있으며 계속 해서 연구되고 있는 신생분야라고 할 수 있네요. 나열한 기법들 외에도 수많은 기법들이 계속 연구되고 나오고 있습니다. 이 중에서 생각의 사슬(Chain-of-Thought ) 이라는 기법에 대해 설명해보겠습니다.


    생각의 사슬(Chain-of-Thought )


    Chain-of-Thought Prompting Elicits Reasoning in Large Language Models 논문에 소개된 생각의 사슬(Chain of Thought) 라는 개념입니다. 2022년에 발표된 논문입니다.


    LLM 모델들에 문제의 인과 관계에 대해서 차근차근 풀어서 전개하다 보면, 정답에 더 잘 도달할 수 있다는 연구 결과입니다.

    이 개념을 적용해 프롬프트를 작성할때 ‘문제에 대한 즉각적인 답’을 요구하는 대신에 ‘문제-풀이-답’ 형태로 프롬프트를 구성하는 것이죠. 구현하고자 하는 요구사항에 대해 어떻게 수행해야하는지에 대해 단계별로 Task 를 수행하도록 하는 것입니다.


    정답만 내라고 하면 오답을 내버리는 ChatGPT ㅎㅎ



    이 결과를 달성하기 위한 Task 들은 1,2,3... 이런식의 작업들이 됩니다.


    논문 A Prompt Pattern Catalog to Enhance Prompt Engineering with ChatGPT 에서는 프롬프트의 구성이 소프트웨어 구성 패턴과 크게 차이가 없다고 말하고 있습니다. 결국 컴퓨터의 사고체계를 맞게 작성하는 것이 좋다는 애기입니다.



    첫번째 프롬프트에서 바로 즉각적인 답을 내놓으라고 했더니 오답을 내버렸죠? 하지만 생각의 사슬(Chain-of-Thought ) 기법으로 LLM 모델이 단계별로 생각할 여유를 주고 마지막에는 하나의 One-Shot 예시를 주며 본래 원하던 형태의 결론만을 얻어낼 수 있었습니다.


    LLM 모델의 대화 스타일 지정하기


    (OpenAI 플레이 그라운드)


    AI 모델의 대화 스타일을 조정할 수 있는 주요 값들의 설정입니다. LLM 모델의 API 를 사용하게 되면 매개변수로 이러한 값들을 줄 수가 있습니다.


    Temperature

    답변의 창의성과 무작위성을 조정하는 값입니다. 낮을 수록 (예: 0.05) 보다 사실에 근거한 정확한 답변을 제공하고, 높을 수록 (예: 1) 보다 창의적인 결과물을 생성해줍니다. 


    Top_p

    확률 질량을 가진 토큰의 결과를 고려합니다. 만약 0.1로 설정하면 상위 10% 확률 질량을 구성하는 토큰만 고려한다는 것을 의미합니다. Modern LLMs use (a variant of) top-p sampling (i.e. nucleus sampling introduced in this 2018 paper) for sampling the response


    현대적인 LLMS 은 2018년 핵샘플링이라는 논문에 소개된 top-p sampling 이라는 기법을 사용한다고 합니다.


    frequency_penalty

    값이 높을 수록 AI가 흔하지 않은 단어를 답변에 포함할 가능성을 제어합니다. 반대로 값이 0이라면 페널티가 전혀 주어지지 않아서 AI가 흔히 사용되지 않는 단어를 답변에 포함할 가능성이 높아지게 됩니다. 


    presence_penalty

    값이 높을 수록 AI가 유사하거나 동일한 단어 및 문구를 답변 시 반복할 가능성을 제어합니다. 이 또한 반대로 값이 0이라면 페널티가 전혀 주어지지 않아서 AI가 단어나 문구를 반복할 가능성이 높아지게 됩니다.


    Use Case 에 따른 Temperature 와 Top_p 설정값



    Use Case 에 따른 Temperature 와 Top_p 제시되는 값입니다. 글을 생성하는 것에는 Temperature 와 Top_p가 높은 값으로되어 있고 소스코드 생성이나 데이터분석에는 낮게 설정되어 있네요.


    참고 자료

    본 글은 아래 내용을 참고하여 작성되었습니다.

    senspond

    안녕하세요. Red, Green, Blue 가 만나 새로운 세상을 만들어 나가겠다는 이상을 가진 개발자의 개인공간입니다.

    댓글 ( 0 )

    카테고리내 관련 게시글

    현재글에서 작성자가 발행한 같은 카테고리내 이전, 다음 글들을 보여줍니다

    @senspond

    >

    빅데이터/AI 🍎>프롬프트 엔지니어링 / LLM

    • LangChain 이란 ? LangChain 으로 OpenAI의 GPT 모델 로드하여 사용해보기

      이번 글은 랭체인(LangChain)이 무엇인지 간단하게 정리해보고 OpenAI의 GPT 모델을 사용하여 LangChain을 시작하는 방법을 정리해보겠습니다.
        2024-01-03 (수) 09:35
      1. LangChain - Output Parser 로 LLM 응답결과를 변형하기

        이번 글은 파이썬기반의 LangChain 프레임워크에서 Output Parser 로 LLM 응답결과를 변형하는 방법에 대한 내용입니다.
          2024-01-03 (수) 10:27
        1. [현재글] 프롬프트(prompt)란 무엇인가? 프롬프트 구성요소, 프롬프트 엔지니어링 개요

          프롬프트(prompt)란 무엇이고, 프롬프트의 구성요소, 그리고 프롬프트 엔지니어링에 대해서 정리해봅니다
            2023-09-07 (목) 08:15