The Art of Prompt Engneering — 1. Prompt Engineering이란 무엇인가?

daewoo kim
9 min readApr 26, 2023

--

프롬프트는 LLM(Large Language Model)가 출력을 생성하기 위한 시작점으로 LLM과 상호 작용하는데 필수적이다. 프롬프트의 품질과 명확성은 LLM 모델이 생성하는 출력에 큰 영향을 미치므로 사용자의 의도와 원하는 결과를 효과적으로 표현하는 프롬프트를 만드는 것이 중요하다. 이와 같은 프롬프트를 만드는 프롬프트 엔지니어링을 상세하게 살펴보기 위해 몇 차례에 걸쳐 프롬프트 엔지니어링에 대한 글을 시리즈로 연재할 예정이다.

The Art of Prompt Engneering — 1. Prompt Engineering 이란 무엇인가?

최근 골드만 삭스가 29일 AI가 정규직 일자리 3억 개를 대체할 수 있다라는 내용을 보고서로 발표하였다. AI가 미국과 유럽의 일자리 1/4을 대체할 수도 있으나, 반면 새로운 일자리가 창출되고 생산성이 향상될 것이라는 분석이다.

기술의 변화는 단기적으로 기존의 일자리를 기계나 신기술로 대체하는 반면, 장기적으로 생산성을 증가시켜 이전에 인간이 할 수 없었던 일들을 할 수 있게 함으로써 새로운 일자리를 만들었으며 기존에 없었던 새로운 업종을 창출하였다.

이와 같은 사례 중의 하나로 최근 구글이 투자하여 유명해진 스타트업인 Anthropic이 Prompt Engineer 채용 공고가 화제가 되고 있다.

Anthropic이 채용하는 Prompt Engineer의 연봉(captured by author)

프롬프트 엔지니어에게 제시한 연봉은 $280K~375K이다. 채용 직급이 나와 있지 않아 채용 직급에 제한이 있는지 모르겠지만 senior 급 엔지니어라고 해도 꽤 고연봉인 것을 알 수 있다.

아래 Job descripton을 명시된 내용을 보면, 프롬프트 엔지니어로 채용되었을 때 고객에 필요한 프롬프트 또는 프롬프트 체인 라이브러리 구축부터 고객에게 프롬프트 엔지니어링 기술을 가르치는 튜토리얼과 대화형 도구를 구축하는 업무를 수행하게 된다.

Anthropic의 Prompt Engineer의 job descriptions (captured by author)

Prompt란 무엇인가?

프롬프트는 사용자가 원하는 출력을 생성하고자 할 때 LLM을 안내하기 위해 특정 입력 텍스트 및 질문 텍스트이다. 예를들어 긴 기사를 요약하고 싶다면 LLM에 “Summarize the above in one sentence”와 같은 프롬프트와 기사 텍스트를 입력할 수 있다.

하지만 ChatGPT와 같은 생성 AI를 사용한 경험이 있다면 자신의 프롬프트에 대해 생성 AI가 제대로 답을 하지 못하는 경우를 봤을 것이다. 따라서 우리가 생성 AI의 기반인 LLM의 잠재력을 이끌어내려면 효과적인 프롬프트 작성이 필요하다.

Prompt Engineering이 필요한 이유

프롬프트 엔지니어링의 주요 목표는 사용자의 의도와 원하는 결과를 전달하는 프롬프트를 만들어 모델의 성능, 정확성, 유용성을 극대화하는 것이다. 프롬프트 엔지니어링이 필요한 이유는 현재 LLM의 동작 방식의 한계와 인간과 컴퓨터의 상호 작용을 위해 자연어를 사용하고 있기 때문이다.

1.Auto-Regression LLM의 한계

