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

基于【讯飞星火 Spark Lite】轻量级大语言模型的【PySide6应用】开发与实践

背景:之前博主使用PySide6开发了一个刷题复习软件实用刷题复习软件【单机版】 | 使用PySide6自制刷题软件【源码+解析】| 支持自定义excel题库。当前AI大模型火爆,可以借助AI在刷题复习软件中加入AI分析作答功能,提升刷题体验,更好的理解题目背后的逻辑和原理,同时也可以了解一下当前AI开放平台的开发过程。进行了一系列搜索后,决定还是使用免费、比较权威一点的AI大模型平台讯飞星火来完成这项研究工作。这里先放结果测试图,大模型分析的答案还是挺厉害的。

在这里插入图片描述

根据官网的描述,讯飞星火 Spark Lite是一个轻量级大语言模型,具备响应快速、便捷,全面免费开放等特点,适用于低算力推理与模型精调等定制化场景。以下是官网的产品截图:
在这里插入图片描述
接下来进入正文。

基于【讯飞星火 Spark Lite】轻量级大语言模型的【PySide6应用】开发与实践

  • 一、查阅官方API开发文档
  • 二、下载官方的Python 调用示例并进行调试
  • 三、在PySide6中使用 【讯飞星火 Spark Lite】
    • 3.1创建QTextEdit组件
    • 3.2创建工作线程,实现异步更新QTextEdit
    • 3.3启动大模型请求线程
    • 3.4 测试结果
  • 四、结语

一、查阅官方API开发文档

通过以下网址https://xinghuo.xfyun.cn/sparkapi,进入星火大模型API首页。

在这里插入图片描述
找到产品定价页面,点击立即调用

在这里插入图片描述
然后需要进行注册授权之类的操作,最后进入讯飞开放平台控制台,如下图:

在这里插入图片描述
然后点击右下角的文档,进入【星火认知大模型Web API文档】使用教程页面。

在这里插入图片描述

二、下载官方的Python 调用示例并进行调试

把API文档拉到第三部分【3.请求说明】,找到【Python调用示例】链接,并点击下载。

在这里插入图片描述

在这里插入图片描述
解压后,把【http_demo.py】文件用pycharm打开。如下图:

在这里插入图片描述
接着把代码中的【api_key】换成之前注册后获得的【api_key】,注册时获得的【api_key】在下图网页的右上侧。

在这里插入图片描述
最后点击pycharm的运行按钮。可以尝试输入你是谁,如果出现答复,如下图,证明已经调试通过。

在这里插入图片描述

三、在PySide6中使用 【讯飞星火 Spark Lite】

为了显示大模型返回的文字,我们使用PySide6QTextEdit组件进行开发。以下是核心示例代码:

3.1创建QTextEdit组件

from PySide6.QtWidgets import QTextEdit
class MainWindow(QMainWindow):def __init__(self, ):super().__init__()self.ai_answer = QTextEdit()

3.2创建工作线程,实现异步更新QTextEdit

其中AIAssistant类是刚才【讯飞星火 Spark Lite】示例代码的一个封装类,方便线程调用。

# 1. 创建工作线程,继承自 QThread
class WorkerThread(QThread):def __init__(self, question_text):  # 增加新参数 doorssuper().__init__()  # 调用父类的__init__方法初始化brand和modelself.question_text = question_text# 自定义一个信号,用于传递要更新的文本 (str 类型)update_signal = Signal(str)def run(self):ai_assistant = AIAssistant(self.update_signal)question = ai_assistant.checklen(ai_assistant.getText(ai_assistant.chatHistory, "user",self.question_text))ai_assistant.get_answer(question)    

AIAssistant类的实现如下:

