[LLM] Prompt Engineering

·2024년 3월 29일
0

Prompt와 Prompt Template

Prompt : LLM에게 지시하는 명령을 의미한다.
Prompt Template : 이 명령의 구성을 담당한다. 고정적으로 사용할 텍스트와 사용자의 입력에 따라 바뀔 변수로 템플릿을 구성한다.

프롬프트 템플릿은 크게 2가지가 존재한다.

  1. Prompt Template

    • 일반적인 프롬프트 템플릿을 생성할 때 활용한다.
  2. Chat Prompt Template

    • 채팅 LLM에 프롬프트를 전달하는 데에 활용할 수 있는 특화 프롬프트 템플릿이다.
    • ChatPromptTemplate에는 아래 세 가지 Template을 활용할 수 있다.
      • SystemMessagePromptTemplate : 특정 역할 부여 가능
      • AIMessagePromptTemplate : AI의 답변
      • HumanMessagePromptTemplate : 사용자의 메시지

Few-shot Learning

딥러닝 모델이 결과물을 출력할 때 예시 결과물을 제시함으로써 원하는 결과물로 유도하는 방법론이다.

LLM 역시, Few-shot 예제를 제공하면 예제와 유사한 형태의 결과물을 출력한다.

내가 원하는 결과물의 형태가 특수하거나, 구조화된 답변을 원할 경우, 결과물의 예시를 수 개 제시함으로써 결과물의 품질을 향상시킬 수 있다.

Example Selector를 이용한 동적 Few-shot Learning

Few-shot 예제를 동적으로 입력하고 싶은 경우, Example Selector를 활용할 수 있다.

LLM이 여러 작업을 수행하도록 만들되 내가 원하는 범위의 대답을 출력하도록 하려면 사용자의 입력에 동적으로 반응해야 한다. 이와 동시에, 예제를 모두 학습시키는 것이 아니라 적절한 예시만 포함하도록 함으로써 입력 Prompt의 길이를 제한하고, 이를 통해 오류가 발생하지 않도록 조절할 수 있다.

SemanticSimilarityExampleSelector : 사용자가 입력한 것과 Example의 유사도를 판단해 사용자의 입력과 가장 유사한 예시를 가져온다.

Output Parser를 활용한 출력값 조정

LLM의 답변을 내가 원하는 형태로 고정하고 싶을 때 사용 가능하다.
리스트, JSON 형태 등 다양한 형식의 답변을 고정하여 출력할 수 있다.

Prompt Engineering

LLM의 매개변수를 조정하면서 원하는 출력을 이끌어낼 수도 있지만, 명령 자체를 '잘'하면 충분히 만족스러운 결과를 도출할 수 있다.

Prompt Engineer : Pre-training된 LLM을 별도의 학습없이 사용자가 원하는 답변을 생성하도록 입력 프롬프트를 효과적으로 설계하는 기술이다.

LLM 매개변수를 조정한 예
temperature : 답변의 일관성 조절 (0~2로 설정 가능)

  • 0 : 일관성있게 답변 → 신뢰성이 중요한 답변
  • 2 : 같은 질문에 대해서도 랜덤하게, 다양하게 답변 → 창의적인 답변 e.g. 시, 가사 작사

ChatGPT 프롬프트 엔지니어링의 본질과 원리

문제 이해시키기

  • 내가 해결하고자 하는 문제를 챗GPT에게 명확하게 이해시킨다.

전문성 끌어내기

  • 가장 잘 해결할 수 있는 전문성을 챗GPT에게 지정해준다.
  • 챗GPT가 전문가의 업무 절차를 모방해 단계적으로 일을 수행하도록 한다.

성공적인 결과 유도

  • 성공적인 결과의 형식과 구성을 챗GPT에게 알려준다.

구체적인 프롬프트를 구성하기 위한 6가지 구성요소

  1. 명령(task)
  • 명령어는 반드시 포함해야한다.
  • 서술어로 명료하게 기술한다. (ex. 작성해줘. 요약해줘.)
  • 질 좋고 자세한 답변을 원한다면, 하나의 프롬프트에 한 개의 Task만 쓰는 것이 좋다.
  1. 맥락(context)
  • 어떤 상황/배경에 처해있는지?
  • 의도와 목표는 무엇인지?
  • 우려되는 점은 무엇인지?
  • 고려해야할 제약사항/규칙은 어떤 것이 있는지?
  1. 페르소나(persona)
  • 해당 문제를 가장 잘 해결할 수 있는 사람/역할/직무로 Role Play를 해보자.
  • 구체적인 전문가 명칭일수록, 전문 용어를 포함할수록 더 전문적인 답변이 나온다.
  1. 예시(example)
  • 의외로 향상 체감이 된다.
  • 맥락에 잘 맞는 예시를 주는 것이 중요하다.
  • 예시가 길지 않다면 2개 이상을 주는 것도 좋다. (Few-shot)
  1. 포맷(format)
  • 결과물의 형식이나 분량을 구체적으로 지정
  • 결과물의 내용 구성이나 아웃라인을 제공
  1. 어조(tone)
  • 형용사를 사용하자. (ex. 간결하게, 친근하게)
  • 예시를 제공해서 어조를 모방하게 할 수 있다.

[참고자료]

ChatGPT를 비롯한 대화형 AI 서비스에서 더 좋은 결과물을 얻게 해주는 프롬프트 엔지니어링
[LangChain] Prompt Template 사용 방법 정리
진짜 실무에 써먹는 챗GPT 프롬프트 엔지니어링의 원리

0개의 댓글

관련 채용 정보