当前位置: 首页 > article >正文

|从零开始的Pyside2界面编程| 用Pyside2打造一个AI助手界面

🐑 |从零开始的Pyside2界面编程| 用Pyside2打造一个AI助手界面 🐑

文章目录

  • 🐑 |从零开始的Pyside2界面编程| 用Pyside2打造一个AI助手界面 🐑
    • ♈前言♈
    • ♈调取Deepseek大模型♈
      • ♒准备工作♒
      • ♒调用API♒
    • ♈将模型嵌入到ui界面中♈
    • ♈总结♈

♈前言♈

经过上周老学长的提点,这周进度飞速,感觉按照我原来的进度这周的成果需要多耗好多个星期,首先感谢一下学长@浩浩的科研笔记,其次这周的博客就准备简单记录一下,如何把一个AI以api的形式嵌入到自己的ui界面中,引入AI后确实增加了很多交互的体验,就拿我自己做的这个根据心电信号实时识别并预测情绪的系统来看,我完全可以在引入AI后通过AI调取我识别后的情绪模型结果来给用户相关建议或者下一步的想法,人机交互显得更加自然一点。本篇就以引入Deepseek的模型为例来记录一下如何将AI引入到自己的ui界面中。

♈调取Deepseek大模型♈

在打造ui界面的AI助手之前首先来介绍一下如何在python上调取Deepseek大模型并实现一个多轮对话,这里先推荐一下学长@浩浩的科研笔记的一篇博文调用阿里通义千问大语言模型API-小白新手教程-python,这里已经以阿里的通义千问为例将调取大模型API 以及实现多轮对话的功能介绍的很详细了,我这里就以调取Deepseek为例全程记录一下自己调取的步骤。

♒准备工作♒

首先我们需要申请一份DeepseekAPI用于使用python访问Deepseek的模型。进入deepseek的官网:https://www.deepseek.com/,进入右上角的API开放平台

在这里插入图片描述
进入后在开放平台左侧可以看到充值入口,充值后,进入API KEYs
在这里插入图片描述
点击创建API key即可创建一个自己的API 密钥,可以保存到电脑上,或者复制下来
(因为只有创建的时候才能看到自己的密钥,后面关闭创建的弹窗后就看不到了)
然后开始安装requests库,这个库的作用就是HTTP请求到Deepseek API内,安装命令符:
pip install requests。至此准备工作结束。

♒调用API♒

然后一点点来记录下调用刚刚保存的API 的代码。

import requests# 配置参数
API_KEY = ""  # 替换为你的API密钥
API_URL = "https://api.deepseek.com/v1/chat/completions"

其中API_KEY为刚刚保存的密钥复制上即可,下面的API_URL为官方文档的断点地址。

def ask_deepseek(prompt):headers = {"Authorization": f"Bearer {API_KEY}","Content-Type": "application/json"}data = {"model": "deepseek-chat","messages": [{"role": "user", "content": prompt}],"temperature": 0.7,"max_tokens": 1024}

ask_deepseek的函数中分别定义请求头headers以及构造请求数据datamessages中分别包含角色和对话的内容temperature则是控制模型回复的随机性,越靠近1回复就会越天马行空;max_tokens则是限制回复的最大长度(大约1024tokens≈700汉字),并且在data中我们可以改变调用的模型,除了代码中的deepseek-chat外还可以调用deepseek-coder相对而言代码能力更强。

    try:response = requests.post(API_URL, headers=headers, json=data)response.raise_for_status()  # 检查错误return response.json()["choices"][0]["message"]["content"]except Exception as e:return f"错误: {str(e)}"

然后就是发送请求与错误处理,当消息头和请求数据发送成功时,response.json会成功解析API返回的JSON数据,并且通过response.json()["choices"][0]["message"]["content"]提取出AI回复的文本内容,如果请求失败则会返回错误提示。

if __name__ == "__main__":while True:user_input = input("你: ")if user_input.lower() == 'exit':breakanswer = ask_deepseek(user_input)print("DeepSeek:", answer)

最后就是连续对话的一个交互逻辑,当用户输入exit时候退出对话。
完整代码:

import requests# 配置参数
API_KEY = ""  # 替换为你的实际API密钥
API_URL = "https://api.deepseek.com/v1/chat/completions"def ask_deepseek(prompt):headers = {"Authorization": f"Bearer {API_KEY}","Content-Type": "application/json"}data = {"model": "deepseek-chat","messages": [{"role": "user", "content": prompt}],"temperature": 0.7,"max_tokens": 1024}try:response = requests.post(API_URL, headers=headers, json=data)response.raise_for_status()  # 检查错误return response.json()["choices"][0]["message"]["content"]except Exception as e:return f"错误: {str(e)}"if __name__ == "__main__":while True:user_input = input("你: ")if user_input.lower() == 'exit':breakanswer = ask_deepseek(user_input)print("DeepSeek:", answer)

