openai key 발급을 통해 이제 기능들을 사용하게 될 수 있게 되었으니,
openai키를 이용한 번역기와 이미지 생성 프로그램 제작 실습해보았습니다.
from openai import OpenAI from dotenv import load_dotenv import os
◦ openAI 모듈, openAI키를 담고 있는 env.모듈,
openAI키를 환경변수로 쓰는 os모듈을 import함
load_dotenv()
client = OpenAI(
api_key = os.environ.get("API_KEY")
)
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You will be provided with a sentence in English, and your task is to translate it into Korean"},
{"role": "user", "content": "My name is Jane. What is your name?"}
],
temperature=0.7,
max_tokens=64,
top_p=1
)
print(response.choices[0].message.content)
◦ 여기까지는 role에 직접 번역내용을 넣으면 작동 가능한 코드가 됩니다!
input로 사용자 입력 가능한 코드는 피곤해서 생략...
이제 번역기능을 프로그램 형식으로 보여주기 위해서 PyQt5라이브러리를 추가하겠습니다.
PyQt5는 파이썬 기반의 GUI 프로그램을 만들 수 있는 라이브러리입니다
사용을 위해선 우선 터미널에 파이큐티를 인스톨해야 합니다.
"pip install PyQt5"
"pip3 install PyQt5"(맥)

파이큐티 주요 위젯들은 위와 같으며 필요한 기능을 사용하면 됩니다.
import sys from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QTextEdit, QPushButton from PyQt5.QtCore import QRunnable, QThreadPool, pyqtSlot, pyqtSignal, QObject
from translation_input_app import Translatorclass TranslateWorkerSignals(QObject):
finished = pyqtSignal()
error = pyqtSignal(tuple)
result = pyqtSignal(str)class TranslateWorker(QRunnable):
def init(self, text):
super().init()
self.text = text
self.signals = TranslateWorkerSignals()@pyqtSlot() def run(self): try: translator = Translator() translated_text = translator.translate_to_korean(self.text) self.signals.result.emit(translated_text) except Exception as e: self.signals.error.emit((e,)) finally: self.signals.finished.emit()class TranslatorApp(QWidget):
def init(self):
super().init()
self.initUI()
self.thread_pool = QThreadPool()
◦TranslateWorkerSignals = 결과, 에러, 종료 시그널 값 정의
◦TranslateWorker = init, run 함수 정의. init은 입력받은 텍스트 값 저장 및 시그널 전송
run은 입력값을 translator에 넣어서 결과값,에러값을 받아옴
◦TranslatorApp: init 함수 정의. 부모 클래스 초기화, QThreadPool클래스 값을 받아와서 thread_pool에 저장(큐스레드: 스레드풀 갯수 생성, 작업 제출)
def initUI(self):
# 메인 레이아웃
main_layout = QVBoxLayout()
# 상단 레이아웃
top_layout = QHBoxLayout()
lbl_input = QLabel('영어문장을 입력해주세요.')
lbl_output = QLabel('한글 번역 결과')
top_layout.addWidget(lbl_input)
top_layout.addStretch(1)
top_layout.addWidget(lbl_output)
# 중앙 레이아웃
center_layout = QHBoxLayout()
self.text_input = QTextEdit()
self.text_output = QTextEdit()
center_layout.addWidget(self.text_input)
center_layout.addWidget(self.text_output)
# 하단 레이아웃
bottom_layout = QHBoxLayout()
self.translate_button = QPushButton('번역 요청 버튼')
self.translate_button.clicked.connect(self.translate_text)
bottom_layout.addStretch(1)
bottom_layout.addWidget(self.translate_button)
# 전체 레이아웃에 추가
main_layout.addLayout(top_layout)
main_layout.addLayout(center_layout)
main_layout.addLayout(bottom_layout)
# 메인 윈도우 설정
self.setLayout(main_layout)
self.setWindowTitle('영어 -> 한글 번역기')
self.setGeometry(300, 300, 800, 400)
self.show()
def translate_text(self):
input_text = self.text_input.toPlainText()
worker = TranslateWorker(input_text)
worker.signals.result.connect(self.display_translation)
worker.signals.error.connect(self.handle_error)
self.thread_pool.start(worker)
def display_translation(self, translated_text):
self.text_output.setPlainText(translated_text + " (번역됨)")
def handle_error(self, error):
self.text_output.setPlainText(f"Error: {error}")
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = TranslatorApp()
sys.exit(app.exec_())