내 프로젝트에 ChatGPT 끼얹기

설탕·2023년 5월 3일
0
post-thumbnail

최근 개인 프로젝트로 ChatGPT가 맛집 리뷰를 생성해주는 서비스쩝쩝박사를 만들었다.

이번에 쪼랩에서 팝업 콘서트 2회가 있었다. 마침 주제가 업무자동화(ft. 인공지능&ChatGPT)이길래 프로젝트 소개도 할 겸 OpenAI API 활용법을 이야기해볼까 해서 스몰토크 연사로 신청해서 발표했는데, 선생님들께서 많은 관심을 가져주셔서 이렇게 글로도 남기게 되었다.

내향형 75%인 내가 자발적으로 발표를 하다니...

OpenAI API 활용해서 내 프로젝트에 ChatGPT 넣기 🤖

주제 선정

맛집 리뷰 생성
이유: 맛집 블로그 쓰려고 하는데 글 쓰기 너무 귀찮다...! 대충 몇 단어, 몇 문장 입력하면 ChatGPT가 완성된 글로 만들어주면 좋겠다.

명령어 설계 (Prompt design)

뭐 먹었는지만 알려주고 써 달라고 하면 어떻게 될까?

귀찮으니까 일단 대충 던져보자.

'즉석떡볶이' 단어 하나만 갖고 글 한 편 뚝딱해 준 건 좋은데...
광어떡볶이요?

아무래도 좀 더 구체적으로 명령어를 써야겠다. 그런데 어떻게?

OpenAI 공식문서 가이드를 따르자

ChatGPT의 답변을 원하는 방향으로 얻기 위해서는 내가 주문을 잘 설계해서 넣어야 한다.
OpenAI 공식문서의 프롬프트 디자인 가이드에서 프롬프트를 생성하는 방법을 자세히 설명하고 있다. 기본적인 가이드라인은 다음과 같다.

  • 보여주고 말하세요Show and tell. Make it clear what you want either through instructions, examples, or a combination of the two. If you want the model to rank a list of items in alphabetical order or to classify a paragraph by sentiment, show it that's what you want.
  • 양질의 데이터를 제공하세요Provide quality data. If you're trying to build a classifier or get the model to follow a pattern, make sure that there are enough examples. Be sure to proofread your examples — the model is usually smart enough to see through basic spelling mistakes and give you a response, but it also might assume this is intentional and it can affect the response.
  • 설정을 확인하세요Check your settings. The temperature and top_p settings control how deterministic the model is in generating a response. If you're asking it for a response where there's only one right answer, then you'd want to set these lower. If you're looking for more diverse responses, then you might want to set them higher. The number one mistake people use with these settings is assuming that they're "cleverness" or "creativity" controls.

그래도 감이 안 온다면? 공식문서에는 친절하게 여러 가지 예시도 나와 있다.
마침 내가 하려는 프로젝트 주제와 똑같은 예시가 있어서 바로 참고했다.

로그인하면 Playground에서 직접 프롬프트를 수정하고 여러 가지 설정을 바꿔가면서 테스트해볼 수도 있다. (무료 계정도 가능하다.)

정보를 항목화해서 알려준다면?

그럼 이제 프롬프트를 더 정교하게 만들어서 다시 테스트해보자.

이제 좀 내가 원하는 답변이 나온다. 이제 어떤 항목을 넣고 뺄지만 정하면 되겠다.

프롬프트_진짜최종

다음 정보를 바탕으로 맛집 리뷰를 작성해 줘.

가게 이름: 집게리아
가게 위치: 바닷속
먹은 음식: 게살버거가 고소하고 맛있어요.

리뷰:

첫 줄과 마지막 줄은 상수로 고정하고, 가운데에는 사용자가 입력한 항목 정보를 변수로 넣어서 최종 프롬프트를 구성했다.

  • 필수 항목: 가게 이름, 가게 위치, 먹은 음식
  • 선택 항목: 가격, 서비스, 분위기, 청결, 예약/웨이팅, 같이 가기 좋은 사람

각 항목은 가격: 가성비 좋은 편과 같이 항목명: 사용자 입력값으로 변환한다.

Request body 설정

마찬가지로 공식문서에 각 설정에 대한 설명이 잘 나와있다.
내가 사용한 설정은 다음과 같다.

{
  model: "text-davinci-003",
  prompt,
  temperature: 0.7,
  max_tokens: 2048,
  top_p: 1,
  frequency_penalty: 0,
  presence_penalty: 0,
};

model

흔히 ChatGPT로 통칭되어 알려져있지만, 여러 가지 모델이 있기 때문에 목적에 부합하는 것을 고르면 된다. 나는 채팅 기능이 아니라 글쓰기 기능이 목적이기 때문에 gpt 모델이 아닌 text 모델을 선택했다.
그런데 공식문서에서는 gpt-3.5-turbo 모델은 text-davinci-003 모델과 거의 비슷한 성능인데 토큰당 비용이 10%라서 gpt-3.5-turbo를 쓰는 게 낫다고 추천하긴 한다.

temperature

What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic.

temperature 숫자가 높으면 ChatGPT가 다양한 시도를 하면서 랜덤한 답변을 내놓고, 숫자가 낮으면 가장 확실한 답변을 항상 고정적으로 내놓는다.
ChatGPT 창작의 자유는 필요하지만 거짓말이 섞이면 곤란하기에 나는 0.7로 설정했다.

여기선 temperaturetop_p 둘 다 설정했지만, 공식문서에는 둘 중 하나만 설정하는 것을 추천하고 있다.

max_tokens

답변(completion)에서 생성할 수 있는 토큰의 최대값이다.
이때 max_tokens와 프롬프트의 토큰을 더한 값이 해당 모델의 토큰 최대값을 넘을 수 없다.
내가 선택한 모델인 토큰 최대값은 4,097이므로 입력값 토큰과 출력값 토큰의 합이 4,097을 초과할 수 없다. 가끔 프롬프트+답변이 길어져서 max_tokens를 초과하면 말하다 만 것처럼 답변이 잘려 나오는 모습을 볼 수 있었다. 그래서 넉넉하게 2048 정도로 설정해주었다.

토큰이란?

ChatGPT는 글을 토큰 단위로 쪼개어 해석한다. 토큰은 낱말 하나가 될 수도 있고 낱말 안에서도 쪼개어진 글자들의 묶음이 될 수도 있다.
토큰 계산하기

이렇게 OpenAI API로 요청을 보내면 끝! ChatGPT가 써주는 리뷰를 기다리자! 😋

profile
공부 기록

0개의 댓글