ㅁ 개요
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 소스 실행 방법
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챗봇 텍스트 버전과 동일 내용이 거의 동일합니다.
자세한 내용은 아래 이전 글을 참고 하여 주시기 바랍니다.
핵심내용
이번 프로그램은 거의 완성된 버전입니다. 이를 통해 ai챗봇과 언제든 소통할 수 있습니다.
다만, 한가지 이슈가 있습니다. 이는 위 프로그램은 동기식 방법으로 코딩하였으므로 만일 Groq이 응답을 늦게 준다거나, 대답이 없는 경우 소위 말하는 "Hang(먹통)"에 걸리게 되며, 이 경우 아무 것도 할 수 없게 됩니다.
따라서 다음 글에서는 매우 중요한 개념인 "비동기식 처리방법" 인 쓰레드를 이용한 먹통해결 방법을 자세히 살펴보겠습니다.
오늘은 여기까지이며, 위의 내용이 유익하셨다면, 광고 한번씩만 클릭 부탁드립니다.
감사합니다.
'파이썬 AI 실습 > 나만의 AI챗봇 만들기(API버전)' 카테고리의 다른 글
나만의 AI챗봇만들기(API버전) - 5. AI챗봇 : 윈도우 버전 - 5.4 Groq API 비동기식 연동 (0) | 2024.08.04 |
---|---|
나만의 AI챗봇만들기(API버전) - 5. AI챗봇 : 윈도우 버전 - 5.2 메시지 송수신 기능 추가 (0) | 2024.08.04 |
나만의 AI챗봇만들기(API버전) - 5. AI챗봇 : 윈도우 버전 - 5.1 윈도우창 띄우기 (0) | 2024.08.04 |
나만의 AI챗봇만들기(API버전) - 4. AI챗봇 : 이전 질문 기억하고 답변하기 (0) | 2024.07.31 |
나만의 AI챗봇만들기(API버전) - 3. AI챗봇 : 계속 질문하기 (0) | 2024.07.31 |