▶︎ 구현 샘플
▶︎ API Key 발급
https://platform.openai.com/account/api-keys로 접속하자
"Create new secret key" 버튼을 클릭하여 새로운 키 발급
▶︎ openai API 설치
가상환경 생성 및 접근
pip install openai==0.28.1
‣ 샘플 코드
from typing import List
import openai
import environ
def get_api_key(secret_file) -> environ.Env:
env : environ.Env = environ.Env(DEBUG=(bool,False))
env.read_env(secret_file)
return env
class OpenAI:
def __init__(self,model='gpt-3.5-turbo') -> None:
self.model : str = model
self.messages : List[str] = []
def ask(self,question: str) -> str:
self.messages.append({
'role': 'user',
'content': question
})
res = self.__ask__()
return res
def __ask__(self) -> str:
completion = openai.ChatCompletion.create(
# 모델 지정
model=self.model,
messages=self.messages
)
response : str = completion.choices[0].message['content']
self.messages.append({
'role': 'assistant',
'content': response
})
return response
def show_messages(self) -> List[str]:
return self.messages
def clear(self) -> None:
self.messages.clear()
if __name__ == '__main__':
# Get Secret API Key
openai.api_key = get_api_key(secret_file="env/api.env")
# Get OpenAI Instance
chatbot : OpenAI = OpenAI()
▶︎ 활용 방법
생성한 chatbot
의 ask()
함수로 질의 가능
# 첫번째 질문
print(chatbot.ask(question="인생은 뭘까?"))
인생은 생명이 지속되는 동안 개인적으로 겪는 경험과 성취의 집합체입니다. 인생은 우리가 경험하는 모든 것들 (사랑, 성장, 취미, 삶의 목표 등)을 이루는 과정이라고 할 수 있습니다. 또한 인생은 삶의 방향을 결정하는 개인의 가치관, 자아개발의 의지, 태도와 행동에 영향을 받는 개인적인 존재체라 할 수 있습니다.
모든 질의/응답 내용을 초기화 하고 싶다면 clear()
함수를 사용하면 된다.
# 그 동안 했던 대화 삭제
chatbot.clear()
▶︎ gradio 구현
gradio
모듈을 설치 후 대화형 웹 인터페이스로 구현해보도록 하자
🚦 참고: [참고: https://gradio.app/creating-a-chatbot/](참고: https://gradio.app/creating-a-chatbot/)
gradio
모듈 설치
$ pip install gradio
다음 코드를 실행하여 웹 인터페이스 형식의 챗봇을 구현할 수 있다
from src.gpt import get_api_key,OpenAI
import openai
import gradio as gr
import random
import time
if __name__ == '__main__':
# Get Secret API Key
openai.api_key = get_api_key(secret_file="env/api.env")('token')
# Get OpenAI Instance
chatgpt : OpenAI = OpenAI()
with gr.Blocks() as demo:
chatbot = gr.Chatbot()
msg = gr.Textbox()
clear = gr.Button('Clear')
def respond(message,chat_history):
# GPT 질의
bot_message = chatgpt.ask(question=message)
# 답변 기록
chat_history.append([message,bot_message])
return "",chat_history
msg.submit(respond,[msg,chatbot],[msg,chatbot])
clear.click(lambda: None, None, chatbot, queue=False)
# Local 구동 시
demo.launch()