板级调试小助手(5)基于Python访问千帆大模型

news2024/9/22 5:33:21

一、前言

        千帆大模型是百度提供的可以使用API接口调用GPT模型,使用Python调用其实是很简单的:去千帆大模型申请账号->使用python调用API即可,具体可以参考这位大佬的博客,这里就不赘述了。

【教程】如何用Python调用百度的千帆大模型?-CSDN博客

        本文章主要分享一个作为初学者的我,使用QT画的一个界面用于交互,和简单的调教,让它可以根据我自定义的函数来帮我生成脚本用于我的小助手。

        代码全部开源详细请移步《板级调试小助手(1)系统结构和原理》文章最后查看。

二、界面设计

设计好的界面如下图所示,由于千帆大模型返回的数据是遵循MarkDown所以使用QT解析MarkDown显示即可

图1 显示界面

三、 代码

        我设计的代码分为两个模块,第一个模块是使用QT显示界面,并对模型做简单的调教。

import sys  
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QTextEdit, QPushButton  
from PyQt5.QtCore import pyqtSignal,QThread
import markdown  
from markdown.extensions.extra import ExtraExtension 
import json
import yiyan_dialog as yiyan
#导入自己的库



#一个线程的类-用于HTTP
class WorkerThread(QThread):  
    # 定义一个信号,用于通知主线程任务已完成  
    finished = pyqtSignal()  
      
    def run(self):  
        global reply_data
        payload = json.dumps({
            "messages": [
                {
                    "role": "user",
                    "content": "现在我定义三个功能脚本函数,在之后的回答中请使用这四个函数进行回答,并写出完整的脚本\
                                1、DO_OUT(A,B) :它是数字量输出函数,A表示通道数取值范围1~8,B表示输出取值为0~1\
                                2、AO_OUT(A,B)  :它是模拟量输出函数,A表示通道数,B表示值范围为0~4096\
                                3、Delay(A):它是延迟函数,A表示延迟时间,单位是毫秒\
                                4、SIN_OUT(A,B,C):它是正弦波输出函数,A表示通道数,B表示频率值,C表示相位值\
                                举个例子:我现在需要让1通道的数字量输出1保持1秒然后让2通道的模拟量输出2000保持1.5秒,生成脚本如下\
                                DO_OUT(1, 1)  // 1通道数字量输出1\
                                Delay(1000)    // 延迟1秒\
                                AO_OUT(2, 2000) // 2通道模拟量输出2000\
                                Delay(1500)     // 延迟1.5秒"\
                },
                {
                    "role": "assistant",
                    "content": "明白了,这三个函数已经被定义好了。现在我可以为你提供使用这些函数的回答。请问有什么我可以帮助你的问题吗?"
                },
                {
                    "role": "user",
                    "content": text_str
                },
            ]
        })
        #发起一次对话
        yiyan_reply = yiyan.request(Messages=payload,\
                                    API_KEY = "JF61iEf1A0scyoIGxctTkbP8",SECRET_KEY = "e4CJ2EI8AqRuCzrNFRMrXYUDNMGeG0Fx");
        reply_data = json.loads(yiyan_reply.text);#解析json
        self.finished.emit()  # 发射信号表示任务完成


#显示的类
class MarkdownViewer(QWidget):  
    def __init__(self):  
        super().__init__()  
        self.initUI()  
  
    def initUI(self):  
        global TextContent;
        self.setWindowTitle('GPT Viewer')  
        self.setGeometry(300, 300, 500, 400)  
  
        # 初始Markdown文本  
        self.markdown_text = "# Hello, GPT!\n\nThis is a *simple* markdown **example**."  
  
        # 创建一个QTextEdit用于显示HTML  
        self.text_edit = QTextEdit(self)  
        self.text_edit.setReadOnly(True)  
        self.text_edit.setAcceptRichText(True)  
  
        #创建一个文本输入框
        self.line_edit = QTextEdit(self)
        TextContent = self.line_edit;

        # 创建一个按钮用于更改Markdown内容  
        self.button = QPushButton('SEND', self)  
        self.button.clicked.connect(self.change_markdown)  
  
        # 使用QVBoxLayout布局  
        layout = QVBoxLayout()  
        layout.addWidget(self.text_edit)    #MARKDOWN
        layout.addWidget(self.line_edit)         #输入框
        layout.addWidget(self.button)       #按钮
        self.setLayout(layout)  
  
        # 初始化时显示Markdown内容  
        self.show_markdown()  


    def show_markdown(self):  
        # 将Markdown转换为HTML  
        html = markdown.markdown(self.markdown_text, extensions=[ExtraExtension()])  
        # 设置QTextEdit的内容为HTML  
        self.text_edit.setHtml(html)  
  
    #按钮回调
    def change_markdown(self):
        global text_str;
        text_str = self.line_edit.toPlainText();    #获取文本框的值
        self.markdown_text = "#生成中....\n\n 请稍等\n"
        # 重新显示Markdown内容  
        self.show_markdown()
        
        # 创建并启动工作线程-让其访问文心一言
        self.thread = WorkerThread()  
        self.thread.finished.connect(self.on_thread_finished)  # 连接信号到槽函数  
        self.thread.start()  # 启动线程

    #线程结束回调
    def on_thread_finished(self):  
        # 当线程任务完成时调用此槽函数  
        self.markdown_text = reply_data['result'];  # 改变Markdown内容  
        print(reply_data['result']);
        self.show_markdown();                       #重新显示Markdown内容

