如何快速搭建一个大模型?简单的UI实现

这篇具有很好参考价值的文章主要介绍了如何快速搭建一个大模型?简单的UI实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

如何快速搭建一个大模型?简单的UI实现,项目开发,星火大模型,对话框UI设计

🔥博客主页:是dream

🚀系列专栏:深度学习环境搭建、环境配置问题解决、自然语言处理、语音信号处理、项目开发

💘每日语录:相信自己,一路风景一路歌,人生之美,正在于此。

🎉感谢大家点赞👍收藏⭐指正✍️

如何快速搭建一个大模型?简单的UI实现,项目开发,星火大模型,对话框UI设计

前言:本文章纯属是自己无聊,调用了星火认知大模型的接口,并封装成一个脚本。但测试感觉星火认知大模型也不算太智能,但奈何人家提供了免费的token,当然,也可以根据自己的需要,去调用国内的一些大模型。

目录

一、申请免费的token

二、设置UI界面        

三、运行效果

四、封装成exe文件        


一、申请免费的token

        这里我使用的是星火认知大模型,前往官网:星火认知大模型

        网上有很多的教程,这里不再赘述。

        申请后,你需要保存的有三个

        ① appid

        ② api_secret        

        ③ api_key

二、设置UI界面        

        需要用到wxpython:GUI图形库,网上有很多安装wxpython的教程,这里不再赘述。

        wxpython依赖的whl文件(网上下载很慢,cp36对应python3.6):下载地址

如何快速搭建一个大模型?简单的UI实现,项目开发,星火大模型,对话框UI设计

        这里我直接把UI界面的代码附上。

        需要更改① appid ②api_secret  ③ api_key

import tkinter as tk
from tkinter import scrolledtext, filedialog, messagebox
import SparkApi

class ChatApp:
    def __init__(self, master):
        self.master = master
        master.title("是dream-星火大模型UI界面")

        self.dialog_text = scrolledtext.ScrolledText(
            self.master, wrap=tk.WORD, width=50, height=20, font=("Microsoft YaHei UI", 12)
        )
        self.dialog_text.grid(row=0, column=0, padx=10, pady=10, sticky="nsew")
        self.dialog_text.grid_propagate(False)  # 阻止自动调整大小

        self.label_input = tk.Label(self.master, text="请您在下方输入:", font=("Microsoft YaHei UI", 12))
        self.label_input.grid(row=1, column=0, padx=3, pady=3, sticky="w")

        input_frame = tk.Frame(master)
        input_frame.grid(row=2, column=0, pady=10, sticky="nsew")
        input_frame.grid_columnconfigure(0, weight=3)

        self.input_entry = tk.Entry(
            input_frame, bd=2, relief=tk.GROOVE, font=("Microsoft YaHei UI", 12),
            borderwidth=4, highlightthickness=1, width=20
        )
        self.input_entry.grid(row=0, column=0, padx=10, pady=10, sticky="nsew")
        self.input_entry.grid_propagate(False)  # 阻止自动调整大小
        self.input_entry.bind("<Return>", self.send_on_enter)

        button_frame = tk.Frame(master)
        button_frame.grid(row=3, column=0, pady=10, sticky="nsew")

        self.send_button = tk.Button(button_frame, text="发送", command=self.send_message,
                                     font=("Microsoft YaHei UI", 12))
        self.send_button.grid(row=0, column=0, padx=5, sticky="nsew")

        self.file_button = tk.Button(button_frame, text="选择文本", command=self.load_file,
                                     font=("Microsoft YaHei UI", 12))
        self.file_button.grid(row=0, column=1, padx=5, sticky="nsew")

        self.save_button = tk.Button(
            button_frame, text="保存对话内容", command=self.save_to_text, font=("Microsoft YaHei UI", 12)
        )
        self.save_button.grid(row=0, column=2, padx=5, sticky="nsew")

        button_frame.grid_columnconfigure(0, weight=1)
        button_frame.grid_columnconfigure(1, weight=1)
        button_frame.grid_columnconfigure(2, weight=1)

        master.grid_rowconfigure(0, weight=1)
        master.grid_rowconfigure(1, weight=0)
        master.grid_rowconfigure(3, weight=1)
        master.grid_columnconfigure(0, weight=1)

        initial_text = "提前告诉星火大模型的内容,让其更关注你问的方向。"
        # sparkAPI(initial_text)   # 如果要提前送内容给模型,请取消注释
        self.dialog_text.insert(tk.END,
                                "你好!作者:“是dream”!CSDN主页:https://blog.csdn.net/qq_63159704?spm=1000.2115.3001.5343\n\n")

    def send_on_enter(self, event):
        self.send_message()

    def send_message(self):
        user_input = self.input_entry.get()
        if user_input.strip():
            assistant_response = sparkAPI(user_input)
            self.dialog_text.insert(tk.END, f"你: {user_input}\n")
            self.dialog_text.insert(tk.END, f"星火: {assistant_response}\n")
            self.input_entry.delete(0, tk.END)
            self.dialog_text.see(tk.END)
        else:
            messagebox.showinfo("提示", "请输入消息!")

    def load_file(self):
        file_path = filedialog.askopenfilename(filetypes=[("Text files", "*.txt"), ("All files", "*.*")])
        if file_path:
            with open(file_path, 'r', encoding='utf-8') as file:
                content = file.read()
                self.input_entry.insert(tk.END, content)

    def save_to_text(self):
        content = self.dialog_text.get("1.0", tk.END)
        file_path = filedialog.asksaveasfilename(
            defaultextension=".txt", filetypes=[("Text files", "*.txt"), ("All files", "*.*")]
        )
        if file_path:
            with open(file_path, 'w', encoding='utf-8') as file:
                file.write(content)
            messagebox.showinfo("保存成功", "对话内容已保存为文本文件!")


