파이썬 AI 실습/나만의 AI챗봇 만들기(API버전)

나만의 AI챗봇만들기(API버전) - 5. AI챗봇 : 윈도우 버전 - 5.3 Groq API연동

파기차차 2024. 8. 4. 06:44
728x90
반응형
SMALL

ㅁ 개요

 

O 프로젝트 소개

 

 

 - 이번 글은 이전글(나만의 AI챗봇만들기(API버전) - 5. AI챗봇 : 윈도우 버전 - 5.2 메시지 송수신 기능 추가)에 이은 8번째 글로 AI챗봇의 윈도우버전 중 Groq API 연동편에 대해 살펴보겠습니다.

 

 

O 완성된 프로그램 실행 화면

 

 

 - 최종 완성된 프로그램의 결과화면은 아래와 같습니다.

 

 

1. 5-3.py를 실행하면 아래와 같이 실행되며, (1)(3)번과 같이 질문하면 (2)(4)번과 같이 잘 대답하는 것을 볼 수 있습니다.

 

 

 

 

 


ㅁ 세부 내용

 

O 완성된 소스

 

소스파일 : 5-3.py

 

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QLineEdit, QPushButton, QVBoxLayout, QWidget
from config import GROQ_API_KEY
from groq import Groq

# 3.py - Groq API 연동: 단, 하나의 클래스내에서 동기식 처리로 gorq가 비지하면 먹통됨

class ChatWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()
        self.content = ""
        self.client = Groq(api_key=GROQ_API_KEY)

    def initUI(self):
        self.setWindowTitle('AI 챗봇')
        self.setGeometry(100, 100, 400, 500)

        layout = QVBoxLayout()

        self.chatDisplay = QTextEdit(self)
        self.chatDisplay.setReadOnly(True)
        layout.addWidget(self.chatDisplay)

        self.inputField = QLineEdit(self)
        layout.addWidget(self.inputField)

        self.sendButton = QPushButton('전송', self)
        layout.addWidget(self.sendButton)

        container = QWidget()
        container.setLayout(layout)
        self.setCentralWidget(container)
        
        self.inputField.returnPressed.connect(self.sendMessage)
        self.sendButton.clicked.connect(self.sendMessage)

    def sendMessage(self):
        user_message = self.inputField.text()
        self.chatDisplay.append(f"You: {user_message}")
        self.inputField.clear()
        
        ########################################
        # 1.사용자의 요청에 응답하는 getAIResponse()메서드 호출
        ########################################
        self.getAIResponse(user_message)

    def getAIResponse(self, prompt):
        chat_completion = self.client.chat.completions.create(
            messages=[
                {"role": "system", "content": "모든 응답은 한국어로 작성해 주세요."},
                {"role": "user", "content": self.content},
                {"role": "user", "content": prompt},
            ],
            model="llama3-8b-8192",
        )
        response = chat_completion.choices[0].message.content
        self.chatDisplay.append(f"AI: {response}")
        self.content += response
        

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = ChatWindow()
    window.show()
    sys.exit(app.exec_())

 

 

 

 

 

 

O 소스 실행 방법

 
 
 - 소스파일 다운로드 후 cmd 또는 파워쉘 등에서 아래와 같이 실행하시기 바랍니다.

 

 
 > python 5-3.py

 


 
 

O 주요 내용

 

아래 소스코드에 대한 주요 내용만 설명하겠습니다.

 

 

소스 파일 : 5-3.py

 

line 35~36 : 사용자가 질의 후 엔터(또는 '전송'버튼 클릭) 누르면 sendMessage()메소드가 호출됩니다.

line 39 : sendMessage() 메소드는 사용자의 입력값(inputField.text())을 읽어서 user_message변수에 할당합니다.

line 40 : 창 상단(chatDisplay)에 사용자의 질문을 붙여넣고,

line 41 : 하단 입력창을 지웁니다.(input.Field.clear())

line 46 : ai챗봇의 응답을 구하기 위해 getAIResponse()메소드를 호출합니다.

line 48~59 : 이전 글(이전 ai챗봇 텍스트 버전)과 동일하게 AI챗봇에게 사용자의 질문을 API 요청 후 응답을 받아 response변수로 받고, 이를 창 상단(chatDisplay)에 뿌립니다. 그리고 이전 질문을 기억하기 위해 content변수에 이전 질의/응답을 모두 넣습니다.

 

 

 

 

 

 

 


 

ㅁ 정리

 

O 우리가 배운 내용

 
 - 오늘은 AI챗봇의 윈도우버전 중 Groq API 연동편에 대해 살펴보았습니다.

이전 글의 ai챗봇 텍스트 버전과 동일 내용이 거의 동일합니다.

자세한 내용은 아래 이전 글을 참고 하여 주시기 바랍니다.

https://pagichacha.tistory.com/313

 

 

 

핵심내용

이번 프로그램은 거의 완성된 버전입니다. 이를 통해 ai챗봇과 언제든 소통할 수 있습니다.

다만, 한가지 이슈가 있습니다. 이는 위 프로그램은 동기식 방법으로 코딩하였으므로 만일 Groq이 응답을 늦게 준다거나, 대답이 없는 경우 소위 말하는 "Hang(먹통)"에 걸리게 되며, 이 경우 아무 것도 할 수 없게 됩니다.

 

따라서 다음 글에서는 매우 중요한 개념인 "비동기식 처리방법" 인 쓰레드를 이용한 먹통해결 방법을 자세히 살펴보겠습니다.

 

 

 

오늘은 여기까지이며, 위의 내용이 유익하셨다면, 광고 한번씩만 클릭 부탁드립니다.

 

 

감사합니다.

728x90
반응형
LIST