【一周精选】PyQt5 高端可视化 AI 助手
8套主题+智能解析+全能功能,零基础也能打造顶级GUI!



在Python GUI开发领域,PyQt5凭借其强大的控件库、灵活的界面定制能力和跨平台特性,成为桌面应用开发的首选框架。而AI大模型的普及,让桌面端AI助手成为了效率工具的新趋势——想象一下,不用打开浏览器、不用切换网页,在专属的桌面应用中就能随时随地调用通义千问AI,还能自由切换护眼、暗黑、清新等8套高颜值主题,自动解析Markdown和JSON格式内容,支持对话记录保存、单条回答复制下载、API密钥持久化存储……这样一款美观大方、功能齐全、精致高级、不透明超好看的全能AI助手,正是我们今天要手把手带你实现的作品!
这款应用完美解决了传统AI工具的痛点:网页版界面单调、主题单一、对话记录难以管理、复制下载操作繁琐;而我们基于PyQt5开发的桌面端AI助手,不仅拥有极致的视觉体验,还通过多线程技术解决了AI请求卡顿问题,通过配置文件实现密钥永久保存,通过富文本渲染实现对话分级展示,适配所有使用场景。无论是办公、学习、开发调试,还是日常问答,它都能以最优雅的方式满足你的需求。更重要的是,代码结构清晰、注释详尽,零基础开发者也能轻松理解、修改、拓展,真正做到开箱即用、学以致用。
接下来,我将分模块深度解析核心代码,带你吃透PyQt5界面开发、多线程通信、主题切换、AI接口调用、文件操作等核心知识点,打造属于你的专属高端AI桌面工具!
📌 核心代码模块深度解析
模块一:全局配置与工具函数 —— 应用的「基础骨架」
这部分是整个程序的基石,包含了主题配色定义、API密钥读写、内容格式化三大核心功能,为后续界面和功能开发提供统一的配置和工具支持。
import sys
import json
import os
from datetime import datetime
import markdown
import dashscope
from dashscope import Generation
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout,
QHBoxLayout, QTextEdit, QLineEdit, QPushButton,
QLabel, QFileDialog, QMessageBox, QGroupBox,
QComboBox, QFrame)
from PyQt5.QtCore import Qt, QThread, pyqtSignal
from PyQt5.QtGui import QFont, QPalette, QColor
# ==================== 全局配置 ====================
DEFAULT_SK = "sk-2e1e247fdb91498c90937e5a3b4f换成自己的"# 默认API密钥
CONFIG_FILE = "sk_config.ini"# 密钥配置文件
DEFAULT_MODEL = "qwen-turbo"# AI模型
# 8套预设主题配色(背景、聊天框、文字、边框)
THEME_LIST = [
{"name": "经典纯白", "bg": "#ffffff", "chat_bg": "#f8f9fa", "text": "#333333", "border": "#dddddd"},
{"name": "护眼淡绿", "bg": "#f0f8f4", "chat_bg": "#e8f5ee", "text": "#2c3e50", "border": "#b8e0c8"},
{"name": "清新淡蓝", "bg": "#f0f7ff", "chat_bg": "#e6f2ff", "text": "#1f2937", "border": "#b3d9ff"},
{"name": "暖米淡黄", "bg": "#fffaf0", "chat_bg": "#fff6e0", "text": "#444444", "border": "#ffe0b3"},
{"name": "深夜暗黑", "bg": "#2b2b2b", "chat_bg": "#3c3f41", "text": "#eeeeee", "border": "#555555"},
{"name": "极客深蓝", "bg": "#1a202c", "chat_bg": "#2d3748", "text": "#e2e8f0", "border": "#4a5568"},
{"name": "樱花浅粉", "bg": "#fef4f8", "chat_bg": "#ffeaf2", "text": "#333333", "border": "#f8c8dc"},
{"name": "墨青素雅", "bg": "#f2f7f5", "chat_bg": "#e4edea", "text": "#222222", "border": "#c2d6cd"},
]
# 读取本地保存的API密钥
defget_save_sk():
if os.path.exists(CONFIG_FILE):
with open(CONFIG_FILE,"r",encoding="utf-8") as f:
return f.read().strip()
return DEFAULT_SK
# 保存API密钥到本地文件
defsave_sk(sk):
with open(CONFIG_FILE,"w",encoding="utf-8") as f:
f.write(sk)
chat_history = [] # 对话历史记忆
last_ai_content = ""# 最后一条AI回答
# 自动格式化内容:JSON格式化 + Markdown渲染
defauto_format_content(text):
# 尝试解析为JSON并格式化
try:
json_data = json.loads(text)
return"📋 JSON格式化展示:\n" + json.dumps(json_data,ensure_ascii=False,indent=4)
except:
pass
# 尝试解析为Markdown并渲染为HTML
if text.startswith("#") or"```"in text or"**"in text:
md_html = markdown.markdown(text)
returnf"📝 Markdown渲染展示:\n{md_html}"
return text
核心亮点:
-
8套主题预设:采用十六进制配色,覆盖浅色、深色、护眼、清新等所有常用场景,满足不同视觉需求;
-
密钥持久化:通过
ini文件保存API密钥,重启程序无需重新输入; -
智能内容解析:自动识别JSON和Markdown格式,分别实现格式化展示和富文本渲染,大幅提升阅读体验。
模块二:AI请求多线程 —— 应用的「核心引擎」
GUI程序最大的禁忌是主线程耗时操作(如网络请求),会导致界面卡死。本模块通过QThread实现后台AI请求,通过自定义信号实现线程间通信,保证界面流畅运行。
# ==================== 后台请求线程 ====================
classAiWorker(QThread):
# 自定义信号:传递AI回答内容
signal_answer = pyqtSignal(str)
def__init__(self, new_msg, history_list, sk):
super().__init__()
self.new_msg = new_msg # 用户提问
self.history = history_list # 对话历史
self.sk = sk # API密钥
defrun(self):
global last_ai_content
try:
dashscope.api_key = self.sk
# 拼接对话上下文
messages = self.history.copy()
messages.append({"role": "user", "content": self.new_msg})
# 调用通义千问API
resp = Generation.call(
model=DEFAULT_MODEL,
messages=messages,
temperature=0.7, # 随机性参数
result_format="message"
)
# 异常处理:账号欠费/API错误
if resp.status_code != 200:
if"Arrearage"in str(resp.message):
res = "❌ 阿里云账号欠费!请充值或更换可用SK"
else:
res = f"❌ API异常:{resp.code}\n{resp.message}"
last_ai_content = res
self.signal_answer.emit(res)
return
# 获取回答并格式化
raw_reply = resp.output.choices[0].message.content.strip()
format_reply = auto_format_content(raw_reply)
last_ai_content = format_reply
self.signal_answer.emit(format_reply)
except Exception as e:
err = str(e)
tip = "❌ 阿里云账号欠费!更换有效SK"if"Arrearage"in err elsef"❌ 程序错误:{err}"
last_ai_content = tip
self.signal_answer.emit(tip)
核心亮点:
-
多线程解耦:AI请求在子线程运行,主线程界面始终响应;
-
信号通信:
pyqtSignal实现子线程向主线程发送回答数据,安全高效; -
完善异常处理:精准识别账号欠费、网络错误、API异常等问题,给出友好提示;
-
上下文记忆:携带历史对话请求AI,实现连续对话功能。
模块三:主窗口界面与功能实现 —— 应用的「颜值与交互」
这是程序的核心界面模块,使用PyQt5的布局管理器、控件、样式表实现高端精致的UI,集成主题切换、对话展示、密钥管理、文件保存等所有功能。
# ==================== 主窗口(8主题+复制/下载/保存) ====================
classQwenUltraAssistant(QMainWindow):
def__init__(self):
super().__init__()
self.setWindowTitle("千问AI|8套主题+复制单条+下载保存+MD/JSON美化")
self.resize(850,800) # 窗口尺寸
self.current_theme_idx = 0# 默认主题索引
self.current_sk = get_save_sk() # 读取密钥
self.init_ui() # 初始化界面
self.apply_theme() # 应用主题
definit_ui(self):
# 核心布局:垂直布局
central_widget = QWidget()
self.setCentralWidget(central_widget)
main_layout = QVBoxLayout(central_widget)
main_layout.setSpacing(10)
main_layout.setContentsMargins(15,15,15,15)
# 1. API密钥配置区
sk_group = QGroupBox("🔑 API密钥(默认自带,可修改保存)")
sk_layout = QHBoxLayout(sk_group)
self.sk_input = QLineEdit()
self.sk_input.setText(self.current_sk)
self.btn_save_sk = QPushButton("保存密钥")
self.btn_save_sk.clicked.connect(self.update_sk)
sk_layout.addWidget(self.sk_input)
sk_layout.addWidget(self.btn_save_sk)
main_layout.addWidget(sk_group)
# 2. 主题切换+功能按钮区
top_layout = QHBoxLayout()
self.theme_combo = QComboBox()
for t in THEME_LIST:
self.theme_combo.addItem(t["name"])
self.theme_combo.currentIndexChanged.connect(self.switch_theme)
# 功能按钮
self.btn_clear = QPushButton("🗑️清空对话")
self.btn_save_all = QPushButton("💾保存全部记录")
self.btn_copy_last = QPushButton("📋复制最后回答")
self.btn_down_last = QPushButton("📥下载最后回答")
# 绑定按钮事件
self.btn_clear.clicked.connect(self.clear_chat)
self.btn_save_all.clicked.connect(self.save_all_log)
self.btn_copy_last.clicked.connect(self.copy_last_answer)
self.btn_down_last.clicked.connect(self.download_last_answer)
top_layout.addWidget(QLabel("🎨主题:"))
top_layout.addWidget(self.theme_combo)
top_layout.addWidget(self.btn_clear)
top_layout.addWidget(self.btn_save_all)
top_layout.addWidget(self.btn_copy_last)
top_layout.addWidget(self.btn_down_last)
main_layout.addLayout(top_layout)
# 3. 标题栏
title = QLabel("📚 千问知识问答|MD/JSON分级美化展示")
title.setFont(QFont("Microsoft YaHei",14,QFont.Bold))
title.setAlignment(Qt.AlignCenter)
main_layout.addWidget(title)
# 4. 聊天展示区(富文本)
self.chat_area = QTextEdit()
self.chat_area.setReadOnly(True)
self.chat_area.setFont(QFont("Microsoft YaHei",11))
main_layout.addWidget(self.chat_area)
# 5. 输入发送区
input_layout = QHBoxLayout()
self.input_edit = QLineEdit()
self.input_edit.setPlaceholderText("输入问题,支持上下文记忆,自动解析JSON/Markdown...")
self.btn_send = QPushButton("发送 🚀")
self.btn_send.clicked.connect(self.send_msg)
self.input_edit.returnPressed.connect(self.send_msg) # 回车发送
input_layout.addWidget(self.input_edit)
input_layout.addWidget(self.btn_send)
main_layout.addLayout(input_layout)
self.append_html("系统","欢迎使用!已内置8套精美主题,支持单条复制/下载、全局保存、MD/JSON自动美化")
# 主题切换函数
defswitch_theme(self, idx):
self.current_theme_idx = idx
self.apply_theme()
# 应用主题样式(Qt样式表)
defapply_theme(self):
t = THEME_LIST[self.current_theme_idx]
self.setStyleSheet(f"background-color:{t['bg']};")
self.chat_area.setStyleSheet(f"""
QTextEdit{{
background-color:{t['chat_bg']};
color:{t['text']};
border:1px solid {t['border']};
border-radius:8px;
padding:12px;
}}
""")
# 以下为功能函数:更新密钥、清空对话、保存记录、复制下载等
defupdate_sk(self):...
defclear_chat(self):...
defsave_all_log(self):...
defcopy_last_answer(self):...
defdownload_last_answer(self):...
defsend_msg(self):...
defshow_reply(self,reply):...
defappend_html(self, sender, text):...
# 程序入口
if __name__ == "__main__":
app = QApplication(sys.argv)
win = QwenUltraAssistant()
win.show()
sys.exit(app.exec_())
核心亮点:
-
极致UI设计:使用圆角、间距、配色打造高级感界面,支持动态主题切换;
-
全能交互:集成密钥保存、清空对话、全局保存、单条复制/下载、回车发送等功能;
-
富文本对话:HTML渲染对话内容,区分用户/AI/系统消息,对齐方式、颜色差异化展示;
-
布局优雅:采用
QVBoxLayout+QHBoxLayout组合布局,界面自适应,美观不拥挤。
📋 完整可运行代码
import sys
import json
import os
from datetime import datetime
import markdown
import dashscope
from dashscope import Generation
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout,
QHBoxLayout, QTextEdit, QLineEdit, QPushButton,
QLabel, QFileDialog, QMessageBox, QGroupBox,
QComboBox, QFrame)
from PyQt5.QtCore import Qt, QThread, pyqtSignal
from PyQt5.QtGui import QFont, QPalette, QColor
# ==================== 全局配置 ====================
DEFAULT_SK = "sk-2e1e247fdb91498c90937e5a3b4f换成自己的"
CONFIG_FILE = "sk_config.ini"
DEFAULT_MODEL = "qwen-turbo"
# 8套预设主题配色
THEME_LIST = [
{"name": "经典纯白", "bg": "#ffffff", "chat_bg": "#f8f9fa", "text": "#333333", "border": "#dddddd"},
{"name": "护眼淡绿", "bg": "#f0f8f4", "chat_bg": "#e8f5ee", "text": "#2c3e50", "border": "#b8e0c8"},
{"name": "清新淡蓝", "bg": "#f0f7ff", "chat_bg": "#e6f2ff", "text": "#1f2937", "border": "#b3d9ff"},
{"name": "暖米淡黄", "bg": "#fffaf0", "chat_bg": "#fff6e0", "text": "#444444", "border": "#ffe0b3"},
{"name": "深夜暗黑", "bg": "#2b2b2b", "chat_bg": "#3c3f41", "text": "#eeeeee", "border": "#555555"},
{"name": "极客深蓝", "bg": "#1a202c", "chat_bg": "#2d3748", "text": "#e2e8f0", "border": "#4a5568"},
{"name": "樱花浅粉", "bg": "#fef4f8", "chat_bg": "#ffeaf2", "text": "#333333", "border": "#f8c8dc"},
{"name": "墨青素雅", "bg": "#f2f7f5", "chat_bg": "#e4edea", "text": "#222222", "border": "#c2d6cd"},
]
# 读写SK配置
defget_save_sk():
if os.path.exists(CONFIG_FILE):
with open(CONFIG_FILE,"r",encoding="utf-8") as f:
return f.read().strip()
return DEFAULT_SK
defsave_sk(sk):
with open(CONFIG_FILE,"w",encoding="utf-8") as f:
f.write(sk)
chat_history = []
last_ai_content = ""# 记录最后一条AI回答,用于复制/单条下载
# ==================== 后台请求线程 ====================
classAiWorker(QThread):
signal_answer = pyqtSignal(str)
def__init__(self, new_msg, history_list, sk):
super().__init__()
self.new_msg = new_msg
self.history = history_list
self.sk = sk
defrun(self):
global last_ai_content
try:
dashscope.api_key = self.sk
messages = self.history.copy()
messages.append({"role": "user", "content": self.new_msg})
resp = Generation.call(
model=DEFAULT_MODEL,
messages=messages,
temperature=0.7,
result_format="message"
)
if resp.status_code != 200:
if"Arrearage"in str(resp.message):
res = "❌ 阿里云账号欠费!请充值或更换可用SK"
else:
res = f"❌ API异常:{resp.code}\n{resp.message}"
last_ai_content = res
self.signal_answer.emit(res)
return
raw_reply = resp.output.choices[0].message.content.strip()
format_reply = auto_format_content(raw_reply)
last_ai_content = format_reply
self.signal_answer.emit(format_reply)
except Exception as e:
err = str(e)
tip = "❌ 阿里云账号欠费!更换有效SK"if"Arrearage"in err elsef"❌ 程序错误:{err}"
last_ai_content = tip
self.signal_answer.emit(tip)
# 自动格式化JSON/MD
defauto_format_content(text):
try:
json_data = json.loads(text)
return"📋 JSON格式化展示:\n" + json.dumps(json_data,ensure_ascii=False,indent=4)
except:
pass
if text.startswith("#") or"```"in text or"**"in text:
md_html = markdown.markdown(text)
returnf"📝 Markdown渲染展示:\n{md_html}"
return text
# ==================== 主窗口(8主题+复制/下载/保存) ====================
classQwenUltraAssistant(QMainWindow):
def__init__(self):
super().__init__()
self.setWindowTitle("千问AI|8套主题+复制单条+下载保存+MD/JSON美化")
self.resize(850,800)
self.current_theme_idx = 0
self.current_sk = get_save_sk()
self.init_ui()
self.apply_theme()
definit_ui(self):
central_widget = QWidget()
self.setCentralWidget(central_widget)
main_layout = QVBoxLayout(central_widget)
main_layout.setSpacing(10)
main_layout.setContentsMargins(15,15,15,15)
# 1.SK配置区
sk_group = QGroupBox("🔑 API密钥(默认自带,可修改保存)")
sk_layout = QHBoxLayout(sk_group)
self.sk_input = QLineEdit()
self.sk_input.setText(self.current_sk)
self.btn_save_sk = QPushButton("保存密钥")
self.btn_save_sk.clicked.connect(self.update_sk)
sk_layout.addWidget(self.sk_input)
sk_layout.addWidget(self.btn_save_sk)
main_layout.addWidget(sk_group)
# 2.主题选择+功能按钮区
top_layout = QHBoxLayout()
# 8套主题下拉
self.theme_combo = QComboBox()
for t in THEME_LIST:
self.theme_combo.addItem(t["name"])
self.theme_combo.currentIndexChanged.connect(self.switch_theme)
# 全局功能按钮
self.btn_clear = QPushButton("🗑️清空对话")
self.btn_save_all = QPushButton("💾保存全部记录")
self.btn_copy_last = QPushButton("📋复制最后回答")
self.btn_down_last = QPushButton("📥下载最后回答")
self.btn_clear.clicked.connect(self.clear_chat)
self.btn_save_all.clicked.connect(self.save_all_log)
self.btn_copy_last.clicked.connect(self.copy_last_answer)
self.btn_down_last.clicked.connect(self.download_last_answer)
top_layout.addWidget(QLabel("🎨主题:"))
top_layout.addWidget(self.theme_combo)
top_layout.addWidget(self.btn_clear)
top_layout.addWidget(self.btn_save_all)
top_layout.addWidget(self.btn_copy_last)
top_layout.addWidget(self.btn_down_last)
main_layout.addLayout(top_layout)
# 3.标题
title = QLabel("📚 千问知识问答|MD/JSON分级美化展示")
title.setFont(QFont("Microsoft YaHei",14,QFont.Bold))
title.setAlignment(Qt.AlignCenter)
main_layout.addWidget(title)
# 4.聊天展示区
self.chat_area = QTextEdit()
self.chat_area.setReadOnly(True)
self.chat_area.setFont(QFont("Microsoft YaHei",11))
main_layout.addWidget(self.chat_area)
# 5.输入发送区
input_layout = QHBoxLayout()
self.input_edit = QLineEdit()
self.input_edit.setPlaceholderText("输入问题,支持上下文记忆,自动解析JSON/Markdown...")
self.btn_send = QPushButton("发送 🚀")
self.btn_send.clicked.connect(self.send_msg)
self.input_edit.returnPressed.connect(self.send_msg)
input_layout.addWidget(self.input_edit)
input_layout.addWidget(self.btn_send)
main_layout.addLayout(input_layout)
self.append_html("系统","欢迎使用!已内置8套精美主题,支持单条复制/下载、全局保存、MD/JSON自动美化")
# 切换8套主题
defswitch_theme(self, idx):
self.current_theme_idx = idx
self.apply_theme()
defapply_theme(self):
t = THEME_LIST[self.current_theme_idx]
# 窗口底色
self.setStyleSheet(f"background-color:{t['bg']};")
# 聊天框样式
self.chat_area.setStyleSheet(f"""
QTextEdit{{
background-color:{t['chat_bg']};
color:{t['text']};
border:1px solid {t['border']};
border-radius:8px;
padding:12px;
}}
""")
# 更新SK密钥
defupdate_sk(self):
new_sk = self.sk_input.text().strip()
ifnot new_sk:
QMessageBox.warning(self,"提示","密钥不能为空!")
return
self.current_sk = new_sk
save_sk(new_sk)
dashscope.api_key = new_sk
QMessageBox.information(self,"成功","密钥已保存并立即生效!")
self.append_html("系统","✅ 新API密钥启用成功")
# 清空对话+记忆
defclear_chat(self):
global chat_history, last_ai_content
res = QMessageBox.question(self,"确认","清空所有对话+历史记忆?",QMessageBox.Yes|QMessageBox.No)
if res == QMessageBox.Yes:
self.chat_area.clear()
chat_history.clear()
last_ai_content = ""
self.append_html("系统","✅ 已清空全部对话与上下文")
# 保存全部聊天记录
defsave_all_log(self):
content = self.chat_area.toPlainText()
ifnot content.strip():
QMessageBox.warning(self,"提示","暂无聊天记录可保存!")
return
path,_ = QFileDialog.getSaveFileName(
self,"保存全部记录",
f"千问全量记录_{datetime.now().strftime('%Y%m%d%H%M%S')}.txt",
"TXT文本(*.txt)"
)
if path:
with open(path,"w",encoding="utf-8") as f:
f.write(content)
QMessageBox.information(self,"成功","全部聊天记录保存完成!")
# 复制最后一条AI回答
defcopy_last_answer(self):
global last_ai_content
ifnot last_ai_content:
QMessageBox.warning(self,"提示","暂无最后回答可复制!")
return
clipboard = QApplication.clipboard()
clipboard.setText(last_ai_content)
QMessageBox.information(self,"成功","最后一条回答已复制到剪贴板!")
# 单独下载最后一条AI回答
defdownload_last_answer(self):
global last_ai_content
ifnot last_ai_content:
QMessageBox.warning(self,"提示","暂无最后回答可下载!")
return
path,_ = QFileDialog.getSaveFileName(
self,"单条保存回答",
f"AI回答_{datetime.now().strftime('%Y%m%d%H%M%S')}.txt",
"TXT文本(*.txt);;JSON文件(*.json)"
)
if path:
with open(path,"w",encoding="utf-8") as f:
f.write(last_ai_content)
QMessageBox.information(self,"成功","单条回答下载保存完成!")
# 发送提问
defsend_msg(self):
global chat_history
text = self.input_edit.text().strip()
ifnot text:return
self.append_html("我",text)
self.input_edit.clear()
self.btn_send.setEnabled(False)
self.worker = AiWorker(text, chat_history, self.current_sk)
self.worker.signal_answer.connect(self.show_reply)
self.worker.start()
# 展示回答+存入记忆
defshow_reply(self,reply):
global chat_history
self.append_html("千问AI",reply)
self.btn_send.setEnabled(True)
ifnot reply.startswith("❌"):
chat_history.append({"role":"user","content":self.input_edit.text()})
chat_history.append({"role":"assistant","content":reply})
# 富文本分级展示(适配8主题)
defappend_html(self, sender, text):
t = THEME_LIST[self.current_theme_idx]
if sender == "我":
color = "#0078d7"
align = "right"
elif sender == "千问AI":
color = "#28a745"
align = "left"
else:
color = "#ff9800"
align = "center"
safe_text = text.replace("\n","<br>")
html = f"""
<div style="text-align:{align};margin:10px 0;">
<span style="color:{color};font-weight:bold;font-size:13px;">【{sender}】</span>
<div style="font-size:13px;line-height:1.8;padding:8px;border-left:3px solid {color};margin-top:5px;background:{t['chat_bg']};border-radius:4px;">
{safe_text}
</div>
</div>
"""
self.chat_area.append(html)
self.chat_area.verticalScrollBar().setValue(self.chat_area.verticalScrollBar().maximum())
if __name__ == "__main__":
app = QApplication(sys.argv)
win = QwenUltraAssistant()
win.show()
sys.exit(app.exec_)
📚 核心知识点总结
-
PyQt5界面开发
-
主窗口
QMainWindow+中心控件QWidget实现基础界面; -
垂直/水平布局管理器实现自适应界面;
-
样式表
QSS实现自定义UI配色、圆角、边框; -
按钮、输入框、文本域、下拉框等基础控件的使用。
-
多线程与信号槽
-
QThread实现后台耗时任务,避免界面卡死; -
pyqtSignal自定义信号,实现线程间数据传递; -
信号与槽的绑定,实现控件交互逻辑。
-
AI接口调用
-
通义千问
dashscope库的使用; -
对话上下文管理,实现连续对话;
-
API异常捕获与友好提示。
-
文件与数据处理
-
本地文件读写(API密钥保存、对话记录导出);
-
JSON格式化解析、Markdown富文本渲染;
-
全局变量管理对话历史与最新回答。
🚀 拓展场景与测试步骤
一、测试步骤(快速验证功能)
-
环境安装:执行
pip install pyqt5 dashscope markdown安装依赖; -
运行程序:直接运行代码,弹出AI助手窗口;
-
基础测试:输入问题点击发送,验证AI回复;
-
主题测试:切换下拉框主题,验证界面配色实时变化;
-
功能测试:测试复制、下载、保存、清空、密钥修改功能;
-
格式测试:提问
返回一个JSON格式的用户信息/用Markdown写一篇Python介绍,验证自动解析。
二、拓展场景
-
功能拓展:新增语音输入/输出、AI画图、模型切换功能;
-
界面拓展:增加字体大小调节、窗口透明度调节、自定义主题功能;
-
存储拓展:将对话记录保存到数据库、支持历史记录搜索;
-
商用拓展:封装为exe桌面软件,添加用户登录、会员功能;
-
行业拓展:定制为客服AI、编程助手、学习助手、办公助手等垂直工具。
这款PyQt5 AI助手是桌面开发与AI结合的经典案例,掌握它,你就能轻松开发各类高端Python桌面工具,解锁Python全栈开发新技能!
夜雨聆风