기다리고 기다리던 챗GPT API가 나왔습니다. 공식 페이지 및 사용법 그리고 테스트 한 결과를 간단하게 살펴보겠습니다. 결론부터 말씀드리면 속도는 4.76배 향상(제가 테스트한 경우에 한정), 비용은 10배 절감됩니다.
![](https://cdn.aifactory.space/images/20230302093837_YdYT.png)
챗GPT 모델 “gpt-3.5-turbo”
ChatGPT API에서는 챗GPT와 동일한 모델인 gpt-3.5-turbo을 사용합니다. 챗팅 외의 사용함에 있어서도 좋은 성능을 보이고 있어, 약간의 프롬프트 조정만으로 text-davinci-003 모델 대신 gpt-3.5-turbo 모델을 사용할 수 있다고 하네요. 공식 페이지를 보면 두 가지 버전을 제공하고 있는데요. 정식은 gpt-3.5-turbo 이나 6월 1일까지 3개월 동안 개발자 피드백을 받기 위한 gpt-3.5-turbo-0301 모델도 따로 출시되어 있습니다.
![](https://cdn.aifactory.space/images/20230302075958_Fnge.png)
채팅을 위한 태스크 “Chat completions”
gpt-3.5-turbo와 같이 Chat completions 태스크도 추가되었네요. 이 태스크를 통해 아래 업무를 수행할 수 있다고 합니다. 익히 알고 있는 활용 사례이죠?
- 전자 메일 또는 기타 문서 초안 작성
- 파이썬 코드 작성
- 문서 집합에 대한 질의응답
- 대화형 에이전트 만들기
- 소프트웨어에 자연어 인터페이스 제공
- 다양한 주제가 가능한 튜터
- 번역
- 게임에 사용할 캐릭터
API 사용법
ChatML 이라는 새로운 형식을 사용합니다. 메시지와 메타데이터가 포함되어 있습니다. 아래와 같이 간단하게 API를 호출할 수 있습니다.
# Note: you need to be using OpenAI Python v0.27.0 for the code below to work
import openai
openai.api_key = "사용자 키"
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who won the world series in 2020?"},
{"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
{"role": "user", "content": "Where was it played?"}
]
)
사용 방법은 아래와 같습니다.
- messages 안에 “role”과 “content”에 내용을 채워서 다음 메시지를 요청합니다.
- “role”은 시스템, 사용자, 보조자 중에 지정합니다.
- 가장 먼저 시스템 메시지로 시작합니다. 역할을 지정하는 용도로 사용합니다.
- 사용자 메시지는 보조자에게 지시를 내립니다.
- 보조자 메시지는 이전 응답을 지정하는 데 사용합니다. 즉 이전 대화 기록을 참조할 수 있도록 정보를 제공하는 용도입니다.
이 보조자 메시지가 중요한데요. 모델은 대화를 저장하고 있지 않기 때문에 API를 사용할 때마다 이전 기록을 함께 제공합니다. 최대 토큰 한계에 도달하지 않도록 최적화시켜야 합니다. 위와 같이 API를 호출하면 응답은 아래와 같이 받습니다.
{
"choices": [
{
"finish_reason": "stop",
"index": 0,
"message": {
"content": "The 2020 World Series was played at Globe Life Field in Arlington, Texas.",
"role": "assistant"
}
}
],
"created": 1677713613,
"id": "chatcmpl-6pQEvdTvba4OrGtwXw8OVbC8NXqq1",
"model": "gpt-3.5-turbo-0301",
"object": "chat.completion",
"usage": {
"completion_tokens": 19,
"prompt_tokens": 56,
"total_tokens": 75
}
}
파이썬 코드에서 응답 메시지만 사용할 때는 아래 코드를 사용합니다.
response[‘choices’][0][‘message’][‘content’]
토큰 관리
자연어 처리에서는 처리 최소 단위인 “토큰”이라는 개념을 두고 있습니다. 예를 들어, 문자열 "ChatGPT is great!"는 6개의 토큰으로 인코딩됩니다. [Chat], "G", "PT", "is", "great", "!]. 토큰이 다 돈이고 또한 최대 토큰 개수 제한되어 있기 때문에 토큰 수를 계산하면서 관리하는 것이 중요합니다.
- 중요! 입력과 출력 모두 토큰으로 계산됩니다. 즉 입력 메시지도 토큰 사용량으로 집계되기 때문에 입출력 토큰 모두 신경써야 합니다.
사용된 토큰은 응답 메시지에 “total_tokens”으로 표시되어 있습니다. 대화 형식이긴 하지만 최대 토큰 수가 제한되어 있기 때문에 그 안에서 해결해야 합니다.
시스템 메시지
이 부분은 향후 바뀔 수도 있다고 하지만 현재 버전 모델을 잘 동작시킬 수 있는 방법이기 때문에 살펴보겠습니다. API 사용법에서 보시면, 가장 첫 메시지가 시스템 메시지입니다. 역할을 지정하는 것이라고 생각하시면 됩니다.
{"role": "system", "content": "You are a helpful assistant."}
원하는 출력을 얻지 못했을 경우에는 아래 답변 형식을 지정합니다.
- 지시사항을 보다 명확하게 합니다.
- 답변 형식을 지정합니다.
- 모델에게 단계별로 생각하도록 요청합니다.
- 답변을 결정하기 전에 사전 토론 내용을 제공합니다.
프롬프트 엔지니어링에 대해서 좀 더 알고싶으신 분은 여기로…
추가 옵션은 다음과 같습니다.
- 온도 : 온도의 경우 0.8과 같이 높은 값을 사용하면 출력이 더 랜덤해지고 0.2와 같이 낮은 값을 사용하면 출력이 더 집중적이고 결정적입니다.
- 최대 토큰 : 응답을 특정 길이로 제한할 수 있습니다.
Completions 대신 Chat을 사용하는 이유 - 결국 돈
OpenAI API를 사용하시는 분들은 text-davinci-003를 많이 사용하십니다. 하지만 gpt-3.5-turbo가 1K 토큰당 0.002달러로 10배 저렴하기때문에 chat으로 태스크 변환이 가능하다면 이를 사용하는 것이 더 경제적입니다. 변경하는 방법도 그리 어렵지 않습니다.
변경 전 (Completions)
보통 아래와 같이 메시지(프롬프트)만 전달했을텐데요.
Translate the following English text to French: “{text}”
변경 후 (Chat)
아래와 같이 “role”과 “content”로 구성하여 요청하면 됩니다.
[
{“role”: “system”, “content”: “You are a helpful assistant that translates English to French.”},
{“role”: “user”, “content”: ‘Translate the following English text to French: “{text}”’}
]
시스템 역할 메시지는 반드시 필요한 것은 아니기 때문에 아래와 같이 작성할 수 있습니다.
[
{“role”: “user”, “content”: ‘Translate the following English text to French: “{text}”’}
]
ChatGPT API를 실제로 사용해보자!
타로GPT라는 이름으로 챗GPT와 타로게임을 하는 프롬프트를 제작했었는데, API를 이용해서 살펴보겠습니다. 저 역시 ChatGPT가 나오기 전 Completions으로 API 연동했었는데, 이번에 ChatGPT로 바꿔봤습니다. 타로GPT에 대해서 궁금하시면 >> 여기로
![](https://cdn.aifactory.space/images/20230302091320_cZWM.png)
챗GPT를 브라우저에서 사용한 것을 캡처한 것입니다.
![](https://cdn.aifactory.space/images/20230301173828_wkIf.gif)
Completion 사용 (변경 전)
쿼리
import openai
openai.api_key = "사용자키"
response = openai.Completion.create(
model="text-davinci-003",
prompt="당신은 타로 전문가입니다. \n1. 하단의 [질문]을 이해한 후 [... 이하 생략
temperature=0.3,
max_tokens=1607,
top_p=1,
frequency_penalty=0,
presence_penalty=0
)
print(response['choices'][0]['text'])
응답
Processing Time : 40.06985569000244
이번 타로 카드로 이직에 대한 질문에 대한 답변을 찾아보겠습니다. 임의로 선택한 카드는 The Fool(어리석은 자), The Magician(마법사), The High Priestess(대여사제)입니다.
The Fool 카드는 새로운 시작을 의미합니다. 이직을 하고 싶다는 생각은 새로운 시작을 의미하며, 이는 당신의 생각을 따르는 것이 좋다는 것을 의미합니다.
The Magician 카드는 자신의 능력을 이용하여 이루고자 하는 목표를 달성하는 것을 의미합니다. 이직을 하고 싶다는 생각을 따라가려면 당신의 능력을 이용하여 목표를 달성해야 합니다.
The High Priestess 카드는 자신의 내면을 이해하고 자신의 목표를 이루기 위해 자신의 내면을 이해하는 것을 의미합니다. 이직을 하고 싶다는 생각을 따라가기 위해서는 당신의 내면을 이해하고, 자신의 목표를 이루기 위해 자신의 내면을 이해해야 합니다.
종합하여 보면, 이직을 하고 싶다는 생각은 새로운 시작을 의미하며, 이를 따르기 위해서는 당신의 능력을 이용하여 목표를 달성하고, 자신의 내면을 이해하고 자신의 목표를 이루기 위해 자신의 내면을 이해해야 합니다. 또한 이직을 하기 위해서는 각종 준비를 잘 해야하며, 이직하기 전에 자신의 능력과 목표를 명확하게 정해야 합니다.
ChatCompletion 사용 (변경 후)
쿼리
import openai
openai.api_key = "사용자키"
response = openai.Completion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "당신은 타로 전문가입니다. \n1. 하단의 [질문]을 이하 생략
{"role": "user", "content": "[질문]: \"이직을 하고 싶은데, 이직을 하면 좋을 지, 한다면 어떻게 해야할 지 알려주세요.\"\n"},
{"role": "system", "content": "\n\n[타로카드목록] \n{카드 번호}, {카드 이름} 이하 생략
{"role": "assistant", "content": "해석:"}
)
return response['choices'][0]['message']['content']
응답
Processing Time : 8.417980670928955
이 질문에 답하기 위해, 세 장의 카드를 골라 해석해보았습니다.
1. The Hermit (음양 : 음)
이 카드는 외부의 영향과 주변 소음에서 독립적인 시간을 가져야 한다고 하는 메시지를 전달합니다. 이 카드는 현재 있는 상황에서 벗어나 조용한 여유로운 공간에서 스스로를 돌아봐야 함을 알려줍니다. 이로써 여러 분이 이직을 고민하며 질문을 하게 된 것 같습니다. 카드는 이직을 결정해야 하는 현재의 상황에서 과감한 결정보다는 시간이 필요하다는 것을 알려줍니다. 스스로와의 대화와 상황에 대한 심사숙고를 통해 미래에 대한 변화를 준비할 시간이 필요하다는 의미가 될 수 있습니다.
2. Six of Swords (음양 : 양)
이 카드는 변화와 진보에 대한 메시지를 전달합니다. 현재 상황에서 새로운 시도를 하는 것이 중요함을 말해줍니다. 이 카드는 안정적인 상황에서 벗어나 미래로 나아갈 준비를 해야 한다는 것을 알려줍니다. 적극적이고 개척적인 진취적인 태도가 필요하다는 의미가 될 수 있습니다.
3. Three of Cups (음양 : 양)
이 카드는 성공적인 협업이 가능함을 말해줍니다. 이직을 할 때 다른 지원자들 보다 더 우수한 인재로 인지될 수 있을 것입니다. 이 카드는 또한 축복과 성공, 즐거움을 나눌 수 있는 친구들과 함께 미래를 바라볼 수 있다는 것을 상기시킵니다. 이로써 여러분이 이직을 결정할 때는 주변 지인들과 함께 의견을 나누어 보는 것도 좋을 것입니다.
종합적으로, 이 세 장의 카드들은 변화를 향해 나아가야 한다는 결론을 내릴 수 있습니다. 전략적인 계획과 조용한 여유로운 분위기에서 끊임없는 변화를 추구해야 할 것입니다. 이를 위해 여러분 스스로에게 질문을 던져보며, 심사숙고를 하는 시간이 필요할 것입니다. 예상치 못한 성공이 당신을 기다리고 있으며, 그에 대한 기대감은 주변 지인들과 함께 나누는게 좋을 것입니다.
결과 내용 자체는 매번 실행시킬 때마다 달라 비교하기 힘들지만, 처리 속도는 4.76배입니다! 가격도 10배 저렴하니 사용해볼만 합니다.
사용자 전용 인스턴스
사용자에 특화된 전용 인스턴스도 제공 가능합니다. 애저에서 실행되고, 사용 기간 당 비용을 지불하고 아래 기능을 사용할 수 있습니다.
- 인스턴스 로드
- 더 긴 컨텍스트 사용
- 모델 스냅샷 고정
하루 최대 4억 5천만 개의 토큰을 실행하는 사용처에서 경제적인 의미가 있고 하드웨어 성능을 최적화할 수 있어서 공유 인프라 비용도 절감할 수 있다고 합니다.
사례
공식 블로그에 보시면 아래 사례에 대해서 소개가 되어 있습니다.
- 스냅챗 : 사용자에 특화된 전용 인스턴스도 제공 가능합니다. 애저에서 실행되고, 사용 기간 당 비용을 지불하고 아래 기능을 사용할 수 있습니다.
- Quizlet : 채팅 기반의 학습 플랫폼
- Instacart : 음식 주문에 도움을 줌
- Shop : 쇼핑하는 데 있어 최적화된 개인화 서비스 제공
- Speak : (자랑스런 한국앱!) 채팅 기반의 영어 학습 앱
참고
- https://openai.com/blog/introducing-chatgpt-and-whisper-apis
- https://platform.openai.com/docs/guides/chat/
그리고 3월, 4월에 있을 챗GPT 러닝데이 및 해커톤 홍보도 함께 드립니다.
챗GPT 러닝데이 & 해커톤 - 전과정 무료
3월 한 달동안 매주 화요일 저녁에 챗GPT를 이해하기 위한 기초 내용 및 이론을 배우고, 실습을 해본 뒤 실제 개발과 활용을 어떻게 해야할 지 살펴봅니다. 이어서 4월에는 지금까지 배운 것들을 활용하여 프롬프트, 확장앱, API 기반 서비스를 만드는 해커톤을 진행합니다. 챗GPT에 관심있는 기관 혹은 서비스나 기술을 알리고싶은 기업 후원을 받고 있으니 아래 링크에서 신청 부탁드립니다.
- 챗GPT 해커톤 후원사 모집 (~ 4월 18일 23시) >> https://aifactory.space/competition/detail/2292
- 챗GPT 해커톤 참가자 모집 (~ 4월 18일 23시) >> https://aifactory.space/competition/detail/2290
- 챗GPT 러닝데이 안내 (3월달 매주 화요일 저녁 7시~9시 온라인) >> https://aifactory.space/learning/detail/2291
![](https://cdn.aifactory.space/images/20230305041232_rtmV.png)
![](https://cdn.aifactory.space/images/20230305041335_aBUL.png)
문의
- 인공지능팩토리 김태영 대표이사
- tykim@aifactory.page