프롬프트와 프롬프트 엔지니어링

Intro

지난 장에서는 LLM이란 무엇인지. LLM의 특징이 무엇인지 알아보았습니다. 이번 장에서는 LLM과 소통하기 위한 프롬프트의 개념과 프롬프트를 설계하기위한 방법론들에 대하여 알아보도록 하겠습니다.

1. 프롬프트

프롬프트는 LLM모델과 유저간의 대화를 하는 창입니다. 유저는 프롬프트를 통해 AI모델과 대화를 하고 원하는 응답결과를 반환받습니다.

다만, 내가 작성하는 프롬프트의 설계방법에 따라 같은 내용을 질문하더라도 훨씬 높은 퀄리티의 응답결과를 얻어 낼 수 있습니다. 이번 장에서는 효율적인 응답결과를 얻어내기 위한 프롬프트 설계 방법과, 이론들에 대해서 배워보도록 하겠습니다.

1-1. 프롬프트의 기본 요소

1. 문맥(Context) : LLM모델이 올바른 응답을 생성할 수 있는 배경지식. 명확한 배경지식을 추가할 수록 환각현상을 방지할 수 있음.

2. 지시(Instructions) : LLM 모델이 수행할 작업. 명확한 지시내용을 작성해야 제대로된 응답을 받을 수 있음.

3. 입력 데이터(Input Data) : LLM이 응답에 참고할 데이터

4. 출력지시문(Output Indicator) : LLM의 응답 형식(JSON/Table/MarkDown/List...)

GPT Response

{

"탈중앙화": "비트코인은 은행이나 정부 같은 중앙 기관이 없이 작동해요. 모든 거래는 많은 사람들이 공유하는 네트워크에서 직접 이루어져요. 마치 친구끼리 돈을 주고받을 때 은행을 거치지 않는 것과 비슷해요.",

"한정된 공급량": "비트코인은 2,100만 개만 만들어질 수 있어요. 더 이상 추가로 만들 수 없기 때문에 금과 비슷하게 희소성이 있어요. 이 때문에 시간이 지나도 가치를 유지할 가능성이 높아요."

, "보안": "비트코인의 거래 기록은 블록체인이라는 특별한 장부에 저장돼요. 이 장부는 많은 사람들이 함께 관리하기 때문에 쉽게 조작할 수 없어요. 즉, 매우 안전하게 보호되는 시스템이에요." }

  • 프롬프트의 기본요소를 사용하는 것 만으로도 프롬프트의 퀄리티를 높일 수 있음.

1-2. 프롬프트 작성 팁

  1. 최신 버전의 모델을 사용한다.

    1. 최신 모델일수록 이전 버전의 모델에 비해 더 많은 양의 데이터를 학습한 것

    2. 단, 모델의 응답속도와 가격을 비교하여 합리적인 모델을 선택하는 것도 중요

  2. 모델이 해야할 내용을 명확하게 지시하자.

    1. 한국어를 사용하여 프롬프트를 작성할 때는 여러 의미로 해석될 수 있는 단어사용을 지양 한다.

    2. 쓰다 X 작성해 O

    3. 적다 X 나열해 O

  3. 단문 중심의 간결한 문장 사용

    1. LLM은 문장이 길고 복잡할 수록 핵심을 파악하지 못한다. 따라서 최대한 짧고 간결한 문장을 사용하는게 효과적이다.

    2. 질문하고자 하는 내용이 3가지가 있다면 이를 한번에 물어보지 말고, 한번에 1가지만 물어보는 것을 권장.(사람도 답변하기 힘들게 물어보지 말것)

    3. LLM이 해석하기 힘든 프롬프트 : (BAD)
      블록체인 기술이 어떻게 작동하는지 알고 싶고, 
      특히 비트코인과 이더리움의 차이점을 설명해 주면서, 
      그것이 금융 시스템에 어떤 영향을 미치는지 간단하게 정리해 줄 수 있어?
    4. LLM이 해석하기 쉬운 프롬프트 : (GOOD)
      1. 블록체인 기술의 작동 방식을 설명해 줘.
      2. 비트코인과 이더리움의 차이점을 알려줘.
      3. 블록체인이 금융 시스템에 미치는 영향을 간단히 정리해 줘.
  4. 하지말아야할것 보다 해야할 것을 지시한다.

    1. 'xxx는 하지마세요'와 같은 부정적 키워드 보단 'xx 하세요'와 같은 긍정적 키워드를 사용

    2. LLM은 부정정키워드도 때론 강조하여 표시할 때가 있음.

  5. LLM이 해석하기 쉬운 구조로 만들기

    1. Markdown, 파이썬 , xml tag를 활용하여 구조화

    2. # 제목1 (# == <h1>)
      ## 제목2 (## == <h2>)
      ### 제목3 (### == <h3>)

