프롬프트엔지니어링, 젠틀파이, LLM, 챗봇, GPT, 챗GPT
챗GPT 덕분에 프롬프트 엔지니어링에 대한 관심이 급격히 높아졌다. "프롬프트 엔지니어링"이라니 건물짓는것도 아니고 처음 들으면 단어자체가 머리아프게 보일 수도 있지만, 알고보면 개념은 상당히 직관적이다. 소프트웨어 엔지니어링이 컴퓨터에 원하는 작업을 지시하는 소스 코드를 작성하는 것처럼, 프롬프트 엔지니어링은 언어 모델에게 원하는 결과를 얻기 위한 명령을 제공한다. 단순하게 생각하면, 일을 잘 해낼수 있도록 말로 업무 지시 내리기!라고 생각하면 된다.
누구나 알다시피, 챗GPT(LLM)는 언어모델이다. 누구 말마따나 '문과생'이다. 우리 문과생에게 한번 명령을 같이 내려 볼까?
이번 포스팅에서는 우선, GPT 준비시키기(환경접속, 세팅)와 지시 잘내리는 방법(원칙 1번)만을 다루려 한다.
백문이 불여일견이다. 가장 쉬운 방법으로 실전 테스트를 해보자. OpenAI의 플레이그라운드로 들어가 로그인만 하면 무료로 사용해 볼 수 있다. 이 포스팅에서 테스트 언어모델은 text-davinci-003로 하며, 이 모델은 기본 구성, 즉 tempeature=0.7 및 top-p=1을 사용할 것이다. (아래 이미지 참고)
처음에는 세팅을 건드리지 않는게 좋다. 그렇지만, 나중에라도 조정할 일이 생기니 알아는 두는게 좋겠다. 기본적으로 숫자가 낮을수록 건조하고 딱딱한 답변, 숫자가 높을수록 자유롭고 독특하다.
* Temperature - 온도가 높으면 분자들이 자유롭게 움직인다는 것을 생각해보자. 자유롭게 움직이다보니 무작위성이 증가해서 창의적인 결과가 나온다. 반대로 숫자가 낮으면 (온도가 낮으면) 사실적이고 간결한 답이 나온다. 고객센터 답변 같은 경우는 낮게, 문학작품 창작 같은 경우는 온도를 높이는게 유리하다.
* Top_p - 마찬가지로 온도 샘플링 기법인 top_p를 사용하면 모델이 응답을 생성 시 자유도를 제어할 수 있다. 정확하고 사실적인 답변을 찾고 있다면 이 값을 낮게 유지하고, 보다 다양한 응답을 원한다면 더 높은 값으로 높이면 된다.
(일반적으로 위의 2가지 요소중에 1개만 조정하는게 좋다)
* frequency_penalty: 이 설정은 생성된 텍스트에서 자주 등장하는 단어를 억제하는 데 사용된다. 이 값이 높으면 모델은 흔히 사용되는 단어를 덜 사용하려고 하기때문에, 창의적이거나 독특한 단어를 사용하게 된다.
* presence_penalty: 값이 높을수록 GPT는 동일 단어나 표현을 반복하는 것을 피하려고 한다.
(frequency penalty와 presence_penalty 두 파라미터 모두 값의 범위는 0.0에서 1.0까지이며, 기본값은 0.0이다. 이 값들을 높이면 발화의 내용이 더욱 다양해지지만, 너무 높이면 텍스트를 이해하기 어려운 수준까지 간다. 익숙해질때까지는 초기값으로 ^^;; 그냥 두는게 좋겠다)
* Maximum length : 답변의 길이를 제한할수 있다. 질문과 답 전체가 4000토큰 한정이기 때문에, 질문이 1000토큰 정도될 걸로 예상된다면, 답은 3000토큰 이하로 한정해야 답이 끊기지 않고 생성된다.
프롬프트 엔지니어링은 간단하게 Prompts와 Completion 영역으로 나뉘는데,
프롬프트 부분에 명령, 컨텍스트, 인풋데이터를 넣어 질문하고 Completion에서는 출력 결과가 확인할수 있다.
* 명령 Instruction - 모델이 수행해야하는 특정 작업 또는 지시 가이드
* 컨텍스트 Context - 모델이 더 나은 응답을 하도록 유도할 수 있는 외부 정보 또는 추가 컨텍스트
* 입력 데이터 Input data - 응답을 찾고자 하는 입력 또는 질문
* 출력 Output - 출력의 유형 또는 형식
아래처럼, 해야할 일의 예시를 주면 패턴을 파악해서 그와 비슷하게 대답을 생성해 낼 수 있다.
(검은 글씨가 프롬프팅이고, 초록색으로 반전된 부분이 GPT가 준 답이다)
아래처럼 내가 정한 규칙에 따라 Json 포맷으로 답변해줘 라고 요청할 수 있다.
(검은 글씨가 프롬프팅이고, 초록색으로 반전된 부분이 GPT가 준 답이다)
그런데 김동인의 백년의 유산이나, 김영하의 바람과 함께 사라지다는 존재하지 않는 소설이다. 이럴때는 다음 tactic을 써본다.
한글로 나온 결과물이 만족스럽지 않을때는, 영어로 물어본다. (한글-> 영어번역도 gpt에게 시키면 된다)
아래에서 결과를 보자. 딱 봐도, 한강의 채식주의자, 신경숙의 엄마를 부탁해, 황선미의 마당을 나온 암탉으로 그럴듯한 답이 나왔다.
(검은 글씨가 프롬프팅이고, 초록색으로 반전된 부분이 GPT가 준 답이다)
이 글을 쓰면서도 포스팅 중간에 넣을 스크린샷을 찍을 때 원하는 답이 안나와서 이렇게 저렇게 여러번 다시 해볼수 밖에 없었는데, 원하는 결과물을 정확히 얻기 위한 프롬프트 엔지니어링에는 시도와 개선 외에는답이 없어 보인다. 기본 원칙에 따르되 '꾸준하고 성실한' 튜닝이야 말로 더 좋은 결과물을 얻을 수 있는 유일한 방법인 듯 하다.
다음 글에서는 조금 더 복잡한 프롬프트 엔지니어링 중에서 하기 내용을 다루려고 한다.
원칙2: 업무완수를 위한 중간 과정을 지시한다
Hallucination
아웃풋 검사
(글에 좋아요가 많으면 좀 더 빨리 적어보겠습니다)
참고 사이트: Prompt Engineering Guide 와 ChatGPT Prompt Engineering for Developers
두 사이트에 직접 들어가보고, 함께 실전수업을 꼭 해보시길!!
안녕하세요. 저는 젠틀파이 대표 제이미입니다.
챗GPT와 AI 챗봇 소식을 계속 보고 싶으시다면, 페이스북 챗봇 그룹이나 브런치를 구독해주세요.
AI 애플리케이션 플래닝그룹, 젠틀파이는 텍스트봇, 음성봇, 스마트 디스플레이 등 다양한 챗봇을 제작하고 컨설팅하는 전문 그룹입니다.
프리미엄 통계 서비스 코코너티브를 적용하고 싶으시거나
챗GPT봇을 구축하고 싶으신 분들,
LLM 설정시 프롬프트 엔지니어링이 필요하신 분들은 젠틀파이 hello@gentlepie.com에 연락 주세요.