def sparkAPI(input_text):
    text.clear()
    questions = checklen(getText("user", input_text))
    SparkApi.answer = ""
    SparkApi.main(appid, api_key, api_secret, Spark_url, domain, questions)
    assistant_answer = SparkApi.answer
    text.append({"role": "assistant", "content": assistant_answer})
    return assistant_answer


def getText(role, content):
    jsoncon = {"role": role, "content": content}
    text.append(jsoncon)
    return text


def getlength(text):
    length = 0
    for content in text:
        temp = content["content"]
        leng = len(temp)
        length += leng
    return length


def checklen(text):
    while getlength(text) > 8000:
        del text[0]
    return text


if __name__ == "__main__":
    appid = ""
    api_secret = ""
    api_key = ""
    domain = "generalv2"
    Spark_url = "ws://spark-api.xf-yun.com/v2.1/chat"

    text = []

    root = tk.Tk()
    root.geometry("800x750")
    chat_app = ChatApp(root)
    root.mainloop()

        还需要在相同目录下创建一个 SparkApi.py文件,并将下面的代码复制进去。

import _thread as thread
import base64
import datetime
import hashlib
import hmac
import json
from urllib.parse import urlparse
import ssl
from datetime import datetime
from time import mktime
from urllib.parse import urlencode
from wsgiref.handlers import format_date_time

import websocket  # 使用websocket_client

answer = ""


class Ws_Param(object):
    # 初始化
    def __init__(self, APPID, APIKey, APISecret, Spark_url):
        self.APPID = APPID
        self.APIKey = APIKey
        self.APISecret = APISecret
        self.host = urlparse(Spark_url).netloc
        self.path = urlparse(Spark_url).path
        self.Spark_url = Spark_url

    # 生成url
    def create_url(self):
        # 生成RFC1123格式的时间戳
        now = datetime.now()
        date = format_date_time(mktime(now.timetuple()))

        # 拼接字符串
        signature_origin = "host: " + self.host + "\n"
        signature_origin += "date: " + date + "\n"
        signature_origin += "GET " + self.path + " HTTP/1.1"

        # 进行hmac-sha256进行加密
        signature_sha = hmac.new(self.APISecret.encode('utf-8'), signature_origin.encode('utf-8'),
                                 digestmod=hashlib.sha256).digest()

        signature_sha_base64 = base64.b64encode(signature_sha).decode(encoding='utf-8')

        authorization_origin = f'api_key="{self.APIKey}", algorithm="hmac-sha256", headers="host date request-line", signature="{signature_sha_base64}"'

        authorization = base64.b64encode(authorization_origin.encode('utf-8')).decode(encoding='utf-8')

        # 将请求的鉴权参数组合为字典
        v = {
            "authorization": authorization,
            "date": date,
            "host": self.host
        }
        # 拼接鉴权参数,生成url
        url = self.Spark_url + '?' + urlencode(v)
        # 此处打印出建立连接时候的url,参考本demo的时候可取消上方打印的注释,比对相同参数时生成的url与自己代码生成的url是否一致
        return url