#修改显示内容
def ChangeContent(content="#栗子内容\n\n 这是内容"):
    global DisplayContent  #显示内容
    DisplayContent = content;

#获取窗口输入
def GetText():
    return TextContent.toPlainText();





if __name__ == '__main__':  
    app = QApplication(sys.argv)  
    ex = MarkdownViewer()  
    ex.show()  
    sys.exit(app.exec_())

第二部分则是访问千帆大模型的逻辑

import requests
import json

#需要注意的事messages必须是奇数个
payload = json.dumps({
    "messages": [
        {
            "role": "user",
            "content": "你好"
        }
        #,
        #{
        #    "role": "assistant",
        #    "content": "帮我使用python写一个计算fft的代码"
        #}
    ]
})

#测试用主函数
def main():
    token = get_access_token();
    url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/eb-instant?access_token=" + str(token)
    print(token)
    headers = {
        'Content-Type': 'application/json'
    }
 
    response = requests.request("POST", url, headers=headers, data=payload)
 
    #print(response.text)

#发起一次对话请求
def request(Messages=payload,API_KEY = "你的Key",SECRET_KEY = "你的Key"):
    url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/ernie-4.0-8k-latest?access_token=" + \
        get_access_token(API_KEY,SECRET_KEY);
    headers = {
        'Content-Type': 'application/json'
    }
    response = requests.request("POST", url, headers=headers, data=Messages)
    return response;


def get_access_token(API_KEY = "你的Key",SECRET_KEY = "你的Key"):
    url = "https://aip.baidubce.com/oauth/2.0/token"
    params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}
    return requests.post(url, params=params).json().get("access_token")

# def analysis_json(text):
    

 
if __name__ == '__main__':
    main()

三、总结

        该文章旨在分享笔者的制作过程,作为初学者目前只能做到这个地步,如各位大神有宝贵的建议和想法欢迎提出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1925371.html

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

相关文章

基于Java+SpringMvc+Vue技术的药品进销存仓库管理系统设计与实现系统(源码+LW+部署讲解)

注:每个学校每个老师对论文的格式要求不一样,故本论文只供参考,本论文页数达到60页以上,字数在6000及以上。 基于JavaSpringMvcVue技术的在线学习交流平台设计与实现 目录 第一章 绪论 1.1 研究背景 1.2 研究现状 1.3 研究内容…

数据结构和算法(0-1)----递归

定义​ 递归是一种在程序设计中常用的技术,它允许一个函数调用自身来解决问题。递归通常用于解决那些可以被分解为相似的子问题的问题,这些问题的解决方式具有自相似性。在数据结构和算法中,递归是一种重要的解决问题的方法,尤其是…

项目范围管理-系统架构师(二十九)

1、(重点)软件设计包括了四个独立又相互联系的活动,高质量的()将改善程序结构的模块划分,降低过程复杂度。 A程序设计 B数据设计 C算法设计 D过程设计 解析: 软件设计包含四个,…

Golang | Leetcode Golang题解之第232题用栈实现队列