1-3. 간단 프롬프트 실습

프롬프트의 기본 요소를 포함하여 GPT에게 LLM의 특징에 대하여 질문하는 프롬프트를 설계하시오.

  • 조건 1 ) 문맥은 1장 LLM을 참고하여 작성할것

  • 조건 2) 입력데이터는 1장 LLM의 이해에서 LLM의 특징과 한계를 이용하여 작성할 것.

  • 조건 3) 응답데이터는 Table형식의 데이터로 응답 받을 것 EX) 표형식 데이터 | 특징 | 내용 | |------------------------------------------------| | 특징1 | 내용 | | 특징n | 내용 |

GPT Response


2. 프롬프트 엔지니어링(Prompot Engineering)

  • Prompt + Engineering의 합성어로 직역하면 프롬프트 공학, 프롬프트 제조 과정을 의미

프롬프트 엔지니어링이란 LLM모델을 통해 원하는 답변을 얻을 수 있도록 프롬프트를 최적화 하여 설계하는 기술을 의미합니다.

GPT와 같은 LLM을 사용했을 때 부정확한 답변을 응답 받는경우가 종종 있으셨을 겁니다. 이는 LLM이 학습한 데이터의 문제일 수도 있지만 대부분의 경우는 사용자의 요청내용(Prompt)이 응답데이터를 얻기에 부정확 했기 때문입니다.

2-1. 프롬프트 엔지니어링이 필요한 이유

GPT사용자들의 불만 사유(출처 : https://www.donga.com/news/Opinion/article/all/20240515/124949112/1 )

Gpt사용자들의 대응 방식(출처: 출처 : https://www.donga.com/news/Opinion/article/all/20240515/124949112/1)

제대로 설계되지 않은 프롬프트는 LLM에게 혼동을 초래하고 잘못된 응답을 반환할 가능성이 높습니다. 이를 방지하기 위해서는 적절히 설계된 프롬프트가 필요하고 이를 위해선 프롬프트 엔지니어링 기술이 필요합니다. 프롬프트 엔지니어링을 활용하면 다음과 같은 장점이 있습니다.

  1. LLM모델의 성능을 극대화하고, 출력 결과물을 제어하여 사용자에게 높은 만족도를 부여할 수 있다

  2. LLM이 문맥의 패턴을 더욱 정확하게 이해하여 환각현상 및 편향을 줄이고 관련성 높은 응답결과를 받을 수 있다.

  3. 효율적인 템플릿 설계로 모델비를 절약할 수 있음

  4. 수학과 같은 LLM이 못하는 기능을 강화할 수 있음.

2-2. 프롬프트 엔지니어

프롬프트를 정교하게 설계하는 기술을 전문적으로 다루는 직종을 프롬프트 엔지니어라고 부릅니다. 최근 국내에서도 프롬프트 엔지니어를 채용하는 회사가 증가하는 추세입니다. 프롬프트 엔지니어가 맡게될 업무는 다음과 같습니다.

Prompt Engineer 업무


  1. 프롬프트 엔지니어를 끝으로 흐름에 대한 마무리가 애매함. 프롬프트 엔지니어링의 중요성을 좀더 강조할것.

  2. 응답출력 XML, JSON형식으로 받기 실행 가능하도록 소스코드 추가

Last updated