# 收到websocket错误的处理
def on_error(ws, error):
    print("### error:", error)


# 收到websocket关闭的处理
def on_close(ws, one, two):
    print(" ")


# 收到websocket连接建立的处理
def on_open(ws):
    thread.start_new_thread(run, (ws,))


def run(ws, *args):
    data = json.dumps(gen_params(appid=ws.appid, domain=ws.domain, question=ws.question))
    ws.send(data)


# 收到websocket消息的处理
def on_message(ws, message):
    # print(message)
    data = json.loads(message)
    code = data['header']['code']
    if code != 0:
        print(f'请求错误: {code}, {data}')
        ws.close()
    else:
        choices = data["payload"]["choices"]
        status = choices["status"]
        content = choices["text"][0]["content"]
        print(content, end="")
        global answer
        answer += content
        # print(1)
        if status == 2:
            ws.close()


def gen_params(appid, domain, question):
    """
    通过appid和用户的提问来生成请参数
    """
    data = {
        "header": {
            "app_id": appid,
            "uid": "1234"
        },
        "parameter": {
            "chat": {
                "domain": domain,
                "temperature": 0.5,
                "max_tokens": 2048
            }
        },
        "payload": {
            "message": {
                "text": question
            }
        }
    }
    return data


def main(appid, api_key, api_secret, Spark_url, domain, question):
    # print("星火:")
    wsParam = Ws_Param(appid, api_key, api_secret, Spark_url)
    websocket.enableTrace(False)
    wsUrl = wsParam.create_url()
    ws = websocket.WebSocketApp(wsUrl, on_message=on_message, on_error=on_error, on_close=on_close, on_open=on_open)
    ws.appid = appid
    ws.question = question
    ws.domain = domain
    ws.run_forever(sslopt={"cert_reqs": ssl.CERT_NONE})

注意:调用星火大模型用到的是 websocket == 0.57.0,如果websocket的错,请更改版本。

三、运行效果

 效果如下:

如何快速搭建一个大模型?简单的UI实现,项目开发,星火大模型,对话框UI设计

四、封装成exe文件        

        这里用到的是pyinstaller进行封装,运行以下代码进行安装:

pip install pyinstaller

        运行下代码进行封装:

pyinstaller -F -w GUI.py
在`GUI.py`相同目录下会新增`dist`文件夹,内部放有`GUI.exe`文件。 GUI.py就是UI界面的代码,封装前,请保证代码能够正常运行。

这样,你就可以将这个exe文件发送给你的好盆友,无需配置环境就可以对话。

如何快速搭建一个大模型?简单的UI实现,项目开发,星火大模型,对话框UI设计

 如何快速搭建一个大模型?简单的UI实现,项目开发,星火大模型,对话框UI设计

 🚀🚀🚀感谢关注我的CSDN博客,更多小技巧,请持续关注!文章来源地址https://www.toymoban.com/news/detail-751424.html

