About Prompt Engineering : 1.소개

소개

ChatGPT, 구글의 바드 등 생성형 AI의 등장으로 하루가 다르게 변해가고 있습니다. 이런 환경에서 경쟁 우위를 지니기 위해서는 빠른 대응이 필수적으로 요구되는데요, 변화를 위기보다는 기회로 여기고 변화에 맞춰 신속하고 적절하게 반응하는 것이 중요합니다. 따라서 생성형AI를 통해 경쟁 우위를 가지는 방법중 하나인 ‘프롬프트 엔지니어링’을 소개하고자 합니다.

프롬프트 엔지니어링은 다양한 응용 프로그램 및 연구 주제에 대해 언어 모델(LM)을 효율적으로 사용하기 위한 프롬프트를 개발하고 최적화하기 위한 비교적 새로운 분야입니다. 프롬프트 엔지니어링 기술은 대형언어모델(LLM : Large Language Models)의 기능과 한계를 이해하는데 도움을 줄 수 있습니다.

프롬프트 엔지니어링은 단순히 프롬프트를 설계하고 개발하는 것이 아닙니다. LLM과 상호 작용하고 개발하는 데 유용한 광범위한 기술과 기술을 포함합니다.이것은 LLM의 기능을 연결하고, 구축하고, 이해하는 중요한 기술입니다. 프롬프트 엔지니어링을 사용하여 LLM의 안전성을 개선하고 도메인 지식 및 외부 도구를 사용하여 LLM을 보강하는 것과 같은 새로운 기능을 구축할 수 있습니다.

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

프롬프트는 AI를 작동시키기 위해 사용자가 언어 모델에 입력하는 모든 것이라고 할 수 있습니다. 최근 생성형 AI 모델이 발전하고 이를 활용한 서비스가 등장하면서 컴퓨터는 기존의 명령어가 아닌 자연어, 즉 인간의 언어 그대로를 입력받을 수 있게 되었습니다. 컴퓨터가 인간의 언어를 그대로 이해하고 명령을 수행하기 때문에 사용자는 기존 시스템보다 훨씬 자유롭고 다양한 결과물을 바랄 수 있게 되었죠. 이처럼 생성형 AI에게 어떤 행동을 해야 하는지 자연어로 설명해 원하는 결과물을 출력할 수 있게 하는 입력값을 프롬프트(Prompt)라고 합니다.

생성형 AI는 동일한 질문에 정해진 답변을 하는 것이 아닌 학습한 데이터를 기반으로 매번 새로운 답변을 내놓습니다. 내가 원하는 구조의 답변을 얻는데 성공했어도, 동일한 프롬프트를 몇 번 더 입력해 보면 다른 형태의 답변을 주는 경우가 발생하기도 하죠. 매번 원하는 구조로 답변을 얻어낼 수 있을 때까지 프롬프트를 수정하는 과정이 필요합니다. 원하는 답변의 구조가 단순하다면 어려운 일은 아니지만, 원하는 구조가 복잡하다면 AI가 원하는 답을 할 수 있도록 많은 시행착오를 겪어야 합니다.

결국 AI 모델의 성능을 최대한 끌어올리고 원하는 결과물을 만들기 위해서는 프롬프트를 잘 만들어주는 것이 필요합니다. 생성형 AI는 완벽하게 인간의 의도와 목적을 파악하고 반영할 수 있는 것은 아니며, 때로는 부적절하거나 오류가 있는 결과물을 생성하기 때문에 인간의 감성이나 창의성을 완전히 대체할 수는 없습니다. 결국 생성형 AI를 효과적으로 활용하기 위해서는 인간의 감독과 조정이 필요합니다. 이러한 업무, 즉 프롬프트를 탐색하고 설계하여 개발하는 것이 프롬프트 엔지니어링이라 할 수 있습니다.

ChatGPT 뿐만 아니라 마이크로 소프트의 Bing 챗이나 구글의 Bard와 같은 text-to-text 서비스나 Stable Diffusion, DALL-E, Midjourneyc처럼 text-to-image 서비스를 이용해 결과물을 출력하는 것 모두 프롬프트 엔지니어링이라고 할 수 있습니다.

기초 프롬프트

우리는 간단한 프롬프트를 통해 많은 것을 얻을 수 있지만 그에 따른 결과의 품질은 제공하는 정보의 양과 잘 만들어진 정보의 양에 따라 달라집니다.

프롬프트에는 모델에 전달하는 지침이나 질문과 같은 정보가 포함될 수 있으며 컨텍스트, 입력 또는 예제와 같은 기타 세부 정보가 포함될 수 있죠 (A prompt can contain information like the instruction or question you are passing to the model and include other details such as context , inputs , or examples.)

위와 같은 요소를 이용하여 더 잘 지시하고 더 나은 결과를 얻을 수 있는데, 간단한 프롬프트의 기본 예를 살펴봅시다.

Untitled

보시다시피, 언어 모델은 문맥이 주어졌을 때 의미가 있는 문자열의 연속을 출력합니다 "하늘은" 에 대한 출력이 예기치 않거나 수행하려는 작업과 거리가 있을 수 있죠.

좀 더 개선해봅시다

Untitled

결과가 훨씬 더 좋게 보입니다. 모델이 지시한대로 잘 수행했으니까요. 모델에게 문장을 완성하라고 한 지시에 따른 것 뿐입니다. 모델에게 작업을 수행하도록 지시하기 위해 최적의 프롬프트를 설계하는 이러한 접근 방식을 프롬프트 엔지니어링이라고 합니다. 또한 이 예제에서 구체적으로 무엇을 달성하고자 하는지에 대해 더 많은 컨텍스트 또는 지침을 제공해야 할 필요성을 알 수 있겠습니다.

예제가 별루인것같기도 하구…

reference