본문 바로가기
💻 개발 이야기/NLP

[NLP] ChatGPT 똑똑하게 활용하기 (ft. Prompt Engineering)

by Jinseong Hwang 2023. 4. 15.

 
안녕하세요. 황진성입니다.
오늘은 ChatGPT를 조금 더 똑똑하게 활용하는 방법에 대해 알아보겠습니다.
그리고 프롬프트 엔지니어링에 대해 찍먹 해보도록 하겠습니다.
 

ChatGPT란?

기존의 GPT-3가 엄청난 파라미터 개수로 뛰어난 성능을 보여줬는데, 사람의 의도 파악과 윤리 의식 판단 기능이 추가된 InstructGPT 모델이 나왔습니다. ChatGPT는 InstructGPT에 대화형 플랫폼을 함께 탑재해서 출시된 SaaS라고 이해하시면 됩니다.
 
ChatGPT에게 ChatGPT가 뭔지 질문해봤습니다.

본인을 Assistant로 표현하고 있네요

 

언제 활용하는 게 좋을까?

소프트웨어 엔지니어로 일을 하다 보면, 끊임없이 새로운 기술을 학습해야 하는 것은 당연합니다. 그 과정에서 내 궁금증을 해소하기 위해 구글 검색을 많이 하곤 하는데, 이 또한 시간이 많이 소요됩니다. 심지어 원하는 정보를 찾았다고 하더라도 출처가 불분명한 개인 블로그 같은 글은 신뢰하기 힘든 것이 현실입니다. 저는 이런 상황에서 최근에 나온 ChatGPT 서비스를 활용하고 있습니다.
 
하지만 ChatGPT를 사용할 때 고려해야 할 점이 있습니다.
 

  1. 항상 정확한 답을 내주는 것이 아니다.
    • 정확한 답을 내는 경우도 있지만, 그렇지 않은 경우도 꽤 있으니 실무에서 ChatGPT의 결과를 사용할 경우에는 공식문서 등으로 cross check이 필요합니다.
    • 현재 언어 모델의 공통적인 문제점이기도 한데, negative feedback을 잘 못합니다. 질문한 사람이 잘못된 말을 해도, 틀렸다고 말하지 않고 그럴싸하게 동조하는 식으로 답변합니다. 점진적으로 개선되고 있는 것 같습니다.
  2. 질문을 잘해야 좋은 답변이 나온다.
    • 물론 그냥 질문해도 답을 잘 하긴 하는데, 이는 ChatGPT가 의도를 잘 파악한 경우에만 가능합니다.
    • 이 부분에 대해서는 아래에서 조금 더 자세히 알아봅시다.

 

프롬프트(Prompt) 란?

생성형 인공지능(Generative AI) 분야에서 프롬프트는 언어 모델로부터 응답을 생성하기 위한 입력값을 의미합니다. GPT의 약자가 "Generative Pre-Trained Transformer" 이듯, 생성형 모델의 한 종류입니다. 따라서 ChatGPT에서 질문 == 프롬프트 라고 이해해도 무방합니다.
 
위에서 언급했듯, 좋은 답변을 얻기 위해서는 질문을 잘해야 합니다. 거대 언어 모델 특징이 프롬프트를 어떻게 작성하냐에 따라서 답변의 방향성이 크게 달라질 수 있습니다. 즉, 프롬프트를 잘 작성해야 한다는 의미입니다. 이러한 수요에 의해 발전하고 있는 분야가 프롬프트 엔지니어링(Prompt Engineering) 분야입니다.
 
요즘 저를 성가시게 하는 SQLAlchemy를 개발한 사람이 누군지 문득 궁금해졌습니다.
2가지 방법으로 ChatGPT(GPT-3.5)에게 질문해 봤습니다.

  • Tell me who invented the SQLAlchemy.
  • Tell me about the person invented the SQLAlchemy.
문맥 상 두 질문은 크게 다르지 않습니다.
 
 

하지만 두 질문에 대한 답변은 양에서부터 큰 차이가 있었습니다. 여기서 알 수 있는 점은 더 높은 품질의 답변을 얻고 싶다면 언어 모델의 특징을 이해하고, 언어 모델이 잘 이해할 수 있는 방식으로 프롬프트를 구성해야 한다는 점입니다.

 

대화 스타일 조정하기

이 글의 수준에서는 스타일 조정 파라미터를 수정할 필요가 없겠지만, 알아두면 좋겠다는 생각에 내용을 추가해 봤습니다.

OpenAI Playground

위 이미지의 사이트는 여기에 들어가면 확인할 수 있습니다. 오른쪽에서 파라미터 설정이 가능한데, 몇 가지만 알아보겠습니다.

  • Temperature: 답변의 창의성과 무작위성을 조정하는 값입니다. 낮을 수록 (예: 0.05) 보다 사실에 근거한 정확한 답변을 제공하고, 높을 수록 (예: 1) 보다 창의적인 결과물을 생성해줍니다.
  • Top_p: 답변의 무작위성을 제어하는 조정 값입니다. Temperature와 마찬가지로 값이 낮을 수록 답변이 보다 정확하고 높아질 수록 창의적이고 광범위해집니다.
  • frequency_penalty: 값이 높을 수록 AI가 흔하지 않은 단어를 답변에 포함할 가능성을 제어합니다. 반대로 값이 0이라면 페널티가 전혀 주어지지 않아서 AI가 흔히 사용되지 않는 단어를 답변에 포함할 가능성이 높아지게 됩니다.
  • presence_penalty: 값이 높을 수록 AI 유사하거나 동일한 단어 문구를 답변 반복할 가능성을 제어합니다. 또한 반대로 값이 0이라면 페널티가 전혀 주어지지 않아서 AI 단어나 문구를 반복할 가능성이 높아지게 됩니다.

 

