본문 바로가기
프로그래밍/인공지능

프롬프트 엔지니어링(Prompt Engineering)

by 만디기 2024. 1. 11.

요즘 ChatGPT, Google Bard, Microsoft Copilot 등 대화형 AI가 트렌드로 떠오르면서 점차 활용 범위가 넓어지고 있다.

그래서 나도 이러한 AI들을 활용하는 방법인 프롬프트 엔지니어링을 공부하고 정리해보려고 한다.

 

프롬프트 엔지니어링


  • 인공지능으로부터 원하는 결과물을 얻기 위해 프롬프트를 설계하는 과정
  • 프롬프팅(Prompting) 또는 프롬프트 디자인(Prompt Design)으로도 불림
  • 기본적으로는 '질문을 잘 만드는 방법'에 해당하지만, 모델과의 상호작용 연구/프로덕트 설계/서비스 구현에 필요한 작업도 포함할 수 있음
  • GPT와 같은 언어 모델은 '인컨텍스트 러닝(In-Context Learning)', 즉 주어진 맥락을 학습해 답변에 반영함
  • 현행 언어모델의 한계(장기기억을 가지지 못하고, 주어지지 않은 맥락을 쉽게 추론하지 못함)를 극복하기 위함
  • 언어 모델이 한 번에 처리할 수 있는 연산의 양(토큰 리밋)이 제한되어 있다는 점, 언어 모델이 실제 답을 도출하는 과정을 명확히 해석할 수 없으므로 많은 실험과 조정이 필요함.

 

 

프롬프트 엔지니어링의 5가지 원칙


● 구체적 지시 : 단순한 단어나 문장으로 끝내지 말고, 그 단어나 문장이 지칭하는 바에 대한 상세한 부연 추가

Actin as (Role) perform (TASK) in (Format)

(ex) 

Acting as Copywriter perform Headline in a list

Action as Journalist perform Blog Post in a plain text

▶ 프랑스 스타일로 나무에 대한 시 (X)

▶ 형식의 완전성을 추구하는 프랑스 스타일로 '숲 속 깊숙한 곳에 있는 나무'에 대한 시를 5줄로 써줄래? (O)

 

  명확한 단어 : 모호하거나 중의적으로 해석될 수 있는 단어나 문장을 주면 제대로 된 결과를 얻을 수 없음

배가 우리에게 끼치는 영향에 대해 알려줘 (X)

배(Ship)가 인류 문명사에 끼친 영향에 대해 알려줘 (O)

  맥락 제공 : 단순히 구체적인 프롬프트를 작성하는 것에 그치지 않고, 이 프롬프트를 작성하는 이유와 의도를 제시해주면 더욱 좋음

콩쥐팥쥐를 소재로 한 노래 가사를 써줘 (X)

콩쥐팥쥐는 한국의 대표적인 전래동화 중 하나이자 동양의 신데렐라형 스토리야. 주인공 콩쥐는 계모와 계모가 데려온 팥쥐로부터 학대를 받으며 살았지만, 콩쥐가 귀한 신분의 원님과 혼인하게 됨에 따라 팥쥐와 계모가 처벌받는다는 얘기를 담고 있지. 이 콩쥐 팥쥐에 대한 내용을 바탕으로 노래 가사를 써 줄 수 있어? (O)

  구조 형식화 : 프롬프트를 작성할 때 일정한 패턴이나 구조를 가지도록 함

가상의 게임 캐릭터 설정을 하나 만들어주세요 (X)

가상의 게임 캐릭터에 대한 정보를 다음 형식에 따라 만들어 주세요 (O)

- 이름 : [캐릭터의 이름]

- 외모 : [캐릭터의 외모를 한 줄로 묘사]

- 성격 : [캐릭터의 성격을 한 줄로 묘사]

  일관성 유지 : 작성한 프롬프트를 여러 번, 그리고 다양한 조건으로 시도하면서 계속 일관된 형식이 유지되는지 테스트

(ex) 위의 '게임 캐릭터 설정' 프롬프트를 여러 번 사용하면, 각 캐릭터마다 일관성 있는 이름, 외모, 성격 정보가 생성되어야 함.

 

ChatGPT 프롬프트 엔지니어링


  • ChatGPT는 그 자체로 별도의 기술이나 인공지능 모델을 의미하지 않으며, GPT라는 인공지능 모델을 채팅의 형태로 제공하는 자체 서비스이다. 그렇기 때문에 자체적인 보정 값과 알고리즘이 적용되어 있을 확률이 높다.
  • 일반적인 '프롬프트 엔지니어링'은 ChatGPT가 아닌, 순수한 GPT 모델을 염두에 두는 경우가 많다.
  • 하지만 ChatGPT가 대중적이며, 순수 GPT 모델과의 차이도 많이 뚜렷하지는 않다.

 

