用讯飞星火认知大模型构建一个带界面的聊天机器人

news2025/1/12 1:43:04

在本篇博客中,我们将使用 最新的星火认知大模型和 Tkinter 构建一个简单的聊天机器人界面。通过这个界面,用户可以与聊天机器人进行交互,并查看机器人的回答。
C:\pythoncode\blog\static_16919367030710594_SparkApi_Python\testui.py
在这里插入图片描述

准备工作

在开始之前,我们需要准备一些工作:

  • 安装 Python 和 Tkinter:确保您的计算机上已经安装了 Python,并且 Tkinter 模块可以正常工作。

  • 获取 SparkApi 的密钥信息:在控制台中获取您的 SparkApi 密钥信息,包括 APPID、APISecret 和 APIKey。这些信息将用于与 SparkApi 建立连接并获取回答。

  • 导入所需的模块:我们将使用 Tkinter 构建界面,并使用自定义的 SparkApi 模块与聊天机器人进行通信。确保已导入 tkinterSparkApi 模块。

创建界面

首先,我们需要创建一个 Tkinter 窗口和一些组件,以构建聊天机器人界面。以下是创建界面的代码:

import tkinter as tk
import SparkApi
from tkinter import messagebox

# 创建窗口
root = tk.Tk()
root.title("Chatbot")

# 创建文本框
textEdit = tk.Text(root)
textEdit.pack()

# 创建发送按钮
sendButton = tk.Button(root, text="发送", command=sendMessage)
sendButton.pack()

# 运行主循环
root.mainloop()

在上述代码中,我们创建了一个名为 root 的 Tkinter 窗口,并设置窗口的标题为 “Chatbot”。然后,我们创建了一个文本框 textEdit 和一个发送按钮 sendButton。最后,使用 root.mainloop() 运行 Tkinter 的主循环,使窗口保持显示状态。

处理用户输入和获取回答

接下来,我们需要编写函数来处理用户的输入并获取聊天机器人的回答。以下是处理函数的代码:

def sendMessage():
    # 获取用户输入的文本
    inputText = textEdit.get("1.0", tk.END).strip()

    # 将用户输入的文本发送给 SparkApi,并获取回答
    answer = SparkApi.getAnswer(inputText)

    # 将回答显示在文本框中
    textEdit.insert(tk.END, answer)

在上述代码中,我们定义了一个名为 sendMessage() 的函数,该函数将作为发送按钮的回调函数。在函数内部,我们首先通过 textEdit.get("1.0", tk.END) 获取用户在文本框中输入的文本内容,并去除首尾的空白字符。然后,我们将用户的输入发送给 SparkApi,并获取聊天机器人的回答。最后,我们使用 textEdit.insert(tk.END, answer) 将回答显示在文本框中。

运行程序

完成了界面和处理函数的编写后,我们可以运行程序了。确保您已经将 SparkApi 的密钥信息配置正确,并且您的计算机上已经安装了所需的依赖。运行程序后,您将看到一个简单的聊天机器人界面,您可以在文本框中输入问题,并点击发送按钮,聊天机器人将会给出回答,并显示在文本框中。

全部代码

import tkinter as tk
import SparkApi
from tkinter import messagebox

def showMessage(message, title):
    messagebox.showinfo(title, message)

#以下密钥信息从控制台获取
appid = ""     #填写控制台中获取的 APPID 信息
api_secret = ""   #填写控制台中获取的 APISecret 信息
api_key =""    #填写控制台中获取的 APIKey 信息

#用于配置大模型版本,默认“general/generalv2”
domain = "general"   # v1.5版本

#云端环境的服务地址
Spark_url = "ws://spark-api.xf-yun.com/v1.1/chat"  # v1.5环境的地址
text =[]

# length = 0

