본문 바로가기
Python

ChatGPT API를 이용한 간단한 챗봇 만들기

by 아짱이아빠 2023. 7. 2. 22:20
반응형

다음은 파이썬 코드를 사용하여 ChatGPT API이용하는 방법에 대한 것이며, 간단한 ChatGPT 챗봇을 만드는 과정을 설명한다.


 

 

ChatGPT API 키 발급

ChatGPT API를 이용하기 위해서는 키를 발급받아야 하며 이를 위해서는 먼저 OpenAI에 로그인을 한다.

로그인을 하기 위해서는 당연히 회원가입이 되어 있어야 한다.

 

‘OpenAI.com’에 접속해서 로그인을 한 후 우측 상단에 있는 ‘personal’ 탭에서 ‘View API Key’로 들어간다.

 

OpenAI API Key 생성
(OpenAI API Key 생성)

 

여기서 ‘Create new secret key’를 눌러 key를 생성할 수 있다.

 

ChatGPT API를 사용하는 것은 공짜가 아니다.

처음 로그인을 하면 3개월 동안 쓸 수 있는 18달러의 토큰을 무료로 제공한다.

이후에는 유료로 사용해야하며 ChatGPT가 응답하는 내용의 양에 따라서 사용료가 발생한다.

여기서 사용하는 gpt 모델은 대화형에 최적화되어 있는 gpt-3.5-turbo이며 사용료는 1,000개의 토큰 당 0.001 달러이다.

아래의 문장을 ChatGPT가 응답했다고 하면 여기에는 35 토큰이 사용된다고 한다.

즉, 0.001 달러에 해당하는 1,000개의 토큰이 사용되려면 아래 문장보다 약 30배 정도는 긴 응답을 받아야 하는 것이다.

 

Multiple models, each with different capabilities and price points. Prices are per 1,000 tokens. You can think of tokens as pieces of words, where 1,000 tokens is about 750 words.

 

그래도 사용료에 대한 감이 안온다면 직접 사용하면서 체감할 수 밖에는 없겠다. 

한 달에 최대 사용료는 개인이 제한을 걸어 둘 수 있으므로 비용을 조절하면서 사용할 수 있다.


 

파이썬 코드로 ChatGPT API 불러오기

먼저 pip install을 통해 openai 모듈을 설치한다.

그리고 다음의 파이썬 코드로 ChatGPT API를 활용할 수 있는 준비를 할 수 있다.

import os
import openai
openai.api_key = "~~~~~~~~~"

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

print(completion.choices[0].message)

OpenAI 홈페이지에서 받은 개인의 고유 키를 “~~~” 안에 넣는다.

코드에서 볼 수 있듯이 이 API는 gpt 3.5 turbo 모델을 사용한다.

‘message’의 내용에 보면 역할이 “user” 즉, 사용자이고 내용은 “Hello!”라고 사용자가 ChatGPT에 말을 걸고 있다.

그리고 마지막 줄은 ChatGPT가 응답하는 것을 표시해 준다.

그래서 이 코드를 실행하면 다음과 같다.

코드 실행 결과
(코드 실행 결과)

 

ChatPT가 인사에 대한 응답을 한 것을 확인할 수 있다.

 


 

 

기본적인 챗봇 만들기

다음은 위의 파이썬 코드를 변형하여 기본적인 챗봇을 만들어 본다.

파이썬 코드는 다음과 같다.

import os
import openai
openai.api_key = "~~~~~~~~~~~~~~~~~~~~~~~"

messages = []
while True:
    user_content = input("사용자 :")
    messages.append({"role": "user", "content": f"{user_content}"})
    completion = openai.ChatCompletion.create(model="gpt-3.5-turbo", messages=messages)
    assistant_content = completion.choices[0].message["content"].strip()
    messages.append({"role": "assistant", "content": f"{assistant_content}"})

    print(f"GPT : {assistant_content}")

처음에서 알아본 코드에서 주로 변경된 부분은 while 문을 통해 계속해서 GPT와 대화를 이어나갈 수 있게 한 것이다.

또한, ‘input’을 통해 사용자가 질문을 넣을 수 있고 GPT의 응답은 ‘assistant_content’에 저장되었다가 화면에 보여준다.

 

 


 

 GUI로 챗봇 구현하기

마지막으로 GUI로 ChatGPT와 대화를 할 수 있는 챗봇을 만들어 본다.

여기서 GUI 코드는 직접 만들지 않고 ChatGPT에 질문을 통해서 만들어 봤다.

다음의 코드가 ChatGPT가 만들어 준 GUI를 포함한 코드이다.

import tkinter as tk
import openai
openai.api_key = "~~~~~~~~~~~~~~~~~~~~"

messages = []
def send_message():
    user_content = user_input.get()
    messages.append({"role": "user", "content": f"{user_content}"})
    completion = openai.ChatCompletion.create(model="gpt-3.5-turbo", messages=messages)
    assistant_content = completion.choices[0].message["content"].strip()
    messages.append({"role": "assistant", "content": f"{assistant_content}"})

    chat_history.insert(tk.END, f"You: {user_content}\n")
    chat_history.insert(tk.END, f"GPT: {assistant_content}\n\n")
    user_input.delete(0, tk.END)

root = tk.Tk()
root.title("Chat with GPT")

# Create chat history display
chat_history = tk.Text(root)
chat_history.grid(row=0, column=0, columnspan=3, sticky="nsew")
root.rowconfigure(0, weight=1)
root.columnconfigure(0, weight=1)

# Create user label
user_label = tk.Label(root, text="YOU:")
user_label.grid(row=1, column=0, sticky="e")

# Create user input field
user_input = tk.Entry(root)
user_input.grid(row=1, column=1, sticky="we")
root.columnconfigure(1, weight=8)

# Create empty label for spacing
empty_label = tk.Label(root, text="")
empty_label.grid(row=1, column=2, sticky="w")

# Create send button
send_button = tk.Button(root, text="Send", command=send_message)
send_button.grid(row=3, column=0, columnspan=3, sticky="we")

root.mainloop()

위의 코드에서 창의 크기는 직접 조정해 주었다. 

 

ChatGPT에 질문을 체계적으로 잘하면 파이썬 코드에 대한 특별한 지식 없이도 프로그래밍을 할 수 있다.

여기서 중요한 건 체계적으로 질문을 해야 한다는 것이다.

한 번에 많은 것을 질문하지 않고 큰 틀에서부터 세부적인 부분으로 단계적으로 질문을 하면 어느 정도 원하는 목적물을 만들 수 있을 것이다.

 

이렇게 실행한 결과물은 다음과 같다.

ChatGPT가 만든 챗봇
(ChatGPT가 만든 챗봇)


반응형

댓글