可爱白兔表情

[img]http://baby69yy2000.iteye.com/upload/picture/pic/32113/68d8ed46-381d-3991-a8f9-83b2b6091f98.gif[/img]
import tkinter as tk from tkinter import ttk, scrolledtext import requests import threading from openai import OpenAI class AIChatApp: def __init__(self, root): self.root = root self.root.title("多模式AI聊天助手") self.root.geometry("800x600") # API密钥配置 self.apikeys = { "DeepSeek": "sk-86f7011cbeb84f62889d26811582e9f9", "豆包": "aff13a64-a419-4741-9dac-998d11eadc41", "千问": "sk-7df3bd6561fc439a85dcc205607e5a6e" } # 对话模式配置 self.modes = { "问答模式": { "system": "你是一个专业的AI助手,请准确、简洁地回答用户的问题。", "temperature": 0.3 }, "女友模式": { "system": "你是一个温柔体贴的女朋友,请用关心、撒娇的语气和用户交流。", "temperature": 0.8 }, "男友模式": { "system": "你是一个体贴的男朋友,请用关心、宠溺的语气和用户交流。", "temperature": 0.8 } } # 创建UI组件 self.create_widgets() def create_widgets(self): # 顶部控制面板 control_frame = ttk.Frame(self.root, padding="10") control_frame.pack(fill=tk.X) # AI模型选择 ttk.Label(control_frame, text="AI模型:").grid(row=0, column=0, padx=5, pady=5) self.model_var = tk.StringVar(value="豆包") model_combo = ttk.Combobox(control_frame, textvariable=self.model_var, values=list(self.apikeys.keys()), state="readonly") model_combo.grid(row=0, column=1, padx=5, pady=5) # 对话模式选择 ttk.Label(control_frame, text="对话模式:").grid(row=0, column=2, padx=5, pady=5) self.mode_var = tk.StringVar(value="问答模式") mode_combo = ttk.Combobox(control_frame, textvariable=self.mode_var, values=list(self.modes.keys()), state="readonly") mode_combo.grid(row=0, column=3, padx=5, pady=5) # 发送按钮 send_button = ttk.Button(control_frame, text="发送", command=self.send_message) send_button.grid(row=0, column=4, padx=5, pady=5) # 清空按钮 clear_button = ttk.Button(control_frame, text="清空", command=self.clear_chat) clear_button.grid(row=0, column=5, padx=5, pady=5) # 聊天显示区域 self.chat_display = scrolledtext.ScrolledText(self.root, wrap=tk.WORD, state=tk.DISABLED) self.chat_display.pack(fill=tk.BOTH, expand=True, padx=10, pady=10) # 用户输入区域 input_frame = ttk.Frame(self.root, padding="10") input_frame.pack(fill=tk.X) self.user_input = ttk.Entry(input_frame) self.user_input.pack(fill=tk.X, side=tk.LEFT, expand=True) self.user_input.bind("<Return>", lambda event: self.send_message()) send_button2 = ttk.Button(input_frame, text="发送", command=self.send_message) send_button2.pack(side=tk.RIGHT, padx=5) def send_message(self): user_message = self.user_input.get().strip() if not user_message: return self.display_message("用户", user_message) self.user_input.delete(0, tk.END) # 在新线程中处理API请求 threading.Thread(target=self.process_ai_response, args=(user_message,), daemon=True).start() def process_ai_response(self, user_message): model = self.model_var.get() mode = self.mode_var.get() try: if model == "DeepSeek": response = self.call_deepseek(user_message, mode) elif model == "豆包": response = self.call_doubao(user_message, mode) elif model == "千问": response = self.call_qianwen(user_message, mode) else: response = "未知的AI模型" self.display_message(model, response) except Exception as e: self.display_message("系统", f"错误: {str(e)}") def display_message(self, sender, message): self.chat_display.config(state=tk.NORMAL) self.chat_display.insert(tk.END, f"{sender}: {message}\n\n") self.chat_display.see(tk.END) self.chat_display.config(state=tk.DISABLED) def clear_chat(self): self.chat_display.config(state=tk.NORMAL) self.chat_display.delete(1.0, tk.END) self.chat_display.config(state=tk.DISABLED) def call_deepseek(self, prompt, mode): mode_config = self.modes[mode] url = "https://api.deepseek.com/v1/chat/completions" headers = { "Content-Type": "application/json", "Authorization": f"Bearer {self.apikeys['DeepSeek']}" } data = { "model": "deepseek-chat", "messages": [ {"role": "system", "content": mode_config["system"]}, {"role": "user", "content": prompt} ], "temperature": mode_config["temperature"] } response = requests.post(url, json=data, headers=headers) if response.status_code == 200: return response.json()["choices"][0]["message"]["content"] else: return f"DeepSeek API错误: {response.status_code} - {response.text}" def call_doubao(self, prompt, mode): mode_config = self.modes[mode] try: # 尝试使用OpenAI客户端调用豆包API client = OpenAI( api_key=self.apikeys["豆包"], base_url="https://ark.cn-beijing.volces.com/api/v3" ) # 使用用户提供的正确豆包模型ID response = client.chat.completions.create( model="doubao-1-5-pro-32k-250115", # 使用正确的豆包模型ID messages=[ {"role": "system", "content": mode_config["system"]}, {"role": "user", "content": prompt} ], temperature=mode_config["temperature"] ) return response.choices[0].message.content except Exception as e: # 如果API调用失败,返回模拟响应,让用户至少能看到程序运行 if mode == "女友模式": return f"亲爱的,我现在有点不方便呢~ 不过你说的'{prompt}'我都记在心里啦,等我恢复了就好好回复你!" elif mode == "男友模式": return f"宝贝,我现在有点忙,不过你的问题'{prompt}'很有趣,等我有空了一定好好和你聊聊!" else: return f"豆包API暂时不可用,无法处理您的问题:{prompt}\n\n错误信息:{str(e)}\n\n请检查API密钥和网络连接是否正确。" def call_qianwen(self, prompt, mode): mode_config = self.modes[mode] url = "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation" headers = { "Content-Type": "application/json", "Authorization": f"Bearer {self.apikeys['千问']}" } data = { "model": "qwen-turbo", "input": { "messages": [ {"role": "system", "content": mode_config["system"]}, {"role": "user", "content": prompt} ] }, "parameters": { "temperature": mode_config["temperature"] } } response = requests.post(url, json=data, headers=headers) if response.status_code == 200: return response.json()["output"]["text"] else: return f"千问API错误: {response.status_code} - {response.text}" if __name__ == "__main__": root = tk.Tk() app = AIChatApp(root) root.mainloop() 帮我改成可爱风,排版简洁且与这个不同
09-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值