API기반 Chat GPT 유료버전을 저렴하게 사용하기#

배경/문제#

OpenAI에서 제공하는 Chat GPT는 유료 버전을 사용하기 위해 매달 20달러의 구독료를 지불해야 합니다.
(2024년 6월 기준, 한국의 경우 환율을 적용하면 약 3만원의 구독료가 지불됩니다.)
사용량이 적은데 매달 20달러를 지불하는 것은 비싸게 느껴집니다.

개선#

이런 문제를 개선하기 위하여, 다음과 같이 간단하게 코딩하여 사용한 만큼만 지불하는 방법을 설명하겠습니다.
OpenAI는 Chat Bot의 API를 제공하며, 사용한 만큼만 사용료를 지불하는 방식입니다.
따라서, 매달 사용량이 적다면 구독하는 것 보다 API를 사용하는 것이 이득이 될 수 있습니다.

1. 금액 충전 및 api key 발급 받기#

먼저 금액을 적립한 뒤 api를 사용할 수 있으며, 사용량 만큼 적립금에서 차감됩니다.
다음의 웹 사이트에서 금액을 충전하고, api key를 발급 받으세요.

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에게 질문을 던지는 기능이 구현되어 있습니다.

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 페이지에서 확인할 수 있습니다.

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()를 적절히 사용해야 합니다.