class AIAssistant():def __init__(self, update_signal):super().__init__()self.chatHistory = []# 请替换XXXXXXXXXX为您的 APIpassword, 获取地址:https://console.xfyun.cn/services/bmx1self.api_key = "Bearer xxxxxx"self.url = "https://spark-api-open.xf-yun.com/v1/chat/completions"self.update_signal = update_signal# 请求模型,并将结果输出def get_answer(self, message):# 初始化请求体headers = {'Authorization': self.api_key,'content-type': "application/json"}body = {"model": "4.0Ultra","user": "user_id","messages": message,# 下面是可选参数"stream": True,"tools": [{"type": "web_search","web_search": {"enable": True,"search_mode": "deep"}}]}full_response = ""  # 存储返回结果isFirstContent = True  # 首帧标识response = requests.post(url=self.url, json=body, headers=headers, stream=True)# print(response)for chunks in response.iter_lines():# 打印返回的每帧内容# print(chunks)if (chunks and '[DONE]' not in str(chunks)):data_org = chunks[6:]chunk = json.loads(data_org)text = chunk['choices'][0]['delta']# 判断最终结果状态并输出if ('content' in text and '' != text['content']):content = text["content"]if (True == isFirstContent):isFirstContent = False#print(content, end="")full_response += contentself.update_signal.emit(full_response)return full_response# 管理对话历史,按序编为列表def getText(self, text, role, content):jsoncon = {}jsoncon["role"] = rolejsoncon["content"] = contenttext.append(jsoncon)return text# 获取对话中的所有角色的content长度def getlength(self, text):length = 0for content in text:temp = content["content"]leng = len(temp)length += lengreturn length# 判断长度是否超长,当前限制8K tokensdef checklen(self, text):while (self.getlength(text) > 11000):del text[0]return text

核心代码是在for chunks in response.iter_lines():这句循环中加入更新PySide6信号的代码:self.update_signal.emit(full_response)

3.3启动大模型请求线程

最后添加按钮,启动线程即可。示例代码如下:

self.ai_button.setText("点击请求AI大模型分析题目")self.ai_button.clicked.connect(self.start_task)self.toolBar.addWidget(self.ai_button)def start_task(self):self.ai_button.setEnabled(False)  # 任务开始时禁用按钮,防止重复点击self.thread = WorkerThread(result)self.thread.update_signal.connect(self.update_text)  # 连接信号到槽函数self.thread.finished.connect(lambda: self.ai_button.setEnabled(True))  # 任务完成后启用按钮self.thread.start()  # 启动线程

3.4 测试结果

结合博主之前做的一个刷题工具,点击右上角的请求按钮,就会得到这道题目的AI大模型分析的结果,回答的还是挺准的,的确可以指导用户答题和复习。测试效果如下:

在这里插入图片描述

四、结语

当前大模型的发展非常迅速,接口使用的成本已经非常低,快速免费调用已经成为可能。随着大模型和传统应用的深度融合,估计很快就会成为开发应用的标配,大大提升用户使用的体验。

http://www.dtcms.com/a/453229.html

相关文章:

  • MySql(SQL)
  • 做网站赚外快镇安县住房和城乡建设部网站
  • 【STM32项目开源】基于STM32的智能家居环境(空气质量)检测系统
  • Photoshop - Photoshop 工具栏(8)魔棒工具
  • 虹口专业做网站wordpress分类目录第二页
  • 保险业多模态数据融合与智能化运营架构:技术演进、应用实践与发展趋势
  • AI大模型微调教程7
  • Docker 完整教程(5,6) | 容器编译与编排
  • 网站模板 外贸工厂济宁网站建设是什么
  • pyautocad 发送消息到消息栏 acad.doc.Utility.Prompt
  • 【传奇开心果系列】基于Flet框架实现的分析题型的掌握程度不同题型得分饼图样式示例自定义模板特色和实现原理深度解析
  • 做网站怎么防止被网警查到wordpress 设置登陆
  • 部署MySql8.4.6(Kylinv10sp3、Ubuntu2204、Rocky9.3)
  • 高并发下如何保证 Caffeine + Redis 多级缓存的一致性问题?MySQL、Redis 缓存一致性问题?
  • 吉林省建设厅网站评职称系统手机装wordpress
  • LeetCode 分类刷题:1901. 寻找峰值 II
  • ROS实战中Gazebo的基本使用
  • wordpress网站维护教程wordpress修改管理密码
  • PTA6-1 使用函数求最大公约数(C)
  • 小谈:数字化项目立项成功的方法论
  • HTTPS 真的牢不可破吗?—— 中间人攻击与安全机制解析
  • 广东省城乡建设厅网站seo短视频新地址在哪里?
  • 从 0 到 1 搭建 Python 语言 Web UI自动化测试学习系列 9--基础知识 5--常用函数 3
  • 然后在亚马逊网站上做外贸做网站需要做数据库
  • 接口测试-Postman 断言
  • 网站关键词更换了专业网站建设 公司哪家好
  • 乐观锁 与 悲观锁 笔记251007
  • Linux中select的实现
  • /UI2/CL_JSON=>DESERIALIZE :JSON反序列化
  • MySQL主主复制+Keepalived高可用集群搭建与故障切换实战