질문 잘하는 방법

그렇다면 어떻게 해야 ChatGPT에게 원하는 답변을 "잘" 얻을 수 있을까요?
꽤나 명시적인 제안들이 있습니다.
 

1. 영어로 질문하자.

ChatGPT는 영어로 학습된 모델이기 때문에 영어로 질문할 경우 표현이 더 풍부해지는 장점을 누릴 수 있습니다. 더불어 응답 생성 속도도 훨씬 빠릅니다. 크롬 익스텐션 중 프롬프트 지니를 활용해도 좋고, 파파고DeepL을 사용해서 영어로 결과를 넣는 것이 좋습니다. 답변 또한 영어로 생성되지만, 답변의 양과 질의 차이가 클 것입니다.

2. 쉽고 간결하고 구체적으로 질문하자.

불필요한 미사여구를 생략하는 것이 좋습니다. 띄어쓰기 2번 하기, 점 2개 찍기 등 불필요한 모든 것을 제거하는 것이 좋습니다.
"안녕 지피티! 나는 진성! 오늘 날씨도 너무 좋은데 SQLAlchemy를 누가 만들었는지 궁금하구나!!!!!!"
위와 같은 식으로 작성하는 것은 좋지 않습니다. 깔끔하게 작성해야 합니다.

3. "열린" 질문보단 "닫힌" 지시문을 사용하자.

상황에 따라 다르겠지만, 대부분의 경우에 닫힌 지시문으로 작성하는 것이 더 좋습니다.
"SQLAlchemy를 누가 만들었어?" 보다는
"SQLAlchemy를 만든 사람에 대해 소개해줘." 가 더 좋다는 의미입니다.

4. ChatGPT의 역할을 제시하자.

"너는 XXX 분야의 전문가야. 너의 역할은 전문적인 지식을 가지고 나를 도와주는거야." 라고 역할을 제시해 줄 수 있습니다. (가스라이팅)
예시를 들어보면, 아래와 같이 질문하기 전에 역할을 알려줄 수 있습니다.

Your role:
You've been working as a software engineer for 30 years and have a wide range of experience and knowledge. You can help me with my development with your wealth of knowledge.

Questions:
What do I need to consider to write SQLAlchemy well?

5. ChatGPT도 사용자에게 질문할 수 있음을 알려주자.

ChatGPT는 대체로 한 번에 완벽한 답을 알려주려고 합니다. 하지만 한 번에 완벽한 답을 찾는 것은 어렵습니다. 따라서 사용자에게 역으로 질문을 해도 된다고 명시해 주고, 함께 해답을 찾아나가면 더 완벽한 답을 찾을 수 있을 것입니다.

Your role:
You've been working as a software engineer for 30 years and have a wide range of experience and knowledge. You can help me with my development with your wealth of knowledge. You can keep asking me questions until you get the best answer.

Questions:
What do I need to consider to write SQLAlchemy well?

6. 어떤 식으로 답변하면 되는지 형식을 알려주자.

어떤 형태의 답변을 얻길 원하는지 ChatGPT에게 알려주면, 더 빠르게 해답을 찾을 수 있습니다.
답변 양식 혹은 원하는 조건들을 리스트 형식으로 작성해 주면 원하는 답변에 가까워질 수 있습니다.

Your role:
You've been working as a software engineer for 30 years and have a wide range of experience and knowledge. You can help me with my development with your wealth of knowledge. You can keep asking me questions until you get the best answer. And follow the additional instructions below.

Instructions:

- Answer in 1,000 characters or less.
- Answer in a list format.
- Answer it simple enough for a 9-year-old to understand.

Questions:
What do I need to consider to write SQLAlchemy well?

7. 히스토리 기능을 활용/주의하자.

ChatGPT에는 채팅방 별 히스토리를 저장하고, 답변 생성 시 활용하고 있습니다. 잘 활용하면 더 정확한 답을 얻는 데 도움이 될 수 있습니다. 하지만 이전 질문/답변 히스토리를 참조해서 다른 질문에도 비슷하게 답변을 할 가능성이 있습니다. 전혀 다른 내용으로 대화하길 희망한다면 새로운 채팅방을 만드는 것을 고려해봐야 합니다.

억지부리기

 

제 생각은,

ChatGPT를 충분히 잘 활용할 수 있는 분이라면 ChatGPT Plus를 구독해서 사용해 보는 것도 좋다고 생각합니다. 요즘 저도 구독해서 GPT-4를 사용하고 있는데, GPT-3보다 더 풍부하게 표현을 해줘서 업무에도 잘 활용하고 있습니다!!
 

References