到了这里,关于如何快速搭建一个大模型?简单的UI实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何搭建一个简单的springCloudAlibaba项目,并实现基本的使用

    微服务是一种软件架构风格,它将一个大型应用程序拆分成一组更小、独立的服务,每个服务都可以独立开发、部署和扩展。每个服务都有自己的业务逻辑和数据库,并且通过轻量级通信机制(如RESTful API)来相互通信。 微服务架构的优点包括 可扩展性:由于每个服务都是独

    2024年01月21日
    浏览(32)
  • 快速搭建一个简单的SpringBoot项目-详细步骤

    前言 本文章仅供大家参考,如果对大家有起到帮助的话可以点赞支持一下~ 主要发布是为了本人以后能方便的搭建一个SpringBoot项目的框架!!! 源码路径在文章最下方! 1.选择Spring Initializr 2.点击下一步 3.修改jdk的版本,再点击下一步 注意! 4.选中Spring Web,再下一步 5.给项目

    2024年02月10日
    浏览(27)
  • Vue项目实战——【基于 Vue3.x + Vant UI】实现一个多功能记账本(开发导航栏及公共部分)

    系列内容 参考链接 基于 Vue3.x + Vant UI 的多功能记账本(一) 项目演示,涉及知识点 基于 Vue3.x + Vant UI 的多功能记账本(二) 搭建开发环境 Vue3 + Vant UI_多功能记账本 1、底部导航栏 components 文件夹下,创建 NavBar.vue 组件 NavBar.vue 详细内容请看代码和注释 van-tabbar-item 为标签栏

    2024年02月02日
    浏览(33)
  • 如何快速搭建一个SpringBoot项目

    前面我们了解了SpringBoot背景和特点,本节我们主要介绍如何快速构建一个SpringBoot项目,以此来提升日常开发效率。 SpringBoot是搭建应用的手脚架,由Spring公司的核心团队在2013年开始研发、2014年4月发布第一个版本的全新开源的轻量级框架。它基于Spring4.0设计,不仅继承了Sp

    2024年02月02日
    浏览(30)
  • 如何快速搭建一个小程序积分商城

    随着移动互联网的迅猛发展,小程序已成为企业进行私域营销的有力工具之一。而在私域营销中,积分商城作为一种有效的激励方式,能够吸引用户参与、提升用户粘性。本文将为您介绍如何快速搭建一个小程序积分商城,助您在私域营销中取得成功。 1. 确定积分商城目标和

    2024年02月12日
    浏览(28)
  • 若依框架快速开发项目(不涉及底层逻辑,只是简单使用)

    初衷: 若依框架使用及其普遍,是一个非常优秀的开源框架,框架本身的权限系统,字典设置以及相关封装,安全拦截相当完善,本人受益匪浅,学学到了许多,在这里,先向原创作者致敬! 本人刚刚接触这个框架的时候,很迷茫,几乎没有入手的地方,不知道怎么去开始

    2024年02月03日
    浏览(69)
  • 【React】如何简单快速地修改antd组件UI内部样式如字体颜色

    最近刚开始学习react 在写一个登录的页面 发现组件的颜色不太合适,默认是黑色字体 那我想修改成白色字体以适应我的页面 运用多种css文件打包策略太过复杂 对我这种小白不友好 两行代码搞定 实现需求 通过:global加上!important 在Umi项目中,在global.less文件夹下面,通过roo

    2024年02月13日
    浏览(34)
  • 如何快速用node在本地搭建一个服务器

    众所周知, 服务器是通过安装特殊的软件(或者运行特殊的代码)来提供网络服务的机器 。那么我们的电脑可不可以弄成一个服务器,来供他人访问呢? 答案是可以的,这里我们需要安装一下 node.js 这个软件。传送门:Node.js 中文网 下载好后按住Win + R 运行cmd小黑窗,输入

    2024年02月04日
    浏览(33)
  • 「Vue|网页开发|前端开发」01 快速入门:用vue-cli快速写一个Vue的HelloWorld项目

    本文主要介绍如何用vue开发的标准化工具vue-cli快速搭建一个符合实际业务项目结构的hello world网页项目并理解vue的代码文件结构以及页面渲染流程。 Windows 系统的 node.js 安装十分简易,没有环境安装经验的伙伴可以参考文章:Windows系统下安装node.js 我们需要先创建一个用于放

    2024年02月12日
    浏览(37)
  • 如何简单快速搭建自己的云对象存储服务(OSS)

    简单来说,其实我们只需要有一台服务器,利用服务器的各种资源,搭配其它厂商开发的软件,就能很轻易拥有自己的云对象存储服务。不需要在阿里云上花钱买什么服务,甚至还能自己给别人提供服务,真的是太爽了。 我们所熟知的云对象存储服务,接触最多的肯定是阿里

    2024年02月02日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包