본문 바로가기
개발 관련 이야기

OpenAI API 사용하기

by 꿈틀쓰 2023. 3. 14.
요즘 이슈 ChatGPT

요즘 ChatGPT가 매우 핫한 이슈이다. 영어 뿐만 아니라 한글도 자연스럽게 구사함은 물론이고 복잡한 말도 잘 이해하고 답을 주는 AI를 보고 전세계가 놀랐다.

 

그렇다면 ChatGPT는 정확히 무엇일까?

ChatGPT는 OpenAI에서 만든 챗봇 서비스이다. 이 서비스는 GPT-3.5를 기반으로 하고 있다. 즉, 트랜스포머 기반의 랭귀지 모델인 GPT-3.5를 기반으로 사람들이 사용할 수 있게 서비스화 한 것이다.

 

OpenAI는 본래 비영리 연구단체로 GPT-2까지는 모델을 공개하였지만 GPT-3 부터는 공개를 하지 않고 유료로 api를 호출하여 사용하게끔 하고 있다. (사람들 말로는 MS의 입김이라고 한다..) 특히, 초기 공동 창업자였던 테슬라의 일론 머스크는 이번에 ChatGPT 서비스를 유료화한 것을 두고 더 이상 "Open"이 아니라며 비판하였다.

 

 

API 사용법

설명은 이만하고 본론으로 들어가겠다. ChatGPT는 웹에서 서비스로 이용할 수 있으니 어려울 것이 없다. 그렇다면 gpt 모델을 이용해서 서비스를 만들어서 배포하고 싶다면 어떻게 해야할까? 이를 위해 OpenAI는 유료로 API를 제공하고 있다.

 

사용법은 간단하다. 아래 4단계만 거치면 된다.

  1. First things first, OpenAI에 회원가입을 한다. (1번호 당 2계정만 가능하며 free credit은 1번호로 제한된다.)
  2. Secret key를 확인한다.
  3. 사용할 모델을 선택한다.
  4. API를 사용한다.

 

1. 회원가입

이 부분은 많은 설명은 생략하겠다. 이 글을 보는 사람 중에 회원가입에 어려움을 겪을 사람은 없을 것이니깐? 암튼 메일과 전화번호를 인증하면 바로 로그인이 가능하다.

 

 

2. Secret key 확인

우상단의 본인 프로필을 누르면 'View API keys" 메뉴가 있다. 여기로 들어가면 키 생성/삭제가 가능하다. 하지만 중요한 점은 키 생성 시에 단 한번만 조회할 수 있으므로 해당 키를 안전한 곳에 보관하여 필요한 사람만 공유해야 한다. 키를 분실해도 다시 조회를 할 수 없기 때문에 삭제 후 재생성해야 한다는 점을 기억하자.

 

 

 

3. 사용할 모델 선택

https://openai.com/pricing

 

Pricing

Simple and flexible. Only pay for what you use.

openai.com

 

위 사이트는 모델별 과금 안내 페이지이다. ChatGPT에서 사용한 모델과 동일한 모델은 chat 모델인 gpt-3.5-turbo이다.

해당 모델은 1000 토큰 당 0.002$이다. 다른 모델을 사용하고 싶다면 Instruct GPT에 ada/curie/babbage/davinci 중에 선택해도 된다.

 

테스트를 해보고 싶다면 Playground 메뉴로 들어가서 테스트해보자. 파라미터값도 변경하고 모델도 쉽게 선택하여 테스트할 수 있다. 자신에게 맞는 모델을 몇번 테스트 후에 선택하는 것이 좋겠다.

 

Playground 메뉴 화면

 

Mode : 일반 대화 및 Q&A라면 Complete로 두면 된다.

Model : 선택 가능한 모델

Temperature : 얼마나 창의적인가에 대한 파라미터(1에 가까울 수록 창의적임)

Maximum length : input + output 토큰의 상한

 

이 정도만 알아도 테스트하는데는 문제 없을 것이다.

 

토큰이란 모델에 input으로 들어가는 단위라고 생각하면 된다. 영어의 경우 평균적으로 1단어 당 1.4 토큰이라고 한다. 하지만 한글의 경우 글자당 2~2.5 토큰, 많게는 6 토큰까지 나오기도 한다.

토큰이 어느정도 인지 계산하고 싶다면 https://platform.openai.com/playground 플레이그라운드에서 글자를 넣으면 오른쪽 하단에 토큰 수가 나온다.

 

 

4. API 사용