def getText(role,content):
    jsoncon = {}
    jsoncon["role"] = role
    jsoncon["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

def sendMessage():
    Input = textEdit.get("1.0", tk.END).strip()
    print(Input)
    question = checklen(getText("user",Input))
    print(question)
    SparkApi.answer =""
    print("星火:",end = "")
    SparkApi.main(appid,api_key,api_secret,Spark_url,domain,question)
    answer = getText("assistant",SparkApi.answer)
    answer_str = " ".join(answer)
    showMessage("Answer: " + answer_str, title="Answer")
    text.clear()
root = tk.Tk()
root.title("Chatbot")
textEdit = tk.Text(root)
textEdit.pack()
sendButton = tk.Button(root, text="发送", command=sendMessage)
sendButton.pack()
root.mainloop()

总结

本篇博客中,我们使用 Python 和 Tkinter 构建了一个简单的聊天机器人界面。通过这个界面,用户可以与聊天机器人进行交互,并查看机器人的回答。通过这个简单的界面,我们可以将聊天机器人集成到各种应用中,提供智能化的对话功能。希望本篇博客对您有所帮助,谢谢阅读!

参考样例:https://www.xfyun.cn/doc/spark/Web.html#_2-%E8%B0%83%E7%94%A8%E7%A4%BA%E4%BE%8B

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

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

相关文章

Kubernetes二进制部署方案

目录 一、环境准备 2.1、主机配置 2.2、安装 Docker 2.3、生成通信加密证书 2.3.1、生成 CA 证书(所有主机操作) 2.3.2、生成 Server 证书(所有主机) 2.3.3、生成 admin 证书(所有主机) 2.3.4、生成 proxy 证书 三、部署 …

Java多态详解(1)

多态 多态的概念 所谓多态,通俗地讲,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。 比如: 这一时间爆火的“现代纪录片”中,麦克阿瑟总是对各种“名人”有不同的评价&…

Linux常用命令——dircolors命令

在线Linux命令查询工具 dircolors 置ls命令在显示目录或文件时所用的色彩 补充说明 dircolors命令设置ls命令在显示目录或文件时所用的色彩。dircolors可根据[色彩配置文件]来设置LS_COLORS环境变量或是显示设置LS_COLORS环境变量的命令。 语法 dircolors(选项)(参数)选项…

如何区分闰年与平年

首先要明白 地球绕太阳运行周期为365天5小时48分46秒(合365.24219天),即一回归年(tropical year)。公历的平年只有365日,比回归年短约0.2422 日,每四年累积约一天,把这一天加于2月末…

指令:指令执行过程、指令寻址、指令组成、数据寻址、补充(扩展操作码指令格式)

计算机的工作过程是执行程序的过程,程序是一系列按一定顺序执行的指令。 指令是指挥机器执行某种操作的命令,是计算机运行的最小功能单元(一组二进制代码)。 指令系统:计算机中所有指令的集合,也称指令集…

idea安装插件JRebel

一、安装插件 二、下载代理服务并启动 首先下载服务,网址 Releases ilanyu/ReverseProxy (kgithub.com) 下载后直接双击运行,杀毒软件可以会报警告,直接忽略就行 启动好,等着就行,接下来会用到。 三、在线获取GUID …

通讯协议044——全网独有的OPC HDA知识一之聚合(十二)持续坏值时间

本文简单介绍OPC HDA规范的基本概念,更多通信资源请登录网信智汇(wangxinzhihui.com)。 本节旨在详细说明HDA聚合的要求和性能。其目的是使HDA聚合标准化,以便HDA客户端能够可靠地预测聚合计算的结果并理解其含义。如果用户需要聚合中的自定义功能&…

Python绘图系统6:自定义坐标列表控件

文章目录 自定义坐标列表控件显示和隐藏加载按钮坐标设置控件的显示和隐藏源代码 Python绘图系统: 基础:将matplotlib嵌入到tkinter 📈简单的绘图系统 📈数据导入📈三维绘图系统自定义控件:坐标设置控件&a…

Threejs学习04——球缓冲几何体环境光以及直线光源

实现随机多个三角形随机位置随机颜色展示效果 这是一个非常简单基础的threejs的学习应用!本节主要学习的是球面缓冲几何体在环境光合直线光源下的效果,可以学习到环境光和直线光源的生成效果等功能!主要使用的是球缓冲几何体对象SphereGeome…

综合能源系统(8)——综合能源系统支撑技术

1、大数据技术 1.1、大数据技术概述 大数据是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。 维克托迈尔舍恩伯格和肯尼斯克耶编写…

【面试八股文】每日一题:谈谈你对IO的理解

谈谈你对IO的理解 每日一题-Java核心-谈谈你对对IO的理解【面试八股文】 1.Java基础知识 Java IO(Input/Output)是Java编程语言中用于处理输入和输出的一组类和接口。它提供了一种在Java程序中读取和写入数据的方法。 Java IO包括两个主要的部分&#x…

从零开始学习 Java:简单易懂的入门指南之Objects、BigInteger、BigDecimal(十四)

常用API,Objects、BigInteger、BigDecimal 5 Objects类5.1 概述5.2 常见方法 6 BigInteger类6.1 引入6.2 概述6.3 常见方法6.4 底层存储方式: 7 BigDecimal类7.1 引入7.2 概述7.3 常见方法7.4 底层存储方式: 5 Objects类 5.1 概述 tips&…

optee中如何开启或关闭所有中断的

我们知道在Linux Kernel中开启或关闭中断的函数是:local_irq_enable()和local_irq_disable(), 那么在optee os中是怎样做到的呢? optee中通过使用thread_mask_exceptions()和thread_unmask_exceptions()来开启或关闭中断。 thread_mask_exceptions()和thread_unmask_excepti…

C语言:选择+编程(每日一练)

目录 选择题: 题一: 题二: 题三: 题四: 题五: 编程题: 题一:尼科彻斯定理 示例1 题二:等差数列 示例2 本人实力有限可能对一些地方解释和理解的不够清晰&…

【C++深入浅出】初识C++中篇(引用、内联函数)

目录 一. 前言 二. 引用 2.1 引用的概念 2.2 引用的使用 2.3 引用的特性 2.4 常引用 2.5 引用的使用场景 2.6 传值、传引用效率比较 2.7 引用和指针的区别 三. 内联函数 3.1 内联函数的概念 3.2 内联函数的特性 一. 前言 上期说道,C是在C的基础之上&…

Linux Kernel的local_irq_enable()和local_irq_disable()函数

代码如下图所示,最终操作的是msr daifset, #3 和 msr daifclr, #3 寄存器。 (include/linux/irqflags.h) #define local_irq_enable() do { raw_local_irq_enable(); } while (0) #define local_irq_disable() do { raw_local_irq_disable(); } while (0)#define ra…

历数浙大MPA提前批面试的三大变化

从2019年招生开始,浙大mpa项目的招生趋势一直处于稳增状态,特别是提前批面试政策的出现,更加为项目的整体招录添上神奇的一笔。为什么要举行提面?一方面报考的人数比较多,有了选拔的余地和基础;另一方面也能…

Python学习笔记_进阶篇(一)_浅析tornado web框架

tornado简介 1、tornado概述 Tornado就是我们在 FriendFeed 的 Web 服务器及其常用工具的开源版本。Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于…

【办公自动化】使用Python批量生成PPT版荣誉证书

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

LeetCode--HOT100题(33)

目录 题目描述:148. 排序链表(中等)题目接口解题思路代码 PS: 题目描述:148. 排序链表(中等) 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 LeetCode做题链接&#xff1…