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

news2025/6/8 16:50:23

🐑 |从零开始的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':
            break

        answer = 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':
            break

        answer = 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.coloradmin.cn/o/2404331.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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资源,为了解决这个问题的出现,我们…

SpringBoot2.3.1集成Knife4j接口文档

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

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

&#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里…

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;具体步骤…

GIC700概述

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

统信桌面专业版如何使用python开发平台jupyter

哈喽呀&#xff0c;小伙伴们 最近有学员想了解在统信UOS桌面专业版系统上开发python程序&#xff0c;Anaconda作为python开发平台,anaconda提供图形开发平台,提供大量的开发插件和管理各种插件的平台&#xff0c;但是存在版权问题&#xff0c;有没有其他工具可以替代Anaconda呢…

什么是预训练?深入解读大模型AI的“高考集训”

1. 预训练的通俗理解&#xff1a;AI的“高考集训” 我们可以将预训练&#xff08;Pre-training&#xff09; 形象地理解为大模型AI的“高考集训”。就像学霸在高考前需要刷五年高考三年模拟一样&#xff0c;大模型在正式诞生前&#xff0c;也要经历一场声势浩大的“题海战术”…

鸿蒙仓颉语言开发实战教程:购物车页面

大家上午好&#xff0c;仓颉语言商城应用的开发进程已经过半&#xff0c;不知道大家通过这一系列的教程对仓颉开发是否有了进一步的了解。今天要分享的购物车页面&#xff1a; 看到这个页面&#xff0c;我们首先要对它简单的分析一下。这个页面一共分为三部分&#xff0c;分别是…

OPENCV的AT函数

一.AT函数介绍 在 OpenCV 中&#xff0c;at&#xff08;&#xff09; 是一个模板成员函数&#xff0c;用于访问和修改矩阵或图像中特定位置的元素。它提供了一种直接且类型安全的方式来操作单个像素值&#xff0c;但需要注意其性能和类型匹配问题 AT函数是OPENCV中重要的函数…

ISO 17387——解读自动驾驶相关标准法规(LCDAS)

Intelligent transport systems — Lane change decision aid systems (LCDAS) — Performance requirements and test procedures(First edition: 2008-05-01) 原文链接&#xff1a;https://cdn.standards.iteh.ai/samples/43654/701fd49bde7b4d3db165444b7c6f0c53/ISO-17387…

智慧零售管理中的客流统计与属性分析

智慧零售管理中的视觉分析技术应用 一、背景与需求 随着智慧零售的快速发展&#xff0c;传统零售门店面临管理效率低、安全风险高、客户体验差等问题。通过视觉分析技术&#xff0c;智慧零售管理系统可实现对门店内人员行为的实时监控与数据分析&#xff0c;从而提升运营效率…

Ps:Adobe PDF 预设

Ps菜单&#xff1a;编辑/Adobe PDF 预设 Edit/Adobe PDF Presets 通过“Adobe PDF 预设” Adobe PDF Presets对话框&#xff0c;可以查看 Adobe PDF 预设&#xff0c;了解复杂的 PDF 设置。还可以编辑、新建、删除、载入预设&#xff0c;根据最终用途&#xff08;如高质量打印、…