General prompt design technique
TL;DR 요새 공부하면서 재밌다고 느낀 부분은 AI와 효과적으로 커뮤니케이션하는 방법이 결국 사람과 효과적으로 커뮤니케이션하는 방법이라는 점입니다.
요새 핫한 프롬프트 엔지니어링
ChatGPT의 등장으로 광범위하게 퍼지게 된 생성형 AI, 특히 대규모 언어 모델 (LLM)에 대한 물결은 많은 부분에 변화를 불러일으키고 있습니다. 그중 하나는 프로그래밍으로 전통적으로 Python과 같이 특정한 프로그래밍 언어를 활용하여 원하는 결과를 만들어내던 것과는 달리 이제는 우리가 일상적으로 사용하는 자연어를 통해서 AI에게 질문하고 원하는 결과를 만들어낼 수 있습니다. 하지만 우리가 다른 사람과 효과적으로 소통하기 위해서 노력하듯이 LLM에게 전달하는 메시지인 프롬프트도 제대로 구성되었을 때 더 좋은 답변을 얻을 수 있습니다. 이 과정을 프롬프트 엔지니어링이라고 합니다.
프롬프트 엔지니어링 테크닉들을 보면 타인과 효과적인 소통을 하기 위한 방법과 굉장히 유사하다는 것을 알 수 있습니다.
1. 명확한 요청 (Instruction)
우리가 LLM으로부터 얻고자 하는 결과가 무엇인지 명확한 가이드를 주면 도움 됩니다. 예를 들어, 작성하기/분류하기/요약하기/번역하기 등 구체적인 지침을 알려주세요.
2. 구체적인 가이드 제시 (Specificity)
LLM이 답변하길 원하는 결과에 대한 지침을 구체적으로 줄수록 효과적입니다. 특히 원하는 형식이 있을 때 적절한 예시들을 같이 공유하면 모델이 이를 습득하는데 많은 도움이 됩니다.
3. 예시 공유 (Zero shot prompting vs Few shot prompting)
LLM에게 입력-출력쌍을 예시로 제공함으로써 이를 학습하고 더 나은 성능을 얻을 수 있습니다. 각 쌍들을 shot이라고 표현하여 아무런 예시도 제공하지 않은 경우를 zero shot prompting이라고 하고, 여러 예시들을 제공한 경우를 few shot prompting이라고 합니다.
4. 단계별 문제 해결 (Chain-of-Thought Prompting)
LLM에게 "단계별로 생각해 보자"라는 문구를 알려주는 것만으로도 복잡한 추론 문제에서 더 나은 결과를 얻을 수 있습니다. LLM은 수학 문제와 같은 복잡한 문제들에 대해서 아직까지 낮은 성능을 보여주고 있고 이를 향상하기 위한 여러 방법들이 연구되고 있습니다. 그중 하나는 중간 추론 단계를 활용하는 것으로 LLM에게 단계별로 문제를 해결하도록 지시합니다.
5. 방향성 제시 (Direcitional Stimulus)
LLM이 수행해야 할 역할을 알려줌으로써 원하는 방향성의 대답을 이끌어낼 수 있습니다.
위의 5가지 모두 AI가 아닌 사람에게 질문을 한다고 해도 적용될 수 있지 않을까요? 알려진 프롬프트 엔지니어링 팁 중 하나는 LLM을 인턴이라고 생각하고 지시를 내리라고 되어 있습니다. 새롭게 나온 용어이지만 결국 본질은 효과적인 커뮤니케이션에 대한 접근법이라고 느껴져서 작성해 보았습니다.
참고/테스트 링크
[1] Prompt Engineering Guide: https://www.promptingguide.ai/kr/techniques
[2] Google AI Studio: https://makersuite.google.com
[3] Gemnini: https://gemini.google.com
Disclaimer:
제 글은 AI/LLM 관련 업무를 하지 않는 사람들을 대상으로 하고 있으며 그에 따라 최대한 전문 용어의 사용을 피하고 있습니다.
제가 속했거나/속한 회사와 관련이 없고 공개된 정보를 기반으로 한 결과입니다.