API기반 Chat GPT 유료버전을 저렴하게 사용하기#
배경/문제#
OpenAI에서 제공하는 Chat GPT는 유료 버전을 사용하기 위해 매달 20달러의 구독료를 지불해야 합니다.
(2024년 6월 기준, 한국의 경우 환율을 적용하면 약 3만원의 구독료가 지불됩니다.)
사용량이 적은데 매달 20달러를 지불하는 것은 비싸게 느껴집니다.
개선#
이런 문제를 개선하기 위하여, 다음과 같이 간단하게 코딩하여 사용한 만큼만 지불하는 방법을 설명하겠습니다.
OpenAI는 Chat Bot의 API를 제공하며, 사용한 만큼만 사용료를 지불하는 방식입니다.
따라서, 매달 사용량이 적다면 구독하는 것 보다 API를 사용하는 것이 이득이 될 수 있습니다.
1. 금액 충전 및 api key 발급 받기#
먼저 금액을 적립한 뒤 api를 사용할 수 있으며, 사용량 만큼 적립금에서 차감됩니다.
다음의 웹 사이트에서 금액을 충전하고, api key를 발급 받으세요.
- 금액 적립 하는 곳 :
https://platform.openai.com/settings/organization/billing/overview - api key 발급 받는 곳 :
https://platform.openai.com/api-keys - 사용량에 따른 가격표 :
https://openai.com/api/pricing/
2. chat() 함수 구현하기#
pip install openai을 통하여 package를 설치하세요.
OpenAI instance를 client = OpenAI(api_key='YOUR_API_KEY') 와 같이 만들 수 있으며, 발급받은 api key를 입력하세요.chat_history List 는 질문/답변 history를 쌓아 두는 곳입니다. 이곳에 history를 쌓아두지 않는다면 이전 질문을 기억하지 못합니다.
이전 질문을 비우고 싶다면 chat_clear()를 호출하세요.chat(model, prompt) 안에는 ChatGPT Model에게 질문을 던지는 기능이 구현되어 있습니다.
- 참조(OpenAI API Quickstart) :
https://platform.openai.com/docs/quickstart
from openai import OpenAI
client = OpenAI(api_key='YOUR_API_KEY')
chat_history = []
def chat_clear():
global chat_history
chat_history = []
def chat(model, prompt):
msg=[ {"role": "system", "content": "You are a helpful assistant."} ]
for element in chat_history:
msg.append(element)
msg.append({"role": "user", "content": prompt})
response = client.chat.completions.create(
model=model,
messages=msg,
)
print(response.usage)
print('\n')
print(response.choices[0].message.content)
chat_history.append({"role": "user", "content": prompt})
chat_history.append({"role": "assistant", "content": response.choices[0].message.content})3. chat() 함수를 사용하여 질문하고 답변받기#
다음과 같이 chat()를 사용하여 Chat GPT에게 질문을 해봅시다.
이때, 첫번째 인자에는 사용할 Model을 선택하고, 두번째 인자에 질문을 입력하면 됩니다.
Model 종류는 pricing 페이지에서 확인할 수 있습니다.
- Model 종류 확인하기 :
https://openai.com/api/pricing/
chat('gpt-4-turbo', '1+1 ?')위와 같이 질문하면 아래와 같은 답변을 얻을 수 있습니다.
CompletionUsage(completion_tokens=8, prompt_tokens=21, total_tokens=29)
1 + 1 equals 2.첫번째 줄에 표시되는 정보는 api 사용량을 의미합니다.
- completion_tokens = output tokens
- prompt_tokens = input tokens
- total_tokens = input + output tokens
따라서, 위 token 사용량과 pricing 페이지에 명시된 금액을 통하여 사용금액이 얼마인지 계산할 수 있습니다.chat_history List 에 불필요한 질문/답변 history를 계속 쌓아가면서 사용한다면, 불필요한 금액이 과금되므로 chat_clear()를 적절히 사용해야 합니다.