AI/LLM

OpenAI API 사용법 정리 (Python)

제라키엘7 2024. 3. 13. 14:55

OpenAI API

최근 업무 관련으로 OpenAI의 API 를 사용할 일이 있어 찾아보았는데, 홈페이지 인터페이스가 변경된 모양이라 좀 헤맸기에 이 김에 정리해 보았다.

OpenAI API는 우리가 아는 ChatGPT 와 같은 대형 LLM 모델로부터 데이터를 생성할 때, 스크립트를 통해 자동화된 방법으로 데이터를 생성할 수 있도록 API를 제공한다. 이를 통해 ChatGPT를 이용한 서비스를 개발하거나 필요한 데이터를 대량으로 생성하는 등의 일을 할 수 있다.

최근에는 이미지, TTS 등 멀티 모달도 지원하는 것 같은데, 이 부분은 일단 스킵.


OpenAI API 사이트

일단 로그인 (Sign Up)을 해야 한다.

처음 가입하면 일정 기간동안 사용할 수 있는 $18의 무료 크레딧을 제공한다. 개인적으론 이전에 가입된건지, ChatGPT 계정이랑 연동이 된 건진 모르겠지만 이미 만료되어 사용 불가... 대략 3개월 정도 사용 가능한 것으로 보인다.

아래는 로그인 후 보이는 메인 페이지.


메인 페이지

사용량 및 비용

중요한 건 사이드 바에 있는 사용량 정보이다.


사용량 정보 메뉴

위의 메뉴로 들어가면 아래와 같은 식으로 현재 사용량이 나온다.


사용량 정보

기본적으로 결제 정보 등록 전에는 무료인 $18 만 사용 가능하고, 결제는 최소 $5 부터 사용량 만큼 요금이 부가된다. 요금은 토큰 단위로 계산되므로, API를 사용하기 전에 들어가는 쿼리의 토큰 개수를 계산해 두는 편이 좋다. 덧붙여 한국어의 경우 글의 길이에 비해 토큰의 개수가 매우 많이 계산되는 경향이 있다.

토큰 개수 계산은 링크를 참고

가격은 100만 개 (1M) 기준으로 표기되어 있다.

Model 최대길이 입력 출력
gpt-4-0125-preview 128,000 $10.00 $30.00
gpt-4-1106-preview 128,000 $10.00 $30.00
gpt-4-1106-vision-preview 128,000 $10.00 $30.00
gpt-4 8,192 $30.00 $60.00
gpt-4-32k 32,768 $60.00 $120.00
gpt-3.5-turbo-0125 16,385 $0.50 $1.50
gpt-3.5-turbo-instruct 4,096 $1.50 $2.00

가격 참조 링크, 모델 참조 링크

Python API

설치는 간단하게 pip으로 가능하다.

!pip install openai

아래 항목들을 참조하면 도움이 된다.

사용하기 위해서는 우선 API 키가 필요하다. API 키는 사이드 바의 아래 메뉴에서 들어가 만들 수 있다.

import openai

openai.api_key = 'sk-...'

response = openai.ChatCompletion.create(
    model="gpt-4-0125-preview", # 모델 참조
    messages=[
        {"role": "system", "content": "You are a poetic assistant."},
        {"role": "user", "content": "Compose a poem that explains the concept of recursion in programming."}
    ],
    # 파라미터 참조
    n = 1, 
    temperature = 0.7,
    max_tokens = 64,
    top_p = 1
)

답변 결과는 아래와 같은 방식으로 확인할 수 있다. 처음에는 어째서 예제코드에서 response의 답변을 확인하는데 저렇게 번거롭나 했는데... n 개수에 따라 choices에 결과값이 list 형태로 들어가기 때문이었다. 개인적으로, 하나의 request로 데이터를 여러 개 생성해야 하는 일이 있었기 때문에 유용한 기능이었다.

print(len(response.choices)) # 파라미터 n 개수만큼 생성
for i,c in enumerate(response.choices):
    print(f"Response : {i}")
    print(c.message["content"])

사용량은 아래와 같은 방식으로 확인 가능하다.

print(response.usage)

결과는 아래와 같은 형식으로 나온다. 참고 실제 사용된 토큰 수 등도 확인 가능하다.

{
  "choices": [
    {
      "finish_reason": "length",
      "index": 0,
      "logprobs": null,
      "text": "\n\n\"Let Your Sweet Tooth Run Wild at Our Creamy Ice Cream Shack"
    }
  ],
  "created": 1683130927,
  "id": "cmpl-7C9Wxi9Du4j1lQjdjhxBlO22M61LD",
  "model": "gpt-3.5-turbo-instruct",
  "object": "text_completion",
  "usage": {
    "completion_tokens": 16,
    "prompt_tokens": 10,
    "total_tokens": 26
  }
}

결과는 바로 json 으로 dump가 가능하다.

import json

with open(outfile, "w", encoding='utf-8') as fp:
    json.dump(response, fp, ensure_ascii=False)

디버그

Exception has occurred: RateLimitError

사용 가능한 크레딧 용량이 없는 경우 아래와 같은 에러가 발생한다.



덧붙여 결제 전에 만든 API 키의 경우, 결제 후에도 위와 같은 에러가 발생했다. 이는 새로 키를 만들어 새로운 키를 적용하여 해결하였다.

참조

주요 링크 정리
OpenAI API 사이트
토큰 카운트
가격 참조