생성형 AI라는 메기가 나타났다. 이를 잘 다루지 못하면 도태될 것이고, 이를 잘 다루면 더욱 숙련된 전문가가 되는 것이다. 그렇다면 생성형 AI라는 메기를 다루는 기술은 어떤 것들이 있을까? 프롬프트 엔지니어링, 랭체인(Langchain), 라마인덱스(LlamaIndex), 파인튜닝 등 새로운 용어와 기술들이 계속해서 등장하고 있다.
일단 LLM의 원리를 이해하고 이를 잘 다루는 기술들을 살펴보자.
LLM(Large Language Model)의 원리는 한마디로 말하면 Next token prediction이다. 쉽게 설명하면 다음 단어를 잘 예측하도록 학습되어진 모델이다.
The sky is
보통은 위 문장이 나오면 아래와 같은 단어를 생각한다.
The sky is blue
그런데 The students opened their …. 라는 문장이 나오면 약간 복잡해 진다.
the students opened their 다음에 오는 단에 대해 확률적으로 높은 가능성을 가진 단어 중에 선택하는 형태가 될 것이다. 이런 상황에서 다음 단어를 잘 맞춘다는 것은 1. 문법을 이해하고, 2. 세상의 다양한 분야에 대해 이해를 하고 있으며. 3. 상황(Context)에 대한 이해를 하고 있어야 한다.
LLM은 일단 세상의 많은 글들이 사전에 학습 되어 있어서, 1번과 2번 조건은 충족되어 있다고 보아야 할 것 같다. 3번에 대해서는 사용자가 입력하는 프롬프트로 상황을 파악해서 답변하는 원리이다.
프롬프트는 chatGPT같은 어플리케이션에서 답변을 잘 할 수 있도록 상황(Context)과 실제 궁금한 내용을 구분하지 않고 질문을 던지는 형태이나, LLM을 활용한 어플리케이션을 개발할 때는 이런 상황 설명을 구분해서 처리하게 된다. 즉, LLM과의 연결 시 사용되는 파라미터 중 메시지와 관련해서는 role과 content로 구성되는데 사용자가 입력하는 프롬프트는 system_prompt와 user_prompt로 나누어 처리하게 되어 있다.
"messages": [ {"role": "system", "content": system_prompt}, {"role": "user", "content": user_prompt} ]
User_prompt는 사용자가 질문을 하거나 지시하는 내용이고, System_prompt는 LLM 입장에서 사전에 인지하고 있어야 할 상황(Context)이다. 즉, 프롬프트에서 위 3번 조건을 충족하게 되는 것이다.
더불어, GPT 파라미터 중에 top_k, top_p 등이 있는데, top_k는 확률적으로 높은 top_k개의 단어들을 선정하는 것이고, top_p는 확률적으로 상위 top_p에 해당하는 단어들이 후보로 선택된다.
즉, top_k=5 & top_p=0.7 이면 확률이 높은 상위 5개의 단어 중에서 누적 확률이 70%에 도달할 때까지의 단어들만 후보로 선택된다. (* 추가 참고)
그렇다면 좋은 프롬프트를 만드는 방법이란 무엇일까? LLM 입장에서 상황 파악이 잘 될 수 있도록 하는 것이 그 원리인데, 크게 3가지 정도로 볼 수있다.
1. 역할 부여
LLM의 작동방식을 너무 장황하게 설명하지 않는 방법으로 역할을 지정하는 것은 매우 중요하다.
예) “넌 지금부터 ㅇㅇ분야에서 아주 뛰어난 전문가야. 다음 묻는 말에 전문가로서 답해줘”
2. 간결하고 명확하게 지시
프롬프트 엔지니어링의 기법은 다양하게 있으나 우선 기억해야 할 것은 다음과 같다.
원하는 내용을 간결하고 명확하게 지시하되 답변 형식, 길이, 예시를 주면 좋다.
1) 답변 형식
2) 답변 길이
3) 예시
3. 기타 옵션
1) 언어
2) 문체/어투
프로그래밍 개발 시에는 보통 system_prompt에 위와 같은 요소들을 고려해서 입력해 놓는다.
다음 편에서는 프롬프트 엔지니어링의 기법과 이를 다루는 기술에 대해 설명하고자 한다.