지난 시간에는 프롬프트 엔지니어링의 기본적인 개념과 중요성 그리고 검색증강생성(RAG) 파이프라인 성능을 담당하는 하나의 중요한 축이기도 한 시스템 프롬프트(system prompt)에 대해 소개했습니다. 그렇다면 구체적으로 '좋은 프롬프트'란 어떤 프롬프트를 가리키는 것일까요?
사실 좋은 프롬프트에 대한 정의는 하루가 다르게 바뀌고 있습니다. 생성형 AI 기술이 발전하고 모델의 매개변수(parameter)가 커짐에 따라 좋은 프롬프트에 대한 기준 역시 빠르게 바뀌고 있기 때문입니다. 이번 시간에는 구체적으로 좋은 프롬프트란 어떤 프롬프트인지, 그리고 프롬프트는 생성형 AI 활용에 있어서 어떻게 그 역할이 달라지고 있는지 '프롬프트 엔지니어링의 변천사'를 돌아보며 배워보도록 하겠습니다.
1. 기술의 발전에 따른 프롬프트의 역할 변화
생성형 AI 기술이 발전하여 사람처럼 말하고 행동하는 인공지능이 등장하면 프롬프트 엔지니어링은 필요가 없어지게 될까요? 저는 오히려 반대라고 생각합니다. 오히려 블랙박스 모델이었던 생성형 AI에서 탈피하여 인공지능의 사고과정을 이해하고 효과적으로 소통할 수 있는 전문가가 꼭 필요해질 가능성이 높기 때문입니다.
프롬프트 엔지니어링의 변천사를 돌아보면 그 역할은 단순히 생성형 AI 모델의 정확도 및 신뢰도를 올리는 것에서 답변의 효율성 및 최적화를 지향하는 방향으로 , 그리고 마지막으로 생성형 AI의 사고방식을 이해하고 사용자 경험을 강화하는 방향으로 점점 더 확대되고 있습니다.
1) 초기 프롬프트 엔지니어링 : 환각현상 방지
우선 생성형 AI 기술이 등장한 지 얼마 되지 않았던 초기에는 생성형 AI가 질문에 대해 그럴듯한 답변을 짜깁기해서 말하거나 거짓을 말하는 환각현상(Hallucination)이 두드러졌습니다. 이에 따라 자연스럽게 프롬프트 엔지니어링 역시 답변의 정확도와 신뢰도를 올리는 방향으로 발전했지요.
출처 : 환각 줄이고, SW 서비스까지 만들 수 있는 프롬프팅은? (프롬프트 엔지니어 강수진 박사)
초기 프롬프트 엔지니어링에는 GPT 논문에도 종종 등장했던 zeroshot이나 fewshot 기법이 많이 사용되었습니다. 이때까지만해도 프롬프트 엔지니어링은 단순히 생성형 AI의 답변 품질을 올리기 위한 하나의 도구쯤으로 여겨졌었죠. 한 발 나아가 프롬프트 엔지니어 강수진 박사는 '사실과 의견'을 구분하고, '띄어쓰기'를 명확히 하며 프롬프트를 '구조화' 하는 방식 등을 통해 환각현상을 방지할 수 있다고 합니다.
2023년을 지나면서 생성형 AI 모델의 매개변수가 폭발적으로 늘어나고 관련 기술이 발전하면서 이제 생성형 AI 모델은 제법 똑똑해졌습니다. 물론 확률에 기반한 예측으로 문장을 생성해 내는 생성형 AI 기술의 특성상 여전히 다소간의 환각현상은 존재할 수밖에 없지만, 이제 더 이상 챗GPT나 구글 Gemini는 터무니없는 질문을 사실인 양 대답하지 않게 되었습니다.
더욱 똑똑해진 구글 Gemini에 ‘세종대왕 맥북 던짐 사건’에 관해 물어보았다(출처 : 저자)
이때부터 프롬프트 엔지니어링의 역할은 단순히 할루시네이션을 방지하고 답변 신뢰도를 올리는 것에서 답변 생성 과정을 효율화하고 사용자의 용도에 맞게 최적화하는 것으로 확대되게 됩니다. 이때부터 생성형 AI 모델이 복잡한 문제를 해결하는 과정에서 중간 단계의 추론을 포함하도록 유도하는 ‘Chain-of-Thought Prompting (CoT)’ 기법이나 역할지정(persona) 기법 등 다양한 기법이 융합되어 활용 되기 시작했습니다.
CoT와 fewshot prompt의 결합 예시(출처 : https://www.promptingguide.ai)
3) 요즘 프롬프트 엔지니어링 : 생성형 AI의 사고방식 이해
마지막으로 최근의 프롬프트 엔지니어링은 향상된 생성형 AI 모델의 사고방식을 진정으로 이해하고 활용하고자 하는 방향으로 발전하고 있습니다. 가장 성능이 좋은 모델 중 하나로 알려진 claude-3.5를 개발한 앤트로픽(Anthropic) 사에서는 'LLM은 더 이상 블랙박스 모델이 아니다'라고 선언한 바 있습니다. 복잡한 연산 과정과 결과를 도출하는 로직이 철저히 베일에 가려져 있던 생성형 AI의 머릿속을 드디어 들여다볼 수 있게 되고 있습니다. 그리고 프롬프트 엔지니어링은 그 안에서 핵심적인 역할을 하고 있습니다.
요즘의 프롬프트는 예전처럼 상세하고 복잡할 필요가 없습니다. OpenAI의 조언에 따르면 새로 공개된 o1 모델들은 간단한 프롬프트에서 가장 잘 작동하며, 복잡한 프롬프트는 오히려 o1이 추론 및 답변을 하는데에 있어서 방해가 될 수 있다고 합니다. 몇 가지 프롬프트 엔지니어링 기법, 예를 들어, few-shot 프롬프트 작성이나 모델에게 "단계별로 생각하기(step by step이나 Chain of Thought)"를 지시하는 등의 방법은 성능을 향상하기보다는 오히려 방해가 될 수 있다고 합니다.
OpenAI의 o1 프롬프트에 관한 조언 (출처 : https://www.reddit.com/r/OpenAI/comments)
다음은 몇 OpenAI에서 발표한 가지 권장 사항입니다.
1. 프롬프트를 간결하고 직관적으로 유지하세요: 모델은 장황한 설명 없이 짧고 명확한 지시를 이해하고 응답하는 데 탁월합니다.
2. 연쇄적 사고(Chain-of-Thought) 프롬프트는 피하세요: 모델은 내부적으로 추론을 수행하므로, "단계별로 생각해 보라"거나 "추론 과정을 설명하라"라고 지시하는 것은 불필요합니다.
3. 명확성을 위해 구분자를 사용하세요: 세 개의 큰따옴표, XML 태그 또는 섹션 제목과 같은 구분자를 사용하여 입력의 서로 다른 부분을 명확히 표시하면 모델이 각 섹션을 적절하게 해석하는 데 도움이 됩니다.
4. 검색 보강 생성(RAG)에서 추가 콘텍스트를 제한하세요: 추가적인 콘텍스트나 문서를 제공할 때는 모델이 응답을 지나치게 복잡하게 만들지 않도록 가장 관련성이 높은 정보만 포함하세요.
2. 결론
프롬프트 엔지니어링은 생성형 AI 기술의 발전과 함께 그 역할이 더욱 중요해지고 있습니다. 단순히 답변의 정확도를 높이는 것을 넘어, 생성형 AI의 사고 과정을 이해하고 사용자 경험을 향상하는 방향으로 진화하고 있습니다. 앞으로 프롬프트 엔지니어링은 생성형 AI와 인간의 상호 작용을 더욱 자연스럽고 효율적으로 만들기 위한 핵심 기술로 자리매김할 것입니다. 다음 시간에는 시스템 프롬프트 적용유무에 따라 RAG의 답변 품질이 어떻게 달라지는지 비교해 보도록 하겠습니다.