지난 시간에는 생성형 AI가 사용자의 요구에 맞게 외부 소스에서 검색을 해올 수 있도록 유도하는 일종의 파이프라인인 RAG의 개념과 전반적인 구성요소에 대해 살펴보았습니다. 이제 RAG 파이프라인의 구성요소를 하나씩 뜯어보며 RAG와 친해질 시간입니다.
첫 번째로 다룰 내용은 바로 프롬프트 엔지니어링입니다. 챗GPT 열풍이 불던 2022년 말 이후 다들 프롬프트 엔지니어링이라는 말을 한 번쯤 들어보신 적이 있을 것입니다. 프롬프트 엔지니어링(Prompt Engineering)이란 프롬프트(Prompt)를 통해 생성형 AI 모델에게 사용자가 원하는 작업을 수행하도록 지시하는 과정을 말합니다. 여기서 프롬프트(Prompt)란 프로그래밍 언어가 아닌 자연어(Natural Language)로 된 명령어를 뜻하지요.
1. 프롬프트 엔지니어링은 만능일까?
불과 2년 전 GPT-3.5가 SoTA 모델이었던 시절에만 해도 분명 프롬프트를 상세하고 생성형 AI 모델이 알아듣기 쉽게 작성하는 것은 언어모델의 성능을 크게 좌우했습니다. 이때 프롬프트 엔지니어링 붐을 타고 국내 모 스타트업에서는 억대연봉을 제시하며 프롬프트 엔지니어를 채용하기도 하였죠. 관련된 책과 강의들도 우후죽순처럼 쏟아져 나왔습니다.
프롬프트 엔지니어(출처 : 동아일보)
그런데 얼마 전 OpenAI의 o1 모델이 출시되면서 프롬프트 무용론이 고개를 들고 있습니다. 대표적인 SoTA 모델 중 하나인 Claude-3.5처럼 새로 출시되는 생성형 AI의 크기가 커지고 점점 더 성능이 발전하면서 일각에서는 이제 프롬프트는 과거의 유물이 되어버릴 것이라고 전망하는 사람들도 늘어나고 있는 것입니다.
생성형 AI의 지능에서 인간의 뉴런과도 같은 역할을 하는 매개변수(parameter)가 조 단위(1000B)로 늘어나기 시작하면서 모델은 일정 수준의 추론 및 사고 능력을 갖추게 되었습니다. 이때부터 똑똑해진 생성형 AI에게 너무 길고 상세한 프롬프트를 제공하면 오히려 답변 품질을 저하된다는 연구결과가 나오기 시작했지요. 예전 모델들과 비교하여 확실히 환각현상(Hallucination)도 적어졌습니다.
생성형 AI는 이제 개떡같이 말해도 찰떡같이 알아듣는 수준에 다 달았고, 이제 프롬프트 엔지니어의 설자리는 점점 없어지고 있는 것처럼 보입니다. 프롬프트 엔지니어를 한 때 반짝 등장했다 사라진 '정보 검색사'에 비교하며 곧 사라질 직업이라고 말하는 사람들도 늘어나고 있습니다.
2. 프롬프트는 여전히 중요하다
그러나 여전히 프롬프트 엔지니어링에 따라 생성형 AI 답변이 유의미하게 달라질 수 있다는 사실은 여러 연구결과와 논문을 통해서 증명되고 있습니다.또한 프롬프트 엔지니어링은 우리 인간과 가장 가까운 자연어를 통해 인간의 언어를 구사하는 LLM이 생각하는 방식을 엿볼 수 있다는 점에서 여전히 매우 흥미로운 분야이기도 합니다.
Claude-3.5-Sonnet을 개발한 Anthropic에서는 Mapping the Mind of a Large Language Model라는 논문을 통해서 LLM이 더 이상 블랙박스 모델이 아니라고 선언했습니다. 엔트로픽은 현재 배포 중인 LLM인 클로드 소넷(Claude Sonnet) 내부에서 수백만 개의 개념이 어떻게 표현되는지 식별했다고 밝혔습니다.
프롬프트 엔지니어링을 통한 LLM의 Feature 분석 (출처 : Anthropic)
여전히 많은 개발자들은 AI 모델을 블랙박스로 취급합니다. 특정 값이 입력되면 응답이 나오지만, 그 모델이 어떤 로직을 통해 특정 응답을 선택했는지는 명확하지 않기 때문입니다. 그러나 성능을 개선하고 나아가 안전하고 신뢰할 수 있는 모델을 구축하려면 그 내부를 이해하는 것이 필수적입니다. 이때 프롬프트가 중요한 역할을 할 수 있습니다.
3. 시스템 프롬프트란?
지난 시간에 다루었듯 RAG 파이프라인에 생성형 AI를 연동한 뒤에 가장 먼저 해야 할 일은 생성형 AI가 어디에서 정보를 가져올지, 어떻게 답변을 생성해 낼지 명확하게 지침을 내리는 것입니다. 이때 중요한 것이 바로 시스템 프롬프트(system prompt)의 개념입니다.
claude-3.5 sonnet의 시스템 프롬프트(출처 : Anthropic)
시스템 프롬프트(system prompt)란 LLM에 대한 기초 설정값을 지정해 주는 프롬프트라고 할 수 있습니다. RAG 파이프라인과 연동된 프롬프트의 경우에도 프롬프트는 바로 이 시스템 프롬프트의 역할을 수행합니다. '검색'을 통해 답을 찾는 똑똑한 챗봇을 만들기 위해 RAG 파이프라인을 구축할 때, 생성형 AI가 답변을 할 때 내뱉는 답변은 모두 이 시스템 프롬프트를 거쳐서 나온다고 할 수 있습니다.
시스템 프롬프트는 직접 모델의 하이퍼파라미터(hyperparameter)를 조절하지 않으면서도 LLM의 답변을 원하는 방식대로 조정할 수 있다는 점에서 매우 가성비가 좋은 방법이라고 할 수 있습니다. 이처럼 모델을 직접 건드리지 않으면서도 추론(Inference) 과정에서 프롬프트를 통해 원하는 방식으로 답변을 얻어내는 방법을 In-context learning이라고 합니다. 다음시간부터는 시스템 프롬프트를 효과적으로 작성하는 방법들에 대해 배워보도록 하겠습니다.