运行后我们可以简单看下效果:
在这里插入图片描述

可以看到我们可以直接在pycharm的控制台中实现实时的对话功能,但是不好的一点就是pycharm的控制台不支持markdown的渲染,所以里面会难以识别出markdown的语法。

♈将模型嵌入到ui界面中♈

既然已经实现了简单使用requestspycharm中调用deepseek的模型,后面就简单记录一下怎样在ui界面中调用。
这里还是以QTdesigner来制作ui界面为例,这里我是创建了一个名为aitest2.ui的文件,包含了一个QTexeBrowser、一个QtextEdit、一个Qpushbutton以及一个label
在这里插入图片描述
首先label就是简单给自己的AI助手设置一个名字,我这里也是随便起的一个,下面分别就是用户的输入栏发送按钮以及回复框,其中三个控件的名字分别为aitextaibutton,以及textbrowser。创建好后我们只需要将他load并结合我们上面的代码,给各个控件加一个交互的指令即可。

import sys
import requests
from PySide2.QtWidgets import QApplication, QMainWindow
from PySide2.QtUiTools import QUiLoader# API 配置(与原始代码保持一致)
API_KEY = ""  # 替换为你的实际API密钥
API_URL = "https://api.deepseek.com/v1/chat/completions"def ask_deepseek(prompt):"""与您提供的函数完全一致的API调用方法"""headers = {"Authorization": f"Bearer {API_KEY}","Content-Type": "application/json"}data = {"model": "deepseek-chat","messages": [{"role": "user", "content": prompt}],"temperature": 0.7,"max_tokens": 1024}try:response = requests.post(API_URL, headers=headers, json=data)response.raise_for_status()return response.json()["choices"][0]["message"]["content"]except Exception as e:return f"错误: {str(e)}"class DeepSeekApp:def __init__(self):# 加载UI文件self.ui = QUiLoader().load("aitest2.ui")# 绑定按钮事件self.ui.aibutton.clicked.connect(self.on_button_click)def on_button_click(self):"""按钮点击事件处理"""user_input = self.ui.aitext.toPlainText().strip()if not user_input:return# 调用与原始代码一致的API方法answer = ask_deepseek(user_input)# 显示结果self.ui.textbrowser.append(f"You: {user_input}")self.ui.textbrowser.append(f"AI: {answer}\n")self.ui.aitext.clear()if __name__ == "__main__":app = QApplication(sys.argv)window = DeepSeekApp()window.ui.show()sys.exit(app.exec_())

第一个函数基本没什么变化,主要第二个调用的类里面记得在初始化中将按钮给初始化了。然后下面的on_button_click的方法也是很简单的交互指令,只是最后记得加上一句 self.ui.aitext.clear()目的是当我们把输入的文本发送后,将上次已发送的文本进行清空掉。
简单看下效果:
在这里插入图片描述

♈总结♈

简单记录一下这周学到的一些比较重要的地方,如果有不合适的地方也欢迎提出。

相关文章:

|从零开始的Pyside2界面编程| 用Pyside2打造一个AI助手界面

🐑 |从零开始的Pyside2界面编程| 用Pyside2打造一个AI助手界面 🐑 文章目录 🐑 |从零开始的Pyside2界面编程| 用Pyside2打造一个AI助手界面 🐑♈前言♈♈调取Deepseek大模型♈♒准备工作♒♒调用API♒ ♈将模型嵌入到ui界面中♈♈…...

React 中 HTML 插入的全场景实践与安全指南

在 React 开发过程中,我们常常会遇到需要插入 HTML 内容的场景。比如将服务端返回的富文本渲染到页面,还有处理复杂的 UI 结构,正确的 HTML 插入方式不仅影响页面展示效果,更关乎应用的安全性。 本文将详细探讨 React 中插入 HTM…...

一键更新依赖全指南:Flutter、Node.js、Kotlin、Java、Go、Python 等主流语言全覆盖

在现代软件开发中,依赖项扮演着至关重要的角色。保持依赖的最新状态不仅可以获得新特性和性能优化,还能修复已知安全漏洞。但在不同语言和框架中,依赖管理的方式差异很大。本篇文章将系统性讲解如何在各主流语言中实现“一键更新依赖”。 &am…...

Java异步编程难题拆解技术

