본문 바로가기
컴퓨터 활용/노년에 즐기는 코딩

[용서 프로젝트] OpenAI API를 통한 파이썬 프로그램 GUI 적용

by easyfly 2024. 3. 28.
반응형

용서 프로젝트, 파이썬 프로그램

Node에서 진행되고 있는 용서 프로젝트를 파이썬에서 시도했습니다. 그래픽 환경에서 입출력이 가능하도록 코딩을 하고 결과를 아래와 같이 만났습니다. '19층 계단을 오르면서 들으면 좋을 클래식 음악을 추천해 달라'는 요구를 했더니, 7곡을 제공하는군요.

코딩과 실행 결과

용서 프로젝트 파이썬 코딩

코딩한 결과는 다음과 같습니다. OpenAI API Key는 환경 변수에 저장했습니다. 환경 변수는 시스템의 고급 설정에 '환경 변수'가 있고 거기에 API 키를 저장하고 시스템을 리부팅해야 적용됩니다.

import openai
import os
import tkinter as tk
from tkinter import scrolledtext

# 환경 변수를 사용하여 OpenAI API 키 설정
openai.api_key = os.getenv('OPENAI_API_KEY')

def send_message(message_log):
    # API 호출을 수행하고 결과를 반환하는 함수
    response = openai.chat.completions.create(
        model="gpt-4",
        messages=message_log,
        temperature=0.5,
    )

    return response.choices[0].message.content

def on_send():
    # 사용자 입력을 가져와서 message_log에 추가하고 응답을 받아 표시하는 함수
    user_input = user_input_text.get("1.0", tk.END).strip()
    user_input_text.delete("1.0", tk.END)  # 입력 필드 초기화

    if user_input.lower() == "quit":
        window.quit()

    conversation_box.insert(tk.END, "You: " + user_input + "\n")
    message_log.append({"role": "user", "content": user_input})

    response = send_message(message_log)
    conversation_box.insert(tk.END, "Assistant: " + response + "\n")
    message_log.append({"role": "assistant", "content": response})

# 메인 윈도우 설정
window = tk.Tk()
window.title("Chat with GPT-4")

# 대화 상자 스크롤 텍스트 위젯 설정
conversation_box = scrolledtext.ScrolledText(window, state='disabled', height=15, width=50)
conversation_box.pack(padx=10, pady=10)
conversation_box['state'] = 'normal'

# 사용자 입력 텍스트 필드 설정
user_input_text = tk.Text(window, height=3, width=50)
user_input_text.pack(padx=10, pady=10)

# 전송 버튼 설정
send_button = tk.Button(window, text="Send", command=on_send)
send_button.pack(padx=10, pady=10)

# 대화 로그 초기화
message_log = [
    {"role": "system", "content": "You are a helpful assistant."}
]

# GUI를 시작합니다.
if __name__ == "__main__":
    window.mainloop()

메인 함수 부분과 GUI 설정에 대한 설명

이 코드의 메인 함수 부분은 Python의 tkinter 라이브러리를 사용해 GUI 기반의 채팅 인터페이스를 생성하는 부분입니다. 메인 함수는 다음과 같은 역할을 수행합니다.

  1. 메인 윈도우 설정: tk.Tk()를 통해 메인 윈도우 인스턴스를 생성하고, 이 윈도우의 제목을 "Chat with GPT-4"로 설정합니다.
  2. 대화 상자 스크롤 텍스트 위젯 설정: 사용자와 AI 간의 대화 내용이 표시되는 스크롤 가능한 텍스트 상자를 생성합니다. 이 위젯은 초기에 비활성화 상태(state='disabled')로 설정되어 사용자가 직접 편집할 수 없지만, 코드 내부에서는 메시지를 추가할 수 있도록 'normal' 상태로 전환됩니다.
  3. 사용자 입력 텍스트 필드 설정: 사용자가 메시지를 입력할 수 있는 텍스트 필드를 생성합니다. 이 텍스트 필드는 높이가 3줄, 폭이 50글자로 설정됩니다.
  4. 전송 버튼 설정: 사용자가 입력한 메시지를 전송할 수 있는 'Send' 버튼을 생성합니다. 이 버튼을 클릭하면 on_send 함수가 호출되어 사용자 입력을 처리합니다.
  5. on_send 함수: 사용자가 'Send' 버튼을 클릭하면 호출되는 함수입니다. 이 함수는 사용자 입력을 가져와서 message_log에 추가한 후 send_message 함수를 호출하여 GPT-4 모델로부터 응답을 받습니다. 받은 응답은 대화 상자에 표시되고, 대화 로그에도 추가됩니다. 만약 사용자 입력이 "quit"이면 프로그램이 종료됩니다.
  6. 대화 로그 초기화: 대화를 시작하기 전에 시스템 메시지를 포함하는 초기 메시지 로그를 설정합니다.
  7. GUI 시작: window.mainloop() 호출을 통해 tkinter 이벤트 루프를 시작하여 사용자 입력을 기다리고 이벤트를 처리합니다. 이 이벤트 루프는 사용자가 GUI를 종료할 때까지 실행됩니다.

정리

코드의 목적은 tkinter를 사용하여 사용자가 입력할 수 있는 간단한 텍스트 기반의 채팅 인터페이스를 제공하고, 입력된 텍스트를 OpenAI GPT-4 API로 전송하여 AI 응답을 받아 표시하는 것입니다.

반응형

댓글