ChatGPT 프롬프트 엔지니어링 주의 사항

● 새로운 주제에 대해서는 새로운 챗(New Chat)을 만들어야 한다.

- 대화의 주제나 문맥이 바뀔 때, 이전 대화와의 연결성을 단절시키기 위해 새로운 채팅방을 만들어야 한다.

- ChatGPT는 이전 대화를 기억하고 현재 대화에 반영하는 특성이 있기 때문에, 같은 채팅방 안에서 이전 대화와 다른 주제로 계속 진행하면 모델이 혼란스러워지고 부적절한 답변이 나올 수 있다.

멀티 턴보다는 싱글 턴으로 시도한다.

- ChatGPT가 이전의 질문과 답변을 계속해서 연산에 반영하긴 하지만, 한 번에 처리할 수 있는 양은 제한되어 있다. (일반 GPT-3.5 기준으로 4096 토큰)

- 그렇기 때문에 대화를 많이 진행하면 할수록(멀티 턴) 오래된 대화는 잊히게 되며, '기억력의 한계'에 도달하거나 내용의 일관성을 유지하기 힘들다.

- 따라서 성공적인 프롬프트 엔지니어링을 위해서는 멀티 턴이 아닌 싱글 턴 방식을 사용하는 것이 좋다.

구분 싱글 턴 멀티 턴
프롬프트의 수 1 2개 이상
장점 재활용이 쉬움 상세한 수정이 가능함
단점 수준 높은 프롬프트 제작의 어려움 일관성 유지와 복제의 어려움

 

외부 정보에 접근할 수 없다는 점을 기억한다.

- ChatGPT는 2021년 9월까지 학습한 데이터를 기반으로 작동하며, 인터넷 또는 외부 소스에 접근할 수 있는 능력이 없음.

- 미리 학습된 내용을 출력하거나, 거짓으로 생성된 내용을 보여줄 수도 있는데 이를 할루시네이션(환각)이라고 한다.

- ChatGPT는 검색이 필요한 영역이 아닌 아이디어 도출/요약/아이디어 발견/단순화/편집/창작 등의 분야에서 활용해야 함

줄 바꿈을 사용한다

- ChatGPT에서 형식화를 위해 줄 바꿈을 할 때는 Shift + Enter를 사용한다.

 

 

프롬프트 필수 개념


● 모델(Model)

- 컴퓨터의 계산 능력을 이용한 시뮬레이션

- 언어에 대한 모사이자 예측, 우리의 언어를 컴퓨터로 흉내내고 예측하는 시뮬레이션

- 규모가 거대하므로 거대 언어 모델(Large Language Model)이라고 부른다.

- 자동차의 엔진 같은 존재로서, 많은 AI 기업들이 자체적인 모델을 갖추기보다는 오픈AI에서 모델을 빌려오곤 한다.

● 토큰(Token)

- GPT 모델은 토큰(Token) 단위로 언어를 이해한다.

- 인공지능 GPT 모델은 문장을 작은 조각인 토큰으로 분리하여 처리한다. (ex : "I", "am", "a", "boy")

- 하지만 GPT가 토큰을 나누는 기준은 사람의 판단이나 기대와는 다를 수 있으며, 일관성이 없거나 명확한 기준이 없을 수 있다.

- 영어는 대개 단어 단위로 분리되지만, 한국어는 자소 단위로 분절되기도 한다.

- GPT 모델은 기본적으로 다음 토큰을 추천해 주는 시스템으로 동작한다.

- GPT 모델이 처리 가능한 토큰의 범위에는 제한이 있으며(일반적인 GPT-3.5 모델은 4096개), 모델 사용료를 토큰당 가격으로 지불하게 되므로 적은 토큰 내에서 모델의 기억력을 최대한으로 유지하고 좋은 결과물이 도출될 수 있도록 하는 것이 프롬프트 엔지니어링의 핵심이다.

 

● 할루시네이션(Hallucination)

- AI 모델이 주어진 입력에 대해 사실과 무관한 정보를 옳은 답처럼 출력하는 현상

- 하지만 생성 AI의 창의성과 다양성을 나타내는 당연하고도 중요한 특성이다. (다양한 데이터와 패턴을 학습하고 새로운 가능성을 탐색함으로써 예상치 못한 결과를 제공함)

- 따라서 ChatGPT 등의 인공지능 모델 또는 서비스를 이용할 경우, 정보의 검색보다는 아이디어 도출, 요약, 토론, 간략화, 편집, 창작 등에 사용하는 것이 좋다.

 

● API(Application Programming Interface)

- GPT 모델을 연동해 서비스를 만들기 위해서는, 좋은 프롬프트를 작성하여 API로 전달해야 한다.

 

출처


서승완, 『프롬프트 엔지니어링 교과서』, 애드앤미디어(2023)