[프롬프트 엔지니어링 - Part 1] 프롬프트 디자인으로 LLM 100% 활용하기
2024/07/30 | 작성자: 김수완, 박성민
(이 콘텐츠는 업스테이지가 제작한"모두를 위한 ChatGPT UP!" 강의의 두 번째 세션인 "나만의 AI 기술로 만드는 노하우, ChatGPT Deep Prompt Enineering & LangChain"의 일부 내용을 바탕으로 작성되었습니다.
대규모 언어 모델(LLM) 시대가 도래하면서 새롭게 등장한 직업이 있습니다. 바로 억 단위의 연봉으로 화제를 모은 프롬프트 엔지니어인데요. 프롬프트 엔지니어는 인공지능이 사용자가 원하는 결과를 생성할 수 있도록 알맞은 지시문이나 질문을 설계합니다. 최근에는 수요 또한 점차 늘어나고 있다고 하는데요.
그만큼 LLM의 성능을 100% 활용하기 위해서는 좋은 프롬프트를 사용하는 것이 무엇보다 중요합니다. 이 블로그에서는 SolarLLM을 활용하여 프롬프트 엔지니어링의 개념을 살펴보고 생성형 AI에서 효과적인 결과를 도출하는 방법에 대해 알아봅니다.
업스테이지의 Solar LLM은 자연스러운 텍스트를 생성하여 챗봇, 콘텐츠 제작 등 고품질의 콘텐츠가 필요한 모든 애플리케이션에 이상적인 모델입니다. 지금 업스테이지의 콘솔에 가입하여 Solar LLM과 함께 프롬프트 디자인의 세계를 경험해 보세요.
프롬프트 엔지니어링이란?
프롬프트는 LLM으로부터 사용자가 원하는 결과를 도출하기 위한Input으로, 쉽게 표현하자면 AI 모델에게 내리는지시사항이나 대화 시작의 물꼬라고 할 수 있습니다.
프롬프트 엔지니어링은 생성된 결과물의 품질을 높일 수 있는프롬프트 입력값들의 최적의 조합을 찾는 작업이라고 할 수 있습니다. 즉, 프롬프트 엔지니어링은 거대 언어 모델을 효율적으로 사용할 수 있도록 프롬프트를 개발하고 최적화 하는 방법을 연구하는 분야입니다. 프롬프트 엔지니어링은 LLM이 쿼리를 더 잘 이해하고 답변하도록 도와주는 역할을 합니다.
프롬프트 엔지니어링의 구성 요소
프롬프트는 크게 네 가지의 구성 요소로 이루어져 있습니다:
Instruction
LLM 모델이 수행하기를 원하는 구체적인 테스크에 대한 설명입니다.
Context
모델이 보다 나은 답변을 할 수 있도록 넣어주는 부가적인 정보를 의미합니다.
Input Data
답을 구하고자 하는 것에 대한 질문 또는 입력을 의미합니다.
Output Indicator
결과물의 유형 또는 형식을 나타내는 요소입니다.
위의 예시에서 사용자가 LLM에 페르소나(생성된 답변에 반영될 가상의 역할 또는 특정 캐릭터 특성)를 할당한 것을 살펴보면 프롬프트 엔지니어링의 구성 요소를 더욱 쉽게 이해할 수 있습니다. 위 예시에서 사용자는 LLM을'입사 지원 안내 봇' 으로 지정하였습니다. 이는 구성 요소 중 Instruction에 속합니다.
또한 프롬프트에는 LLM이 답변을 생성하는데 참고할 수 있는 데이터를 포함한 출력 지도 사항이 들어가야 효과적입니다. 이에 따라 사용자가 어떠한 데이터를 입력하면 인공지능이 결과를 출력하게 되는 것이죠.
프롬프트 디자인 가이드
본격적으로 프롬프트를 구성하기에 앞서, 효율적으로 프롬프트를 만들기 위해서는 어떤 지점들을 고려해야 하는지 알아봅시다.
1. 짧고 명료하게 적기
LLM의 능력을 효과적으로 활용하려면 지시문을 최대한 짧고 명료하게 입력하는 것이 중요합니다. 아래의 예시처럼 장황하게 설명을 늘어놓는 것보다는 핵심만 담아 구체적인 출력 지도 사항까지 입력한다면 더욱 명확한 답을 얻을 수 있습니다.
👎 올 여름 휴가는 어디로 가면 좋을까? 바다도 가고 싶은데 산도 좋을 것 같아서 고민이야. 국내 여행지를 추천받긴 했는데 요즘 해외 여행도 끌리네.. 어딜 가야 하지?
✅ 8월에 여행하기 좋은자연 경관이아름다운해외 여행지 3곳을 추천해 줘.
마찬가지로 '하체 근육 강화'와 같은 명시적인 조건과 '주간 운동 루틴'과 같은 명확한 출력 지도가 더해진다면, 모호한 프롬프트에 비해 LLM이 생성하는 답변의 깊이와 품질이 매우 달라지기도 합니다.
👎 매일 운동을 하려고 하는데 뭘 해야 할까?
✅ 하체 근육을 강화할 수 있는일주일 운동 루틴을 만들어줘.
2. 아웃풋도 확실하게 지시하기
좋은 프롬프트의 두 번째 조건은 앞서 살펴본 출력 지도요소와 관련이 있습니다. 이는 사용자의 지시 사항을 어떤 형식으로 출력해야 하는지 구체적으로 요청하는 것입니다. 가짓수, 글자 수, 줄단위와 같이 일반적인 형식부터 프로그래밍에 도움이 될 만한 json 표, html 포맷 등에 이르기까지 사용자가 원하는 대로 지정하면 됩니다.
아웃풋을 표 형식으로 지정한 예시:
또한, 작문이나 마케팅, 콘텐츠 제작에 LLM을 활용할 때에도 확실한 아웃풋을 지시해야 양질의 결과물을 낼 수 있습니다. 짧고 굵은 스타일의 작문을 원할 때에는 글자 수와 어조(예: 명언, 소셜 미디어 홍보 문구, 친근하게, 유머러스하게 등)를 지정하면 원하는 결과를 효율적으로 생성하는 데 도움이 됩니다. 핵심만 담아 짧고 명료하게 작성하는 인풋뿐만 아니라 구체적인 출력 사항을 지시하는 아웃풋까지 고려하여 프롬프트를 작성해 보세요.
아래는 "50자 이내", "한 줄" 또는 "프로모션 태그 라인"과 같은 특정 출력 가이드라인에 따라 작성된 프롬프트의 경우입니다. :
3. 예시 들기
원하는 결과물에 대한 명확한 아이디어가 있는 경우 예시를 제공하는 것도 좋은 방법입니다. 샘플 아웃풋을 사용하여 결과물을 생성하도록 요청하면 LLM은 기대하는 바를 반영해 결과를 만들어냅니다.
👎 가상의 회사를 만들어줘. 어떤 회사인지 간단한 설명도 덧붙여주면 좋겠어.
✅ 아래 형식을 사용하여 "AAA"라는 가상의 패션 회사를 만들어봐.
- 회사 이름: 업스테이지
- 업종: 시스템 소프트웨어 개발 및 공급
- 제품/서비스: 인공지능(AI) 시스템 개발 및 공급, 소프트웨어 개발 및 제작, 기타 시스템 운영 관련업
예시를 제공하는 것은 아이디어를 탐색하거나 홍보 콘텐츠를 작성하는 마케터에게도 유용할 수 있습니다. 원하는 스타일의 문장을 예시로 들어주고, 이를 바탕으로 홍보 문구를 만들어달라고 하거나 이메일 작성, 개요 짜기, 아이데이션 등 다양한 업무에 적용해볼 수 있습니다.
4. 길어지거나 복잡하면 구역을 지정하기
프롬프트가 길어지거나 복잡할 경우에는 구역을 지정해 주면 더 나은 결과를 얻을 수 있습니다. 아래 예에서는 참고 데이터와 출력 지도를 괄호로 구분하고 있습니다. 이처럼 주요 내용을 괄호로 구분하면 한눈에 쉽게 이해할 수 있는 것처럼, AI 모델도 마찬가지로 더 효율적으로 정보를 처리할 수 있습니다.
구역 지정을 통해 긴 내용을 일목요연하게 프롬프트로 정리한 예시:
5. 순차적으로 작업 구성
다양한 과제에 LLM을 활용할 때는 작업을 순차적으로 설명하고 결과물의 순서를 지정하는 것이 유리합니다. "주어진 정보를 바탕으로 보고서를 작성하라"와 같이 모호한 지시를 내리는 것보다 작업을 여러 단계로 세분화하는 것이 더 효과적입니다. 예를 들어 특정 기준에 맞는 데이터를 필터링하거나, 관련 내용을 요약하거나, 간결한 보고서를 작성하도록 LLM에게 지시할 수 있습니다. 이러한 구조화된 접근 방식은 사용자의 요구 사항과 결과물의 품질이 모두 만족스럽게 충족되도록 보장합니다.
고려해야 할 중요한 측면은 LLM에 할당된 업무가 명확하게 정의되어 있고 모델이 해석하기 쉬워야 한다는 것입니다. 특히 정성적 평가와 관련된 작업의 경우 모델이 적용할 수 있는 명시적인 기준이나 벤치마크를 제공하는 것이 필수적입니다. 이러한 지침이 없으면 생성된 결과물의 정확성과 완전성이 저하될 수 있습니다.
작업을 순서대로 정리하는 프롬프트의 예입니다:
6. 테스크를 순서대로 정리하기
LLM을 다양한 업무 처리에 활용할 때에는 해야 할 일을 단계별로 정리하여 출력 순서를 알려주는 것이 좋습니다. 단순히 "어떠한 내용을 바탕으로 보고서를 써줘" 라고 지시할 때보다 단계별로 해야 할 일들, 가령 특정 조건을 충족하는 것들로만 추려 표로 정리를 한다거나 내용 요약, 짧은 보고서를 만드는 등의 여러 테스크를 순서대로 정리해주는 것이 사용자의 니즈와 결과물의 완성도를 모두 충족할 수 있는 방법입니다. 이때 유의해야 할 점은 거대언어모델(LLM)이 명확히 판단할 수 있는 테스크를 주어야 만족할 만한 결과가 나올 수 있다는 점입니다. 예를 들어 정성적인 평가가 이루어지는 항목은 명확한 기준이 없기 때문에, 이러한 테스크를 요청할 때는 해당 여부를 판단할 수 있을 만한 기준을 제시해주는 것이 좋습니다. 그렇지 못할 겨우 결과물의 완성도가 떨어질 수 있다는 점을 염두해야 합니다.
프롬프트가 생성한 결과가 만족스럽지 않다면 다음 제안에 따라 프롬프트를 수정해 보세요. 프롬프트를 구성하는 방법을 이해하고 다양한 접근 방식을 실험해 보면 전문성을 키우는 데 도움이 될 것입니다.
스타일 변경
길이 설정
다양한 측면 강조하기 (예: 프로모션 태그 라인에서 가격을 더 강조하기)
몇 가지 예제를 기반으로 다시 작성
대화가 길어질 경우 (예: 이전 채팅 내용을 고려하고 싶지 않을 때) 새로 시작하기
중요한 정보는 마지막에 배치하거나 반복합니다.
필요한 경우 영어로 작성
마크다운을 사용하여 서식 지정
아웃풋은 GPT 버전에 따라 다를 수 있습니다.
동일한 입력에 대해 일관된 결과를 얻으려면 코드를 사용하세요.
지금까지 프롬프트 엔지니어링이란 무엇인지, 그리고 어떤 프롬프트를 디자인 해야 효과적으로 LLM을 활용할 수 있을지에 대해 살펴보았습니다. 위에서 배운 다양한 프롬프트 디자인 가이드를 바탕으로 업스테이지 콘솔에서 Solar를 직접 사용해 보세요!