OpenAI에서 제공하는 ChatGPT를 이용하여 여행지와 일정만 입력하면 여행지 내 추천 장소를 일정 별로 계획해주는 웹 서비스를 제작하게 되었습니다.
모든 API 서비스가 그렇듯, OpnAI 또한 API key를 발급받아야 합니다.
+) 추가적으로 API를 이용하기 전에 결제 수단을 미리 등록을 해둬야 API 가 정상적으로 동작합니다.
(결제 수단이 없으면 Chat GPT 이용 시 에러가 발생합니다. )
++) 결제수단을 등록하면 5달러가 결제됩니다. 아마 한 일주일 정도 뒤에 환급받은 것 같습니다.
OpenAI에서 제공하는 GPT API는 Chat completions와 Completions으로 구분됩니다.
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
에는 role
과 content
로 구성된 객체의 배열 형태를 갖습니다.
role
에는 system, user, assistant 의 역할을 갖습니다.
Role | 설명 |
---|---|
system | assistant의 태도와 성격을 설정합니다. 답변 가이드라인을 통해 응답 형태를 설정할 수 있습니다. |
user | 사용자의 요청 사항을 담습니다. |
assistant | system에서 설정한 태도와 성격을 반영하여 사용자의 요청 사항에 답변합니다. |
소스 코드의 마지막에 적힌 {"role": "user", "content": "Where was it played?"}
만 전달하게 된다면, GPT는 무엇을 played 했는 지 알 수 없기에 답변하기 어렵습니다.
하지만 Chat Completions
의 장점답게, 이전 대화의 경험으로 2020 World Series가 열렸다는 사실을 추론할 수 있습니다.
import openai
response = openai.Completion.create(
model="text-davinci-003",
prompt="Write a tagline for an ice cream shop."
)
Completions
는 특정 문장을 이어서 완성시키거나 새로운 텍스트를 형성하는 특징을 갖습니다.
Completions
은 Token log probabilities
와 Inserting text
기능을 제공합니다.
token log probabilities
는 GPT의 답변 문장 중 각 토큰 예측에 대한 확률 분포를 보여줍니다. 즉, GPT가 답변으로 구성한 각 토큰들에 대한 자신감 치수를 보여줍니다.
예를 들어 , 완성되지 않은 문장을 제출하였을 때,
My name is Michael
이라는 답변을 얻게됩니다. 그 때 생성된 문장을 구성하는 각 토큰에 대한 예측 확률을 보여주는데, GPT는 이름을 완성시켜야하기 때문에 name
이라는 단어 사용에 대한 확신을 높게 가져가고 있습니다.
하지만 Michael
의 경우, 이름의 종류는 다양하기 때문에, name
이라는 토큰을 사용했을 때보다 현저히 적은 예측 확률을 볼 수 있습니다.
만약 긴 글을 작성하거나, 문단을 적어야할 때, Completions
는 요청으로 온 글에 텍스트를 삽입하여 응답합니다.
우선적으로 Chat completions API
와 Completions API
는 사용하는 GPT 모델이 다릅니다.
Chat completions API
은 gpt-3.5-turbo
를 사용하는 반면, Completions API
는 text-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
을 사용하기로 결정
좋은 정보 감사합니다