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

♈总结♈

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

相关文章:

  • 第10篇《数据库中间件集成监控与全链路观测系统设计》
  • CAN转PROFINET网关设备基本功能介绍
  • uniapp 对接腾讯云IM群组成员管理(增删改查)
  • Ajax Systems公司的核心产品有哪些?
  • 【python深度学习】Day 47 注意力热图可视化
  • STM32的系统滴答定时器简述
  • RTOS学习之重难点
  • 开疆智能Ethernet/IP转Modbus网关连接施耐德ATV320变频器配置案例
  • 怎么让自己ip显示外省?一文说清操作
  • ubuntu中使用docker
  • [总结篇]个人网站
  • 深入剖析Nginx:从入门到高并发架构实战
  • 二.单例模式‌
  • 网页绘制表格
  • 基于 TAPD 进行项目管理
  • centos7编译安装LNMP架构
  • 408第一季 - 数据结构 - 树与二叉树
  • 前端 Electron 桌面应用学习笔记
  • Linux 文本三剑客(grep, awk, sed)
  • Flask与Celery 项目应用(shared_task使用)
  • 东莞凤岗疫情/seo公司哪家好用
  • 动态网站建设包括哪些/产品推销方案
  • 河北建筑工程网/上海最大的seo公司
  • 昆钢建设集团网站/成都seo培训
  • 电影网站怎么做不犯法/做网页设计的软件
  • 天津网站建设制作品牌公司/seo点击工具帮你火21星热情