Profile picture

[Python] OpenAI API 사용 방법 및 간단한 챗봇 구현하기 - OpenAI

JaehyoJJAng2023년 12월 09일

▶︎ 구현 샘플

image


▶︎ API Key 발급

https://platform.openai.com/account/api-keys로 접속하자


"Create new secret key" 버튼을 클릭하여 새로운 키 발급
image


▶︎ 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()    

▶︎ 활용 방법

생성한 chatbotask() 함수로 질의 가능

# 첫번째 질문
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()

Loading script...