GPT 알고 쓰자! 여러분의 프롬프트를 완벽하게 만드는 비법
대화형 AI 생성 모델에게서 더 좋은 답을 얻을 수 있는 Prompt Engineering 기법을 소개합니다
여러분들은 평소에 좋은 답을 얻기 위해 어떤 방식으로 질문하시나요?
같은 질문을 어떻게 하냐에 따라서 얻을 수 있는 답은 달라지게 되죠.
이는 Chat GPT, Claude, Gemini 에도 마찬가지입니다.
모델에게 프롬프트를 제공받는 대상을 정해주거나, 좋은 프롬프트에 보상을 주겠다는 이야기를 해주면, 더욱 풍성하고 정교한 답변들을 얻을 수 있습니다 😀
작년 말, 중동의 유명 AI 교육 기관 MBZUAI의 VILA lab의 연구자들은 어떻게 하면 더 모델에게 좋은 답을 얻을 수 있을지 연구를 진행했었습니다.
이 연구가 최근 연구자들의 커뮤니티에서도 회자되고 있습니다.
어떤 연구인지 같이 알아볼게요!
명확한 Prompt 를 만들기 위한 여섯가지 원칙
본문은 다음 논문 : Principled Instructions Are All You Need for Questioning LLaMA-1/2, GPT-3.5/4 를 바탕으로 작성되었습니다.
사용자의 지시사항이 더 정확할수록, 모델은 더 효과적으로 작업을 수행하며 기대에 더 가깝게 응답을 조정한다는 것은 이미 널리 알려진 사실이었습니다.
연구자들에 의하면, 이는 LLM들이 단순히 학습 데이터를 암기하는 것이 아니라, 핵심 질문이 일정하게 유지되더라도 다양한 프롬프트에 맞게 이 정보를 적응시킬 수 있음을 시사한다고 합니다.
LLM에 특정 역할을 부여하는 것은, 우리가 의도한 결과에 더 잘 부합하는 출력을 얻는 데에도 유익하다는 것이죠!
이에 연구자들은 여섯개의 원칙을 제안합니다
- 간결성과 명확성: 프롬프트는 간결하면서도 구체적이어야 하며, 불필요한 정보는 피해야 합니다.
- 맥락적 관련성: 태스크의 배경과 영역을 이해하는데 도움이 되는 키워드, 영역별 전문 용어, 상황 설명 등의 맥락을 제공해야 합니다.
- 과제 정렬: 프롬프트는 해당 과제의 성격이 드러나는 언어와 구조를 사용하여 구성되어야 합니다. 이는 형식에 맞는 질문, 명령 또는 빈칸 채우기 문장의 형태로 프롬프트를 구성하는 것을 뜻합니다.
예시 시연: 복잡한 과제의 경우, 예시를 포함하여 원하는 응답 형식을 보여줄 수 있습니다. Zero shot, Few shot 학습 시나리오에서 입출력쌍을 제공하는 것 등을 뜻합니다. - 편향 피하기: 중립적인 언어를 사용하고 윤리적 함의를 고려해야 합니다.
- 점진적 프롬프팅: 복잡한 과제는 단계별로 나누어 안내할 수 있습니다.
- 조정 가능성: 모델의 성능, 응답, 그리고 인간의 피드백에 따라 프롬프트를 조정할 수 있어야 합니다.
원칙에 기거한 Prompt Engineering 지침과 실험
연구자들은 위 원칙으로부터 다양한 지침을 정하고, 또한 성능 향상을 확인할 수 있는 자체 벤치마크 Atlas를 준비하여 LLaMa-1 부터 GPT 4 까지 다양한 모델들을 테스트하였습니다.
실험 결과, 지침 적용 시 그렇지 않은 프롬프트 대비 10~20%의 성능 향상이 이루어졌다고 합니다.
연구자들은 유효한 방법을 갈무리하여 다음과 같이 소개하였습니다!
지침 | 예시 |
LLM과 대화할 때 간결하게 요점만 말하기 | “please”, “if you don’t mind” 등의 표현 생략하기 |
대상 청중을 프롬프트에 포함시키기 | “해당 분야의 전문가를 대상으로 합니다” |
복잡한 작업을 단순한 프롬프트로 나누기 | 대화형 방식으로 작업 세분화하기 |
긍정적인 지시어 사용하기 | “do” 사용, “don’t” 피하기 |
이해를 돕는 프롬프트 활용하기 | “11살에게 설명하듯이 [주제]를 설명해주세요” |
더 나은 해결책을 위한 팁 언급하기 | “더 나은 해결책을 위해 $xxx를 팁으로 드리겠습니다!” |
예시 기반 프롬프팅 구현하기 | Few-shot 프롬프팅 사용 |
프롬프트 형식 지정하기 | ###Instruction###, ###Example###, ###Question### 사용 |
특정 문구 포함시키기 | “Your task is”, “You MUST” 사용 |
페널티 문구 포함시키기 | “You will be penalized” 사용 |
자연스러운 답변 요청하기 | “자연스럽고 인간다운 방식으로 질문에 답하세요” |
단계별 사고 유도하기 | “think step by step” 사용 |
편견 없는 답변 요청하기 | “편견 없고 고정관념에 의존하지 않는 답변을 제공하세요” |
모델이 추가 정보를 요청하도록 하기 | “이제부터 질문을 통해 필요한 정보를 얻으세요” |
이해도 테스트 요청하기 | “주제를 가르치고 테스트를 포함해 주세요” |
모델에 역할 부여하기 | 특정 역할을 지정하여 답변 요청 |
구분자 (Delimiter) 사용하기 | 프롬프트 내용 구분을 위한 기호 사용 |
특정 단어나 문구 반복하기 | 강조하고 싶은 내용 여러 번 반복 |
사고 연쇄와 Few-Shot 프롬프트 결합하기 | 두 기법을 함께 사용하여 효과적인 프롬프트 작성 |
출력 프라이머 사용하기 | 원하는 출력의 시작 부분으로 프롬프트 마무리 |
상세한 글쓰기 요청하기 | “필요한 모든 정보를 포함하여 상세한 [글 유형]을 작성해주세요” |
특정 텍스트 수정 요청하기 | “문법과 어휘만 개선하고 원래의 스타일을 유지하세요” |
복잡한 코딩 프롬프트 처리하기 | 여러 파일에 걸친 코드 생성 시 스크립트 작성 요청 |
특정 단어로 텍스트 시작/계속하기 | “다음 단어로 시작하는 [텍스트 유형]을 완성해주세요” |
모델이 따라야 할 요구사항 명시하기 | 키워드, 규정, 힌트 또는 지시사항 형태로 제시 |
샘플과 유사한 텍스트 작성 요청하기 | “제공된 [텍스트 유형]과 같은 언어를 사용하세요” |
Prompt Engineering , 앞으로 얼마나 더 중요해질까?
이 연구의 또 하나의 시사점은 큰 모델일수록 프롬프트 지침 적용 효과가 더 커졌다는 것입니다!
연구에 사용한 모델은 총 7개로, LLaMa1 7B 13B 등의 모델이 10%의 성능 향상을 이루어내었을 때, LLaMA 70B 나 GPT3.5 가 20%의 성능을 향상을 이루어냈습니다.
연구자들이 프롬프트 엔지니어링을 연구했던 시점 이후에도, 모델의 크기는 점점 커지고 있습니다. 프롬프트 엔지니어링의 효율성은 더욱 커질 것으로 예상되네요!
언어모델을 활용하는 다른 방법들
언어 모델을 사용하는 가장 간편한 방법은 이번 페이지에서 소개했듯이 프롬프트를 활용하는 방법입니다.
하지만, 보안상의 문제나, 언어모델이 잘못된 정보를 주는 위험, 할루시네이션을 피하기 위해 Fine tuning이나 RAG (Retrieval Augment Generation) 같은 방법들도 현업에서 애용되고 있습니다.
이런 기법들이나, 프롬프트 엔지니어링에 대해 더 궁금하신 분들은 다음 포스트도 읽어보시길 추천드릴게요!
RAG(검색 증강 생성)란? – LLM 단점을 보완하는 기술