题目: 题解: type MyQueue struct {inStack, outStack []int }func Constructor() MyQueue {return MyQueue{} }func (q *MyQueue) Push(x int) {q.inStack append(q.inStack, x) }func (q *MyQueue) in2out() {for len(q.inStack) > 0 {q.outStack…

Linux权限相关

目录 Linux中的用户 Linux权限管理 Linux的文件访问者分类 Linux的文件类型和访问权限 文件类型 文件权限 文件权限的修改 文件所有者修改 文件所有者所在组修改 目录权限 粘滞位 文件掩码 在Linux中,权限包括用户的权限和文件的权限 Linux中的用户 在…

Android 儿童绘本/汉语拼音实现

有这样一个项目&#xff0c;开发一个电子绘本&#xff0c;需要在绘本上显示&#xff0c;汉语拼音。 界面布局 <androidx.core.widget.NestedScrollViewandroid:layout_width"match_parent"android:layout_height"match_parent"android:fillViewport&quo…

路径规划 | 飞蛾扑火算法求解二维栅格路径规划(Matlab)

目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 路径规划 | 飞蛾扑火算法求解二维栅格路径规划&#xff08;Matlab&#xff09;。 飞蛾扑火算法&#xff08;Firefly Algorithm&#xff09;是一种基于自然界萤火虫行为的优化算法&#xff0c;在路径规划问题中也可以应…

C++·多态

1. 多态的概念 多态通俗讲就是多种形态&#xff0c;就是指去完成某个行为&#xff0c;当不同对象去做时会产生不同的结果或状态。 比如买火车票这个行为&#xff0c;同样是买票的行为&#xff0c;普通成年人买到全价票&#xff0c;学生买到半价票&#xff0c;军人优先买票。这个…

Qt MV架构-视图类

一、基本概念 在MV架构中&#xff0c;视图包含了模型中的数据项&#xff0c;并将它们呈现给用户。数据项的表示方法&#xff0c;可能和数据项在存储时用的数据结构完全不同。 这种内容与表现分离之所以能够实现&#xff0c;是因为使用了 QAbstractItemModel提供的一个标准模…

Go语言---TCP服务端以及客服端的实现

TCP的C/S架构 TCP服务器的实现 监听的底层实现 func Listen(network, address string) (Listener, error) {var lc ListenConfigreturn lc.Listen(context.Background(), network, address) }type Listener interface {// Accept waits for and returns the next connection …

Jenkins中Node节点与构建任务

目录 节点在 Jenkins 中的主要作用 1. 分布式构建 分布式处理 负载均衡 2. 提供不同的运行环境 多平台支持 特殊环境需求 3. 提高资源利用率 动态资源管理 云端集成 4. 提供隔离和安全性 任务隔离 权限控制 5. 提高可扩展性 横向扩展 高可用性 Jenkins 主服务…

【深度学习入门篇 ⑤ 】PyTorch网络模型创建

【&#x1f34a;易编橙&#xff1a;一个帮助编程小伙伴少走弯路的终身成长社群&#x1f34a;】 大家好&#xff0c;我是小森( &#xfe61;ˆoˆ&#xfe61; ) &#xff01; 易编橙终身成长社群创始团队嘉宾&#xff0c;橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官…

注册中心与配置中心,是分?是合?

一零年代初&#xff0c;我还自己动手写过socket连接来做服务注册发现&#xff0c;后来有了zookeeper就方便多了&#xff0c;那时候zookeeper也直接做配置中心使用。后来出现了一些专门的服务注册发现组件如Eureka\etcd\consul&#xff0c;专门的配置中心比如spring cloud confi…

2024年上半年信息系统项目管理师——综合知识真题题目及答案(第1批次)(2)

2024年上半年信息系统项目管理师 ——综合知识真题题目及答案&#xff08;第1批次&#xff09;&#xff08;2&#xff09; 第21题&#xff1a;在一个大型信息系统项目中&#xff0c;项目经理发现尽管已经建立了沟通机制&#xff0c;但团队间的沟通依然不畅&#xff0c;项目风险…

【JavaScript】解决 JavaScript 语言报错:Uncaught SyntaxError: Unexpected token

文章目录 一、背景介绍常见场景 二、报错信息解析三、常见原因分析1. 缺少必要的语法元素2. 使用了不正确的字符或符号3. JSON 格式错误4. 字符串未正确闭合 四、解决方案与预防措施1. 检查语法元素2. 正确使用符号和字符3. 修正 JSON 格式4. 字符串闭合 五、示例代码和实践建议…

C++基础语法:STL之迭代器

前言 "打牢基础,万事不愁" .C的基础语法的学习 引入 C基础:STL概述-CSDN博客 上一篇梳理了一些同STL有关的概念.同时对理解迭代器需要的类包含,内部类,链表等内容做了分析,这篇从<C Prime Plus> 6th Edition(以下称"本书")的P684,大标题16.4泛型编…

Sortable.js板块拖拽示例

图例 代码在图片后面 点赞❤️关注&#x1f64f;收藏⭐️ 页面加载后显示 拖拽效果 源代码 由于js库使用外链&#xff0c;所以会加载一会儿 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name&qu…

Pycharm 导入 conda 环境

使用时经常在此处卡壳&#xff0c;在此做个记录。 这个位置选择 conda 安装路径下的 python.exe 文件即可

书生浦语大模型实战营---Linux 基础知识

创建开发机 开建开发机首先填写开发机名称&#xff0c;选择镜像和配置资源&#xff0c;最后选择立即创建 ssh免密钥登陆 1、本地执行ssh-keygen -t rsa&#xff0c;然后一路回车就可以了 2、执行cat ~/.ssh/id_rsa.pub 3、回到开发机平台&#xff0c;在首页点击配置SSH Key…

手机数据恢复篇:如何从 Android 设备内恢复数据

如何从 Android 内部存储恢复数据&#xff1f; 要从 Android 内部存储恢复已删除的文件&#xff0c;您需要一个 Android 内部存储恢复应用或程序。请继续阅读以获取可靠的 Android 数据恢复软件&#xff0c;并让它帮助您从 Android 手机的内部存储恢复数据。 是否有可能恢复 An…