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

一、前言

        千帆大模型是百度提供的可以使用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()

三、总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值