LLM은 단어의 순서를 비롯한 프롬프트의 작은 변화에 따라 응답의 품질이 상당히 다를 수 있다. LLM은 명령(Instruction)과 예제(Example)의 미묘한 패턴을 감지하여 답변을 조정한다. 따라서 LLM 의 답변 결과는 프롬프트(i.e. 프롬프트에 포함된 특정 명령뿐만 아니라 단어의 선택, 단어의 순서)에 따라 민감하게 달라질 수 있다.

대표적인 LLM인 GPT 모델이 Auto-Regression 모델임을 기억하라. Auto-Regression LLM은 이전 단어를 보고 가장 높은 확률의 단어를 다음 단어로 예측하므로 단어의 순서에 따라 얼마든지 다른 답변을 출력할 수 있다.

2.인간-컴퓨터간의 인터페이스로 자연어 사용

컴퓨터가 발명된 이후, 컴퓨터의 프로세서에서 실행되는 기계어를 인간이 직접 프로그래밍하는 것을 시작으로 인간과 컴퓨터간 인터페이스는 컴퓨터의 구조를 잘 알지 못하여도 쉽게 프로그래밍할 수 있도록 고급 프로그래밍 언어의 형태로 점점 더 발전되어 왔다. 결국 우리가 현재 사용하는 GUI 등은 쉽고 직관적인 인터페이스를 제공하기 위한 결과이다.

하지만 인간에게는 자연어를 능가하는 사용자 인터페이스는 없다. 반대로 컴퓨터에게 자연어만큼 불친절한 인터페이스는 없다. 자연어는 매우 모호하고, 부정확하고, Context에 매우 의존적이며, 사람마다 해석이 다를 수 있다.

Andrej Karpathy’s twitter
Prompt Engineering과 LLM(Foundation Model)과의 관계 (image by author)

3.LLM은 주위 환경의 Context를 이해하는데 한계를 갖음

현재의 LLM은 사람과 달리 장기 기억을 갖지 못하고 다양한 감각 기관의 도움을 받을 수 없기 때문에 자기 주위의 컨텍스트를 이해할 수 없다. (LLM에게 개떡같이 말해도 찰떡같이 알아듣는 것을 기대해서는 안 된다.)

프롬프트 엔지니어링은 자연어의 복잡성과 다양성을 유지하면서 AI 시스템을 명확하게 프로그래밍할 수 있는 방법을 제공한다. 하지만 프롬프트 엔지니어링에도 단점이 있다. 예를 들어 LLM으로부터 원하는 답변을 유도하는 것은 내부가 어떻게 동작하는지 알지 못하는 블랙 박스를 제어하는 것과 유사하기 때문에 원하는 답변을 얻기 위한 프롬프트를 만드는데 많은 시간이 필요하다.

Prompt Engineering vs Prompt Tuning

프롬프트 엔지니어링과 프롬프트 튜닝은 AI 성능과 출력을 최적화하기 위한 보완적 접근 방식으로 두 방식 모두 사용자와 AI 간 상호 작용을 개선하는데 중점을 두고 있다. 하지만 두 방식은 다음과 같이 구체적인 목표와 기술이 다르다.

프롬프트 엔지니어링

프롬프트 엔지니어링은 Pre-training된 LLM을 별도의 학습없이 사용자가 원하는 답변을 생성하도록 입력 프롬프트를 효과적으로 설계하는 기술이다. 사용자가 입력 프롬프트를 설계하기 위해선 해당 LLM의 강점과 약점(e.g. 컨텍스트 인지, 수치 연산)에 대한 깊은 이해가 필요하다.

사용자는 컨텍스트를 추가하고 사용자의 기대치를 명확히 제시하고 LLM의 답변을 기반으로 프롬프트를 반복적으로 개선하여 LLM가 더 정확하고 관련성 높은 답변을 생성하도록 안내해야 한다.

프롬프트 튜닝

