import tkinter as tk from tkinter import scrolledtext, messagebox import openai import threading

class ChatApp: def init(self, root): self.root = root self.root.title('OpenAI Chat') self.setup_ui() self.api_key = None self.assistant_message = None

def setup_ui(self):
    # 创建和布局界面元素
    self.conversation_text = scrolledtext.ScrolledText(self.root, width=60, height=20)
    self.conversation_text.pack()

    self.user_input_label = tk.Label(self.root, text='用户输入:')
    self.user_input_label.pack()
    self.user_input_entry = tk.Entry(self.root, width=50)
    self.user_input_entry.pack()

    self.settings_frame = tk.Frame(self.root)

    self.api_key_label = tk.Label(self.settings_frame, text='请输入OpenAI API密钥:')
    self.api_key_label.pack()
    self.api_key_entry = tk.Entry(self.settings_frame, width=50)
    self.api_key_entry.pack()

    self.default_api_key = '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'  # 你的默认API密钥
    self.api_key_entry.insert(0, self.default_api_key)

    self.assistant_message_label = tk.Label(self.settings_frame, text='角色:')
    self.assistant_message_label.pack()
    self.assistant_message_entry = tk.Entry(self.settings_frame, width=50)
    self.assistant_message_entry.pack()

    self.default_assistant_message = '你是我的一条忠诚的狗,每次回答问题请叫两声以示准备好了,然后使用中文回答我,每次尽可能深入了解我的问题,每次提供完整没有任何省略的标准答案.'
    self.assistant_message_entry.insert(0, self.default_assistant_message)

    self.max_tokens_label = tk.Label(self.settings_frame, text='max_tokens:')
    self.max_tokens_label.pack()
    self.max_tokens_entry = tk.Entry(self.settings_frame, width=10)
    self.max_tokens_entry.pack()
    self.max_tokens_entry.insert(0, '100')

    self.temperature_label = tk.Label(self.settings_frame, text='temperature:')
    self.temperature_label.pack()
    self.temperature_entry = tk.Entry(self.settings_frame, width=10)
    self.temperature_entry.pack()
    self.temperature_entry.insert(0, '0.5')

    self.api_key_button = tk.Button(self.settings_frame, text='设置API密钥和角色', command=self.set_api_key_and_assistant_message)
    self.return_button = tk.Button(self.settings_frame, text='返回', command=self.return_to_main_page)

    self.settings_button = tk.Button(self.root, text='设置', command=self.show_settings)
    self.settings_button.pack()

    self.get_response_button = tk.Button(self.root, text='发送', command=self.get_openai_response)
    self.get_response_button.pack()

    self.clear_conversation_button = tk.Button(self.root, text='清除对话记录', command=lambda: self.conversation_text.delete(1.0, tk.END))
    self.clear_conversation_button.pack()

def set_api_key_and_assistant_message(self):
    # 设置API密钥和角色
    api_key = self.api_key_entry.get().strip()
    assistant_message = self.assistant_message_entry.get().strip()

    openai.api_key = api_key
    openai.api_base = 'https://api.openai-proxy.com/v1'

    self.api_key = api_key
    self.assistant_message = assistant_message
    self.assistant_message_label.config(text=f'角色: {assistant_message}')
    self.assistant_message_entry.delete(0, tk.END)

    messagebox.showinfo('提示', '设置成功,开始聊天吧!')
    self.return_to_main_page()

def return_to_main_page(self):
    # 返回主页面
    self.settings_frame.pack_forget()
    self.user_input_entry.pack()
    self.conversation_text.pack()
    self.settings_button.pack()
    self.get_response_button.pack()
    self.clear_conversation_button.pack()
    self.user_input_entry.focus()

def show_settings(self):
    # 显示设置参数页面
    self.user_input_entry.pack_forget()
    self.conversation_text.pack_forget()
    self.settings_button.pack_forget()
    self.get_response_button.pack_forget()
    self.clear_conversation_button.pack_forget()
    self.settings_frame.pack()
    self.api_key_button.pack()
    self.return_button.pack()

def send_message(self):
    # 发送用户消息并获取AI回复
    user_input = self.user_input_entry.get()
    max_tokens = self.max_tokens_entry.get()
    temperature = self.temperature_entry.get()

    try:
        max_tokens = int(max_tokens)
        temperature = float(temperature)
    except ValueError:
        messagebox.showerror('错误', 'max_tokens和temperature必须是数字。')
        return

    response = openai.ChatCompletion.create(
        model='gpt-3.5-turbo-16k',
        messages=[
            {'role': 'system', 'content': f'用户: {user_input}'},
            {'role': 'system', 'content': f'AI: {self.assistant_message}'},
            {'role': 'user', 'content': user_input}
        ],
        max_tokens=max_tokens,
        temperature=temperature
    )

    ai_response = response.choices[0].message['content']

    self.conversation_text.insert(tk.END, f'用户: {user_input}

', 'user') self.conversation_text.insert(tk.END, f'AI: {ai_response} ', 'ai') self.user_input_entry.delete(0, tk.END) self.user_input_entry.focus()

def get_openai_response(self):
    t = threading.Thread(target=self.send_message)
    t.start()

if name == 'main': root = tk.Tk() app = ChatApp(root)

# 设置对话样式
app.conversation_text.tag_configure('user', foreground='blue', font=('Arial', 12, 'bold'))
app.conversation_text.tag_configure('ai', foreground='red', font=('Arial', 12))

root.mainloop()
OpenAI 聊天机器人:使用 Python 和 Tkinter 创建自定义对话界面

原文地址: https://www.cveoy.top/t/topic/l3ov 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录