[OpenAI] Chat completions VS Completions API

HoonDong_K·2023년 8월 10일
0

[project #3] Planner Bot

목록 보기
1/4
post-thumbnail
post-custom-banner

OpenAI에서 제공하는 ChatGPT를 이용하여 여행지와 일정만 입력하면 여행지 내 추천 장소를 일정 별로 계획해주는 웹 서비스를 제작하게 되었습니다.

🔑 OpenAI API key 발급

모든 API 서비스가 그렇듯, OpnAI 또한 API key를 발급받아야 합니다.

  1. OpenAI platform 에서 로그인
  2. 프로필에서 View API keys
  3. Create new secret key를 눌러 키의 이름을 적고 API key를 받아 저장하면 된다.

+) 추가적으로 API를 이용하기 전에 결제 수단을 미리 등록을 해둬야 API 가 정상적으로 동작합니다.
(결제 수단이 없으면 Chat GPT 이용 시 에러가 발생합니다. )

++) 결제수단을 등록하면 5달러가 결제됩니다. 아마 한 일주일 정도 뒤에 환급받은 것 같습니다.

🤷‍♂️ Chat completions VS Completions API

OpenAI에서 제공하는 GPT API는 Chat completions와 Completions으로 구분됩니다.

1️⃣ Chat completions API

import openai

openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Who won the world series in 2020?"},
        {"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
        {"role": "user", "content": "Where was it played?"}
    ]
)

Chat Completions의 가장 큰 특징은 채팅을 통해 대화를 저장하여, GPT로 하여금 이전 대화와의 경험으로 다음 질문에 대한 대답을 도출해낸다는 점입니다.

Chat Completions 에서 가장 중요한 것은 messages 매개변수입니다. messages에는 rolecontent로 구성된 객체의 배열 형태를 갖습니다.

role에는 system, user, assistant 의 역할을 갖습니다.

Role설명
systemassistant의 태도와 성격을 설정합니다. 답변 가이드라인을 통해 응답 형태를 설정할 수 있습니다.
user사용자의 요청 사항을 담습니다.
assistantsystem에서 설정한 태도와 성격을 반영하여 사용자의 요청 사항에 답변합니다.
  • system 설정은 옵션이며, 미설정시 'You are a helpful assistant'와 같은 성격을 갖습니다.

소스 코드의 마지막에 적힌 {"role": "user", "content": "Where was it played?"} 만 전달하게 된다면, GPT는 무엇을 played 했는 지 알 수 없기에 답변하기 어렵습니다.

하지만 Chat Completions의 장점답게, 이전 대화의 경험으로 2020 World Series가 열렸다는 사실을 추론할 수 있습니다.

2️⃣ Completions API

import openai

response = openai.Completion.create(
  model="text-davinci-003",
  prompt="Write a tagline for an ice cream shop."
)

Completions는 특정 문장을 이어서 완성시키거나 새로운 텍스트를 형성하는 특징을 갖습니다.

CompletionsToken log probabilitiesInserting text 기능을 제공합니다.

Token log probabilities

token log probabilities는 GPT의 답변 문장 중 각 토큰 예측에 대한 확률 분포를 보여줍니다. 즉, GPT가 답변으로 구성한 각 토큰들에 대한 자신감 치수를 보여줍니다.

예를 들어 , 완성되지 않은 문장을 제출하였을 때,

My name is Michael 이라는 답변을 얻게됩니다. 그 때 생성된 문장을 구성하는 각 토큰에 대한 예측 확률을 보여주는데, GPT는 이름을 완성시켜야하기 때문에 name이라는 단어 사용에 대한 확신을 높게 가져가고 있습니다.

하지만 Michael의 경우, 이름의 종류는 다양하기 때문에, name이라는 토큰을 사용했을 때보다 현저히 적은 예측 확률을 볼 수 있습니다.

Inserting text

만약 긴 글을 작성하거나, 문단을 적어야할 때, Completions는 요청으로 온 글에 텍스트를 삽입하여 응답합니다.

🙋‍♂️ 그래서 어떤 API를 사용해야할까?

우선적으로 Chat completions APICompletions API는 사용하는 GPT 모델이 다릅니다.

Chat completions APIgpt-3.5-turbo를 사용하는 반면, Completions APItext-davinci-003을 주로 사용합니다. 그렇기 때문에, 이에 대해 성능 차이와 토큰 가격 차이가 발생할 수 밖에 없습니다.

For reference, gpt-3.5-turbo performs at a similar capability level to text-davinci-003 but at 10% the price per token! See pricing details here. (OpenAI)

하지만 OpenAI에서는 두 모델 모두 비슷한 수준의 성과를 나타내지만 gpt-3.5-turbo가 후자 토큰 생성 비용의 10%라고 나타내고 있습니다.

하지만 가격보다 더 중요하다고 생각하는 것은 두 기능의 주요한 성질일 것 같습니다. 우선적으로 API 가 나타내는 것처럼 Chat completions API 은 사용자가 직접 모델의 답변 지침서를 설정하여 원하는 방향으로 대답을 이끌어낼 수 있으며, 이전 대화의 기억으로 대화를 문맥상 유연하게 이어갈 수 있다는 장점이 있습니다.

그에 반면 Completions API는 단일 문장을 생성하거나 긴 글, 문단을 완성시키며 각 토큰의 정확도를 측정할 수 있는 기능을 갖고 있습니다.

결국 사용 용도에 맞춰 사용하는 게 좋습니다.

결론: 이번 프로젝트에서는 사용자의 요청을 저장하여 지속적으로 답변을 요청해야하기 때문에 Chat completions API 을 사용하기로 결정

참고

https://platform.openai.com/docs/guides/gpt/completions-api

profile
개발을 잘하고 싶은 개발자
post-custom-banner

1개의 댓글

comment-user-thumbnail
2023년 8월 10일

좋은 정보 감사합니다

답글 달기