d

Chat GPT 유료 Model을 사용한 만큼만 지불하는 방법 (No, 구독!)

 

배경/문제

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