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

|从零开始的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()目的是当我们把输入的文本发送后,将上次已发送的文本进行清空掉。
简单看下效果:
在这里插入图片描述

♈总结♈

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

http://www.lqws.cn/news/214831.html

相关文章:

  • PL0语法,分析器实现!
  • STM32开发中,线程启动异常问题排查简述
  • 基于Springboot的宠物领养系统
  • 滚珠螺杆的预压技术是如何提高精度的?
  • Mysql-定时删除数据库中的验证码
  • 理论物理与高等数学的交叉点“规范场”和“纤维丛”
  • 程序代码篇---Python串口
  • 【题解-洛谷】P10448 组合型枚举
  • Cloudflare 免费域名邮箱 支持 Catch-all 无限别名收件
  • A Execllent Software Project Review and Solutions
  • C++课设:实现简易文件加密工具(凯撒密码、异或加密、Base64编码)
  • day24 元组和OS模块
  • 【STM32F1标准库】理论——定时器中的输出比较
  • 线程池封装
  • 【深度学习-Day 24】过拟合与欠拟合:深入解析模型泛化能力的核心挑战
  • PLC有脉冲输出,但伺服电机无法旋转
  • 移动应用开发专业核心课程以及就业方向
  • 算法-多条件排序
  • STM32学习笔记:定时器(TIM)原理与应用(详解篇)
  • Windows 下搭建 Zephyr 开发环境
  • VirtualBox启动失败@Ubuntu22.04 说是配置文件有问题
  • ubuuntu24.04 编译安装 PostgreSQL15.6+postgis 3.4.2 + pgrouting 3.6.0 +lz4
  • Oracle 客户端深度指南:SQL Developer 与 PL/SQL Developer 全面安装使用教程
  • SQL慢可能是触发了ring buffer
  • 《探秘跨网段局域网IP广播:解锁网络通信的新姿势》
  • Tableau for mac 驱动
  • element树结构el-tree,默认选中当前setCurrentKey无效
  • 从标准输入直接执行 ELF 二进制文件的实用程序解析(C/C++实现)
  • 【LeetCode】3170. 删除星号以后字典序最小的字符串(贪心 | 优先队列)
  • 电脑悬浮窗便签怎么实现四象限玩法?