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

设置代理网址

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

def get_response(): # 获取用户输入 user_input = user_input_entry.get('1.0', tk.END).strip() selected_model = model_var.get() system_message = system_message_var.get('1.0', tk.END).strip() temperature = float(temperature_var.get()) max_tokens = int(max_tokens_var.get())

# 检查用户输入是否为空
if not user_input:
    messagebox.showerror('Error', '请输入问题或内容,然后再点击发送。')
    return

# 获取API密钥
api_key = api_key_entry.get()

# 初始化OpenAI
openai.api_key = api_key

# 在单独的线程中执行GPT调用
def call_openai():
    try:
        response = openai.ChatCompletion.create(
            model=selected_model,
            messages=[
                {'role': 'system', 'content': system_message},
                {'role': 'user', 'content': user_input}
            ],
            temperature=temperature,
            max_tokens=max_tokens,
        )
        generated_text = response.choices[0].message['content']

        # 在主窗口中添加回复
        response_text.insert(tk.END, 'User: ' + user_input + '\n')
        response_text.insert(tk.END, 'AI: ' + generated_text + '\n')
        response_text.insert(tk.END, '\n')

    except Exception as e:
        messagebox.showerror('Error', f'发生错误: {str(e)}')

# 创建并启动新线程
thread = threading.Thread(target=call_openai)
thread.start()

def clear_response(): response_text.delete('1.0', tk.END)

def toggle_api_key_visibility(): global api_key_entry, api_key_visibility_button

if api_key_entry['show'] == '':
    api_key_entry.config(show='*')
    api_key_visibility_button.config(text='显示')
else:
    api_key_entry.config(show='')
    api_key_visibility_button.config(text='隐藏')

创建主窗口

root = tk.Tk() root.title('GPT-3.5') root.geometry('600x750') # 调整窗口大小

更改背景颜色

root.configure(bg='lightblue')

添加标题

title_label = tk.Label(root, text='GPT-3.5-turbo/GPT-4', font=('Arial Bold', 20),bg='lightblue',fg='#0077c8') title_label.pack(pady=20)

添加界面元素

api_key_frame = tk.Frame(root, bg='#ffffff') api_key_frame.pack(pady=20)

api_key_label = tk.Label(api_key_frame, text='API密钥:', font=('Arial Bold', 14), bg='lightblue',fg='#0077c8') api_key_label.grid(row=0, column=0, padx=5, pady=5, sticky='w')

api_key_var = tk.StringVar(value='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') api_key_entry = tk.Entry(api_key_frame, width=51, font=('宋体', 11), bd=2, relief=tk.SOLID, show='*', textvariable=api_key_var) api_key_entry.grid(row=0, column=1, padx=5, pady=5)

api_key_visibility_button = tk.Button(api_key_frame, text='显示', command=toggle_api_key_visibility, font=('黑体', 12), bg='#0077c8', fg='white', bd=2, relief=tk.SOLID) api_key_visibility_button.grid(row=0, column=2, padx=5, pady=5)

input_frame = tk.Frame(root, bg='#ffffff') input_frame.pack(pady=20)

user_input_label = tk.Label(input_frame, text='您的问题或内容:',bg='lightblue', font=('Arial Bold', 14), fg='#0077c8') user_input_label.grid(row=0, column=0, padx=5, pady=5, sticky='w')

user_input_entry = tk.Text(input_frame, width=30, height=3,font=('黑体', 14), bd=2, relief=tk.SOLID) user_input_entry.grid(row=0, column=1, padx=5, pady=5)

system_message_label = tk.Label(input_frame, text='系统角色:',bg='lightblue', font=('Arial Bold', 14), fg='#0077c8') system_message_label.grid(row=1, column=0, padx=5, pady=5, sticky='w')

default_system_message = 'You are a helpful assistant.' system_message_var = tk.StringVar(value=default_system_message) system_message_entry = tk.Text(input_frame, height=2, width=30,font=('黑体', 14), bd=2, relief=tk.SOLID) system_message_entry.grid(row=1, column=1, padx=5, pady=5,)

model_label = tk.Label(input_frame, text='选择GPT模型:', font=('Arial Bold', 14),bg='lightblue', fg='#0077c8') model_label.grid(row=2, column=0, padx=5, pady=5, sticky='w')

model_var = tk.StringVar(value='gpt-3.5-turbo-0301') available_models = { 'gpt-3.5-turbo-0301': 'GPT-3.5-Turbo-0301', 'gpt-3.5-turbo-16k': 'GPT-3.5-Turbo-16k', 'gpt-3.5-turbo': 'GPT-3.5-Turbo', 'gpt-3.5-turbo-0613': 'GPT-3.5-Turbo-0613', 'gpt-3.5-turbo-16k-0613': 'GPT-3.5-Turbo-16k-0613' }

创建下拉式菜单

model_dropdown = tk.OptionMenu(input_frame, model_var, *available_models.values()) model_dropdown.config(font=('宋体', 12), bg='lightblue', fg='black', bd=2, relief=tk.SOLID) model_dropdown.grid(row=2, column=1, padx=5, pady=2, sticky='w')

temperature_label = tk.Label(input_frame, text='Temperature (0.1-1.0):', font=('Arial Bold', 14), bg='lightblue', fg='#0077c8') temperature_label.grid(row=3, column=0, padx=5, pady=5, sticky='w')

temperature_var = tk.StringVar(value='0.3') temperature_entry = tk.Entry(input_frame, textvariable=temperature_var, font=('Arial', 14), bd=2, relief=tk.SOLID) temperature_entry.grid(row=3, column=1, padx=5, pady=5)

max_tokens_label = tk.Label(input_frame, text='最大 Tokens 数量:', font=('Arial Bold', 14),bg='lightblue', fg='#0077c8') max_tokens_label.grid(row=4, column=0, padx=5, pady=5, sticky='w')

max_tokens_var = tk.StringVar(value='3000') max_tokens_entry = tk.Entry(input_frame, textvariable=max_tokens_var, font=('Arial', 14), bd=2, relief=tk.SOLID) max_tokens_entry.grid(row=4, column=1, padx=5, pady=5)

send_button = tk.Button(root, text='发送', command=get_response, font=('Arial Bold', 14), bg='#0077c8', fg='white', padx=5, bd=2, relief=tk.SOLID) send_button.pack(pady=5)

clear_button = tk.Button(root, text='清除', command=clear_response, font=('Arial Bold', 14), bg='#0077c8', fg='white', padx=5, bd=2, relief=tk.SOLID) clear_button.pack(pady=5, padx=5)

response_frame = tk.LabelFrame(root, text='GPT-3.5 回复', font=('Arial Bold', 14), bg='#ffffff', bd=2, relief=tk.SOLID) response_frame.pack(pady=10)

response_text = tk.Text(response_frame, height=10, width=55, font=('黑体', 15), bd=2, relief=tk.SOLID) response_text.pack(padx=5, pady=5) root.mainloop()

GPT-3.5/GPT-4 对话助手 - 使用 OpenAI API 构建聊天机器人

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

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