사용 환경은 CLI / Python / Node.js / cURL 이 OpenAI에서 제공하는 공식 사용 환경이다. 이 외에도 오픈소스로 다양한 언어/환경에서 사용할 수 있지만 나는 개인적으로 추천하진 않는다. 뭐 테스트로는 괜찮지만 실제 배포할 거라면 장기적으로 유지보수가 잘 되는 것이 좋으니깐.

 

여기서는 Python으로 예시를 보여주겠다.

 

 

4.1. openai 라이브러리 설치

pip install --upgrade openai

 

4.2. 환경변수 설정

export OPENAI_API_KEY="<OPENAI_API_KEY>"

 

4.3. API 사용

import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")

completion = openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "user", "content": "Hello!"}
  ]
)

print(completion.choices[0].message)

참 쉽쥬?

 

다른 언어로 하고 싶다면 

https://platform.openai.com/docs/api-reference/chat

 

OpenAI API

An API for accessing new AI models developed by OpenAI

platform.openai.com

여기서 다른 언어를 선택하면 샘플 코드를 확인할 수 있다.

 

 

 

 

 

더 복잡한 작업을 하고 싶어요

 

Q : Fine-tuning을 하고 싶어요

A : 2023.03.14일 작성일 기준으로 아직까지 gpt-3.5 모델은 fine-tuning이 불가합니다 ㅠ  대신 gpt-3 모델(ada/curie/babbage/davinci)은 가능하니 검토해보세요. Fine-tuning에 관한 내용은 https://platform.openai.com/docs/guides/fine-tuning 여기서 확인해보세요.

 

OpenAI API

An API for accessing new AI models developed by OpenAI

platform.openai.com

참고로 데이터셋은 적어도 수백개여야 하며, 크기가 2배가 될 때마다 성능은 선형적으로 상승한다고 합니다.

 

 

 

Q : 저희 웹사이트에 대해 대답을 해주는 챗봇을 만들고 싶습니다. 무조건 fine-tuning해야 하나요?

A : 이럴 경우 OpenAI에서 공식적으로 추천하는 구조는 Embedding을 사용하여 prompt에 context를 주입하는 방식입니다. 이 부분은 아래 링크에 자세하게 나와있으니 확인해보세요.

https://help.openai.com/en/articles/6643167-how-to-use-openai-api-for-q-a-and-chatbot-apps

 

How to Use OpenAI API for Q&A and Chatbot Apps

Using the Embeddings and Completions endpoints to create a powerful question-answering application

help.openai.com

 

 

 

Q : 모델 성격을 지정할 수 있나요?

A : 네, 이때는 messages에 system role을 지정해주면 됩니다. 예를 들면 아래와 같이요.

# Example OpenAI Python library request
MODEL = "gpt-3.5-turbo"
response = openai.ChatCompletion.create(
    model=MODEL,
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Knock knock."}
    ],
    temperature=0,
)

print(response)

rolesystem으로 지정하고 content에 시스템이 어떠했으면 좋겠다고 description을 지정합니다. "너는 해적이야" 라고 하면 말을 거칠게 하겠죠?

 

 

 

Q : 이전 대화 문맥을 기억하게 하고 싶어요.

A : 이것도 messages 값을 이용하면 됩니다.

# Example OpenAI Python library request
MODEL = "gpt-3.5-turbo"
response = openai.ChatCompletion.create(
    model=MODEL,
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Knock knock."},
        {"role": "assistant", "content": "Who's there?"},
        {"role": "user", "content": "Orange."},
    ],
    temperature=0,
)

response

roleuser 인 것은 서비스 사용자의 질문(query)이고 assistant 인 것은 system이 말했던 이력이라고 생각하시면 쉽습니다. 그렇게 보면 위 예제는 사용자와 서비스가 각각 "똑똑", "누구세요?" 라고 말한 대화를 이력으로 놓고 현재 사용자가 "오렌지요" 라고 대답한 상황인 것입니다. 물론 messages에 있는 값은 모두 token으로서 과금됩니다!

 

cookbook에서는 해당 대화가 실제로 이루어진 것이 아니라 예제라는 것을 모델에게 확실히 알려주려면 example_user, example_assistant 를 role로 지정해주라고 하네요.

 

 

다음 cookbook 예제를 보시면 더 많은 도움될 내용이 있으니 확인해보세요.

https://github.com/openai/openai-cookbook/blob/main/examples/How_to_format_inputs_to_ChatGPT_models.ipynb

 

GitHub - openai/openai-cookbook: Examples and guides for using the OpenAI API

Examples and guides for using the OpenAI API. Contribute to openai/openai-cookbook development by creating an account on GitHub.

github.com

 

댓글