프롬프트 튜닝은 말 그대로 LLM 자체를 fine-tuning하는 기술로, 주어진 입력 프롬프트에 대해 원하는 답변을 생성하는 LLM을 만드는 것을 목표로 한다. 프롬프트 튜닝을 통해 LLM은 내부 표현에 대한 미묘한 조정을 배우며 LLM을 광범위하게 재학습하거나 수정하지 않고도 특정 작업이나 프롬프트을 더 잘 수행할 수 있다. 제한된 데이터를 가진 회사는 LLM을 협소한 태스크에 맞게 튜닝할 수 있다.

프롬프트 튜닝은 입력 프롬프트와 해당 프롬프트에 대해 사용자가 원하는 출력을 포함하는 특수 데이터셋으로 LLM을 fine-tuning 함으로써 모델의 동작을 최적화하고 향후 유사한 프롬프트를 처리하는 능력을 향상시킬 수 있다.

Model Tuning vs Prompt Tuning (source: The Power of Scale for Parameter-Efficient Prompt Tuning)

프롬프트 튜닝과 fine-tuning 과정을 비교하면 프롬프트 튜닝을 좀 더 쉽게 알 수 있다. Fine-tuning은 Pre-training된 모델을 각 task A, B, C에 해당하는 데이터셋을 이용하여 학습하는 것으로 모델의 weight가 변경된다. 반면 프롬프트 튜닝은 Pre-training된 모델의 weight를 변경하지 않고 모델에 입력되는 프롬프트에 해당하는 weight만을 학습한다. 모델 weight 보다 프롬프트 weight가 훨씬 더 작기 때문에 fine-tuning보다 프롬프트 튜닝의 학습 시간이 빠른 장점이 있다.

프롬프트 엔지니어링과 프롬프트 튜닝의 장단점

프롬프트 튜닝과 프롬프트 엔지니어링의 주요 차이점은 프롬프트 튜닝이 더 자동화된다는 것이다. 프롬프트 튜닝을 사용하면 사용자가 프롬프트를 제공하기만 하면 LLM이 나머지 작업을 수행한다. 프롬프트 엔지니어링을 사용하면 사용자가 직접 프롬프트를 설계해야 하므로 더 많은 시간이 소요될 수 있다.

두 방식의 장단점은 다음과 같다.

프롬프트 엔지니어링

  • 장점: 프롬프트 엔지니어링은 출력을 더 많이 제어할 수 있기 때문에 프롬프트 튜닝보다 좀더 효과적이다. 또한 LLM을 원하는 출력으로 안내하도록 프롬프트를 신중하게 만들 수 있다.
  • 단점: 프롬프트 엔지니어링은 사람의 입력이 더 많이 필요하기 때문에 프롬프트 튜닝보다 더 많은 시간이 소요된다. 프롬프트는 신중하게 작성해야 하며 효과적인 프롬프트를 찾기 위해 시행 착오가 필요하다.

프롬프트 튜닝

  • 장점: 프롬프트 튜닝은 더 자동화되어 있기 때문에 프롬프트 엔지니어링보다 빠르고 쉽다. 프롬프트는 모델에 의해 자동으로 생성되며 사람의 입력이 필요하지 않는다.
  • 단점: 프롬프트 튜닝은 출력에 대한 많은 제어를 허용하지 않기 때문에 프롬프트 엔지니어링보다 덜 효과적이다. 프롬프트는 모델에 의해 생성되며 사람이 세심하게 만든 프롬프트만큼 효과적이지 않을 수 있다.
Model-Tuning vs Prompt Tuning vs Prompt Engineering (source: Guiding Frozen Language Models with Learned Soft Prompts)

레퍼런스

[1] Prompting Guide

[2] Guiding Frozen Language Models with Learned Soft Prompts

[3] The Power of Scale for Parameter-Efficient Prompt Tuning

[4] Introduction to Prompt Tuning

[5] Prompting: Getting AI to do what you want

--

--

daewoo kim

AI developer & Author | Working@semiconductor-industry. I write and share about what I learn.