异步编程基础与核心概念 异步编程模型与同步模型的对比 Java中异步编程的常见场景(IO密集型、高并发任务等) 关键术语:Future、CompletableFuture、回调、事件循环 Java异步编程的核心API与框架 Future接口的局限性及基本用法 Completable…...

NoSQL 之 Redis 配置与优化

目录 一、 前置知识点 1. 关系数据库与非关系型数据库 (1)关系型数据库 (2)非关系型数据库 (3)非关系型数据库产生背景 (4)两者对比 2. Redis 基础 (1&#xff0…...

pikachu靶场通关笔记20 SQL注入03-搜索型注入(GET)

目录 一、SQL注入 二、搜索型注入 三、源码分析 1、渗透思路1 2、渗透思路2 四、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入百分号单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取…...

产品笔试专业名词梳理

目录 产品常识 四种常见广告形式 贴片广告 中插广告 信息流广告 横幅广告 BAT和TMD BAT TMD 付费渗透率 蓝海市场、红海市场 蓝海市场 红海市场 竞品研究 SWOT分析 SWOT分析的核心目的: SWOT分析的优点: SWOT分析的局限与注意事项&…...

【前端】es6相关,柯里化

0. 严格模式 严格模式的概念从ES6引进。通过严格模式,可以在函数内部选择进行较为严格的全局或局部的错误条件检测。 MDN中严格模式的描述 严格模式通过抛出错误来消除了一些原有静默错误严格模式修复了一些导致 JavaScript引擎难以执行优化的缺陷:有时…...

51单片机基础部分——矩阵按键检测

前言 上一节,我们说到了独立按键的检测以及使用,但是独立按键每一个按键都要对应一个IO口进行检测,在一些需要多按键的情况下,使用过多的独立按键会过多的占用单片机的IO资源,为了解决这个问题的出现,我们…...

onSaveInstanceState() 和 ViewModel 在数据保存能力差异

一、设计目标差异 ​​维度​​onSaveInstanceState()ViewModel​​核心目的​​保存 ​​瞬态 UI 状态​​(如用户输入、滚动位置),应对进程意外终止或配置变更。管理 ​​业务逻辑相关数据​​,在配置变更时保留数据&#xff0…...

SpringBoot2.3.1集成Knife4j接口文档

首先要查看项目中pom文件里面有没有swagger和knife4j的依赖&#xff0c;如果有的话删除&#xff0c;加入以下依赖 <!-- swagger --><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-spring-boot-starter</…...

Java Fork/Join框架:三大核心组件深度解析

ForkJoinTask、ForkJoinWorkerThread 和 ForkJoinPool 构成了 Java 中 Fork/Join 框架的三个核心组件&#xff0c;它们之间形成了紧密的协作关系&#xff0c;共同提供了高效的并行计算能力。 三者关系概述 ForkJoinPool&#xff1a;执行环境&#xff0c;管理工作线程和任务调…...

【envoy】-1.安装与下载源码

1.安装 建议使用ubuntu2004&#xff0c;对glibc有要求。上个ti子更快。 wget -O- https://apt.envoyproxy.io/signing.key | sudo gpg --dearmor -o /etc/apt/keyrings/envoy-keyring.gpg $ echo "deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/envo…...

B站的视频怎么下载下来——Best Video下载器

B站&#xff08;哔哩哔哩&#xff09;作为国内最受欢迎的视频平台之一&#xff0c;聚集了无数优质内容&#xff1a;动漫番剧、游戏实况、学习课程、纪录片、Vlog、鬼畜剪辑……总有那么些视频让人想反复观看、离线观看&#xff0c;甚至剪辑创作。 但你是否遇到过这样的烦恼&am…...

Mysql-定时删除数据库中的验证码

Moudle 1 使用调度器定时删除事件 数据库实现验证码自动删除的解决方案 -- 删除旧事件&#xff08;如果存在&#xff09; DROP EVENT IF EXISTS delete_expired_captchas;-- 创建新事件&#xff08;每分钟执行一次&#xff09; CREATE EVENT delete_expired_captchas ON SCHE…...

容器安全最佳实践:云原生环境下的零信任架构实施

&#x1f4cb; 目录 引言&#xff1a;容器安全的重要性零信任架构基础理论云原生环境的安全挑战容器安全威胁模型分析零信任架构在容器环境中的实施关键技术组件与工具安全策略与最佳实践监控与响应机制案例研究与实施路径未来发展趋势 引言 随着容器技术和云原生架构的快速…...

[BIOS]VSCode zx-6000 编译问题

前提&#xff1a;Python 3.6.6及以上版本安装成功&#xff0c;Python 3.6.6路径加到了环境变量# DEVITS工具包准备好 问题&#xff1a;添加环境变量 1&#xff1a;出现环境变量错误&#xff0c;“py -3” is not installed or added to environment variables #先在C:\Windows里…...

MySQL连接报SSL错误

问题&#xff08;cmd&#xff09; C:\Users>mysql -h xx.xx.xx.xx -u root -p Enter password: ERROR 2026 (HY000): SSL connection error: error:0A000102:SSL routines::unsupported protocol 解决方案 1. 临时禁用 SSL 连接&#xff08;不推荐生产环境使用&#xff0…...

在WPF项目中集成Python:Python.NET深度实战指南

随着Python在数据分析、机器学习、自动化等领域的广泛应用&#xff0c;越来越多的.NET开发者希望在WPF桌面应用中调用Python代码&#xff0c;实现两者优势互补。Python.NET&#xff08;pythonnet&#xff09;作为连接.NET与Python的桥梁&#xff0c;提供了强大的跨语言调用能力…...

Nuxt.js 布局系统详解:构建可复用页面框架

Nuxt.js 是一个基于 Vue.js 的强大框架&#xff0c;旨在简化开发流程并提高项目的可维护性。布局系统是 Nuxt.js 项目结构中的一个重要组成部分&#xff0c;它位于 layouts 目录下&#xff0c;帮助开发者实现页面间的统一风格和结构复用。 什么是 Nuxt.js 布局系统 Nuxt.js 提…...

CICD实战(二)-----gitlab的安装与配置

1、安装gitlab所需要的依赖包与工具 sudo yum install wget net-tools sudo yum install curl policycoreutils openssh-server openssh-clients postfix -y 2、配置清华源 vim /etc/yum.repo.d/gitlab-ce.repo[gitlab-ce] namegitlab-ce baseurlhttp://mirrors.tuna.tsin…...

[GitHub] 优秀开源项目

1 工具类 1.1 桌面猫咪互动 BongoCat...

Linux中su与sudo命令的区别:权限管理的关键差异解析

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析LLP (二)

低层协议&#xff08;Low Level Protocol, LLP&#xff09;详细解析 1. 低层协议&#xff08;Low Level Protocol, LLP&#xff09;核心特性 包基础 &#xff1a;基于字节的包协议&#xff0c;支持 短包 &#xff08;32位&#xff09;和 长包 &#xff08;可变长度&#xff0…...

第4天:RNN应用(心脏病预测)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目标 具体实现 &#xff08;一&#xff09;环境 语言环境&#xff1a;Python 3.10 编 译 器: PyCharm 框 架: Pytorch &#xff08;二&#xff09;具体步骤…...

Python训练day40

知识点回顾&#xff1a; 彩色和灰度图片测试和训练的规范写法&#xff1a;封装在函数中 展平操作&#xff1a;除第一个维度batchsize外全部展平 dropout操作&#xff1a;训练阶段随机丢弃神经元&#xff0c;测试阶段eval模式关闭dropout 作业&#xff1a;仔细学习下测试和训练…...

湖北理元理律师事务所:债务优化中的民生保障实践

在债务纠纷数量年增21%&#xff08;2023年最高人民法院数据&#xff09;的背景下&#xff0c;法律服务机构如何平衡债务清偿与民生保障&#xff0c;成为行业重要课题。湖北理元理律师事务所通过“法律金融心理”三维服务模式&#xff0c;探索出一条可持续的债务化解路径。 一、…...

Vue-Todo-list 案例

一、前言 在前端开发中&#xff0c;Todo List&#xff08;待办事项列表&#xff09; 是一个非常经典的入门项目。它涵盖了组件化思想、数据绑定、事件处理、本地存储等核心知识点&#xff0c;非常适合用来练习 Vue 的基本用法。 本文将带你一步步实现一个功能完整的 Vue Todo…...

GIC700概述

GIC-700是用于处理外设与处理器核之间&#xff0c;以及核与核之间中断的通用中断控制器。GIC-700支持分布式微体系结构&#xff0c;其中包含用于提供灵活GIC实现的几个独立块。 GIC700支持GICv3、GICv3.1、GICv4.1架构。 该微体系结构规模可从单核到互联多chip环境&#xff0…...

动静态库的使用(Linux)

1.库 通俗来说&#xff0c;库就是现有的&#xff0c;可复用的代码&#xff0c;例如&#xff1a;在C/C语言编译时&#xff0c;就需要依赖相关的C/C标准库。本质上来说库是一种可执行代码的二进制形式&#xff0c;可以被操作系统载入内存执行。通常我们可以在windows下看到一些后…...