Streamlit项目:基于讯飞星火认知大模型开发Web智能对话应用

文章目录

  • 1 前言
  • 2 API获取
  • 3 官方文档的调用代码
  • 4 Streamlit 网页的搭建
    • 4.1 代码及效果展示
    • 4.2 Streamlit相关知识点
  • 5 结语

在这里插入图片描述

1 前言

科大讯飞公司于2023年8月15日发布了讯飞认知大模型V2.0,这是一款集跨领域知识和语言理解能力于一体的新一代认知智能大模型。前日,博主对讯飞认知大模型进行了详细的分析,详情请至博文《星星之火:国产讯飞星火大模型的实际使用体验(与GPT对比)》了解。

总的来说,讯飞星火认知大模型表现出卓越的整体性能,在多个领域展现出优秀水平,并且独具多模交互的能力,使其适用的领域更为广泛。特别值得关注的是其中的语义测试、常识性测试以及事件分类测试,这些测试项目揭示了讯飞认知大模型与GPT之间的差异。在常识和事件分类测试中,讯飞认知大模型展示出更出色的表现,而在语义测试中,GPT在准确识别讽刺意味方面更为优秀!

本篇博文聚焦于利用讯飞星火认知大模型的API,基于Streamlit构建个人Web智能对话应用的实践案例。

在本文中,我们将深入探讨如何利用讯飞星火认知大模型的强大功能,为个人Web应用赋予智能对话的能力。我们将介绍整个开发过程的步骤和技术细节,并分享一些关键的使用经验和优化策略。无论您是对智能对话应用开发感兴趣的开发者,还是想要了解讯飞星火认知大模型在实际应用中的表现的研究者,本文都将为您提供宝贵的参考和实践经验。

如果您对Streamlit感兴趣,并且希望深入了解更多相关知识,我强烈推荐您关注我的专栏——《最全Streamlit教程》。

在这个专栏中,我将分享一系列深入而详尽的Streamlit教程和实战案例。我们将探索Streamlit在Web应用开发中的广泛应用,从基本概念到高级功能的全方位覆盖。

通过这些教程,您将深入了解Streamlit的核心原理、工作流程和常见用法。我将解析Streamlit的各个组件和功能,并提供实用的示例代码和技巧,助您快速上手并构建出令人惊叹的交互式应用程序。

在这里插入图片描述

2 API获取

要使用讯飞星火认知大模型的功能,您需要向讯飞官方提交申请表单(官网地址)。

在这里插入图片描述

在页面上点击"API测试申请",按照指示填写并创建应用,填写正确的信息后,您只需稍等一两天,便可收到讯飞发来的短信通知。随后,您可以登录到开发者工作台,获取所需的appid、api_secret、api_key等关键信息。

3 官方文档的调用代码

为了在Python环境下使用Streamlit工具,博主下载了讯飞官方文档中的Python调用示例,以便更好地理解和应用该工具。您可以通过以下链接下载官方文档:下载链接

在解压后的文件夹中,您将找到两个Python文件:SparkApi.py和test.py。其中,SparkApi.py是讯飞官方提供的库文件,无需进行任何修改。而我们的重点将放在对test.py文件的研究和修改上。
在这里插入图片描述
在您的环境中,为了确保能够成功搭建本篇博文所介绍的项目,您至少需要安装以下必要的库:

pip install streamlit
pip install websocket-client
pip install streamlit_chat

我们来看看test.py文件中的代码:

import SparkApi
#以下密钥信息从控制台获取
appid = "XXXXXXXX"     #填写控制台中获取的 APPID 信息
api_secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"   #填写控制台中获取的 APISecret 信息
api_key ="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"    #填写控制台中获取的 APIKey 信息#用于配置大模型版本,默认“general/generalv2”
domain = "general"   # v1.5版本
# domain = "generalv2"    # v2.0版本
#云端环境的服务地址
Spark_url = "ws://spark-api.xf-yun.com/v1.1/chat"  # v1.5环境的地址
# Spark_url = "ws://spark-api.xf-yun.com/v2.1/chat"  # v2.0环境的地址text =[]# length = 0def getText(role,content):jsoncon = {}jsoncon["role"] = rolejsoncon["content"] = contenttext.append(jsoncon)return textdef getlength(text):length = 0for content in text:temp = content["content"]leng = len(temp)length += lengreturn lengthdef checklen(text):while (getlength(text) > 8000):del text[0]return textif __name__ == '__main__':text.clearwhile(1):Input = input("\n" +"我:")question = checklen(getText("user",Input))SparkApi.answer =""print("星火:",end = "")SparkApi.main(appid,api_key,api_secret,Spark_url,domain,question)getText("assistant",SparkApi.answer)# print(str(text))

在上述代码中,我们需要从控制台获取以下信息:appid、api_secret、api_key。为了确保代码顺利运行,我们需要将 domain 和 Spark_url 更改为 V2.0 版本。

此外,确保 SparkApi.py 文件与 test.py 文件在同一目录下,以便能够轻松地进行导入操作。同样,在将此功能嵌入到 Streamlit 网页项目时,也需要遵循同样的文件路径规则和导入方式。

这些信息是访问讯飞API所必需的凭证和身份验证信息。您可以在讯飞的开发者控制台中获取这些信息。确保您输入的凭证信息正确无误,这样才能够正常连接到讯飞API并获取所需的数据和结果。

以下是运行结果:

在这里插入图片描述

很好!已经成功地调用了讯飞API并获得所需的结果。现在,我们可以将这个功能嵌入到一个 Streamlit 网页中,以方便用户使用和体验。

4 Streamlit 网页的搭建

4.1 代码及效果展示

在基于官方提供的示例代码的基础上,我们成功搭建了一个使用 Streamlit 的网页。以下是完整的网页源码(注释很详细):

import streamlit as st
from streamlit_chat import messageimport SparkApi# 以下密钥信息从控制台获取
appid = "XXXXXXXX"  # 填写控制台中获取的 APPID 信息
api_secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"  # 填写控制台中获取的 APISecret 信息
api_key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"  # 填写控制台中获取的 APIKey 信息# 用于配置大模型版本,默认“general/generalv2”
# domain = "general"   # v1.5版本
domain = "generalv2"  # v2.0版本
# 云端环境的服务地址
# Spark_url = "ws://spark-api.xf-yun.com/v1.1/chat"  # v1.5环境的地址
Spark_url = "ws://spark-api.xf-yun.com/v2.1/chat"  # v2.0环境的地址text = []  # 用于存储对话内容的列表def getText(role, content):"""构造包含角色和内容的对话信息,并添加到对话列表中参数:role (str): 对话角色,可以是 "user"(用户)或 "assistant"(助手)content (str): 对话内容返回值:text (list): 更新后的对话列表"""jsoncon = {}jsoncon["role"] = rolejsoncon["content"] = contenttext.append(jsoncon)return textdef getlength(text):"""计算对话列表中所有对话内容的字符长度之和参数:text (list): 对话列表返回值:length (int): 对话内容的字符长度之和"""length = 0for content in text:temp = content["content"]leng = len(temp)length += lengreturn lengthdef checklen(text):"""检查对话列表中的对话内容字符长度是否超过限制(8000个字符)如果超过限制,删除最早的对话内容,直到满足字符长度限制参数:text (list): 对话列表返回值:text (list): 更新后满足字符长度限制的对话列表"""while getlength(text) > 8000:del text[0]return textif __name__ == '__main__':# 在 Streamlit 网页上显示欢迎文本st.markdown("#### 我是讯飞星火认知模型机器人,我可以回答您的任何问题!")# 初始化对话历史和生成的响应列表if 'generated' not in st.session_state:st.session_state['generated'] = []if 'past' not in st.session_state:st.session_state['past'] = []# 获取用户输入的问题user_input = st.text_input("请输入您的问题:", key='input')if user_input:# 构造用户输入的对话信息question = checklen(getText("user", user_input))# 调用 SparkApi 中的函数进行问题回答SparkApi.answer = ""print("星火:", end="")SparkApi.main(appid, api_key, api_secret, Spark_url, domain, question)output = getText("assistant", SparkApi.answer)# 将用户输入和生成的响应添加到对话历史和生成的响应列表中st.session_state['past'].append(user_input)st.session_state['generated'].append(str(output[1]['content']))if st.session_state['generated']:# 在网页上显示对话历史和生成的响应for i in range(len(st.session_state['generated']) - 1, -1, -1):message(st.session_state["generated"][i], key=str(i))message(st.session_state['past'][i], is_user=True, key=str(i) + '_user')

在代码中,将以下变量替换为您从讯飞开放平台获得的信息:

  • appid:替换为您的APPID。
  • api_secret:替换为您的APISecret。
  • api_key:替换为您的APIKey。

终端运行 Streamlit 应用程序:

streamlit run your_app.py

在这里插入图片描述

4.2 Streamlit相关知识点

  1. st.markdown():用于在Streamlit应用程序中显示Markdown格式的文本。
  2. st.text_input():用于在Streamlit应用程序中创建一个文本输入框,用来获取用户的输入。
  3. st.session_state:用于在Streamlit应用程序中存储和访问会话状态,可以在不同的函数之间传递数据。在这段代码中,使用st.session_state来保存和获取对话历史和生成的响应。
  4. st.session_state[‘generated’]和st.session_state[‘past’]:这些变量用于存储对话历史和生成的响应的列表。
  5. message()函数:这是一个自定义的Streamlit组件,用于显示消息。在这段代码中,使用message()函数来显示对话历史和生成的响应。

如果您对Streamlit感兴趣,并且希望深入了解更多相关知识,我强烈推荐您关注我的专栏——《最全Streamlit教程》。

5 结语

本博文介绍了如何使用Streamlit和讯飞星火认知模型机器人构建一个问答应用程序。通过集成讯飞开放平台的API和自定义的Streamlit组件,我们可以实现实时的问答功能,并在网页上显示对话历史和生成的响应。

在使用这段代码前,需要完成一些准备工作,包括在讯飞开放平台注册账号、创建应用程序并获取相关信息。然后,需要安装所需的Python库,并将提供的源代码修改为适用于自己的API密钥和地址信息。最后,运行Streamlit应用程序并在浏览器中访问生成的URL即可。

在实现问答功能的过程中,我们学习了一些与Streamlit相关的知识点,包括显示Markdown文本、创建文本输入框、存储会话状态等。这些功能使得构建交互式的Web应用程序变得简单易用。

通过本博文的介绍,您现在可以开始使用讯飞星火认知模型机器人构建自己的问答应用程序了。希望这对您有帮助,祝您在开发过程中顺利前进!

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python入门教程 | Python简介和环境搭建

Python 简介 Python是一种高级编程语言,由荷兰人Guido van Rossum于1991年创建。它以其简单易学、可读性强和丰富的生态系统而受到广泛喜爱。它被广泛应用于各个领域,包括Web开发、科学计算、数据分析、人工智能等。 Python的特点 简洁易读&#xff1a…

深度学习实战49-基于卷积神经网络和注意力机制的汽车品牌与型号分类识别的应用

大家好,我是微学AI,今天给大家介绍一下深度学习实战49-基于卷积神经网络和注意力机制的汽车品牌与型号分类识别的应用,该项目就像是一只智慧而敏锐的眼睛,专注地凝视着汽车世界。这个项目使用PyTorch作为强有力的工具,提供了一个深度学习的舞台,让我们能够设计和训练一个…

JAVA结合AE(Adobe After Effects)AE模板文件解析生成视频实现类似于逗拍(视频DIY)的核心功能

最近看抖音上有很多各种视频表白生成的直播而且直播间人很多,于是就思考如何实现的视频内的文字图片内容替换的呢 ,答案需要用到类似与逗拍一样的视频DIY的功能,苦于我是java,百度了半天没有办法和思路,总不能为了一个…

[JavaWeb]【五】web后端开发-Tomcat SpringBoot解析

目录 一 介绍Tomcat 二 基本使用 2.1 解压绿色版 2.2 启动TOMCAT 2.3 关闭TOMCAT 2.4 常见问题 2.5 修改端口号 2.6 部署应用程序 三 SpringBootWeb入门程序解析 前言:tomcat与SpringBoot解析 一 介绍Tomcat 二 基本使用 2.1 解压绿色版 2.2 启动TOMCAT 2…

国标GB28181视频平台EasyGBS通过对应密钥上传到其他平台展示的详细步骤来啦!

国标GB28181协议视频平台EasyGBS是基于国标GB28181协议的视频云服务平台,支持多路设备同时接入,并对多平台、多终端分发出RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流。平台可提供视频监控直播、云端录像、云存储、检索回放、智能告警、语音对讲、平台级…

算法通关村第5关【青铜】| Hash和队列的特征

1.Hash基础 (1)基础 哈希也称为散列,通过算法变成固定长度的输出值,存入对应的位置 例如这个算法为取模算法,indexnumber 模 7 存入1到15 (2)碰撞处理 当多个元素映射到同一位置上时就产生…

【C语言】线性搜索数组

题目 给一个数&#xff0c;判定这个数是否在数组a[]中&#xff0c;若在则输出该数在数组中的位置&#xff0c;若不在则输出-1 代码 #include<stdio.h> int search(int key, int a[], int len) {int ret -1;for(int i0; i<len; i){if(key a[i]){ret i;break;}}ret…

企业百家号蓝V认证后,百度营销基木鱼落地页如何嵌入百家号中

首先搭建百度营销基木鱼落地页 在我们的百度营销后台&#xff0c;点击基木鱼跳转至百度营销基木鱼页面&#xff0c;在我的站点位置&#xff0c;可以创建H5站点&#xff0c;PC站点等&#xff0c;创建完成后可以点击复制基木鱼落地页的链接。 注意事项 1、企业百家号需要进行…

打造全球浪漫:2023七夕节出海品牌的国际化营销创意

随着时间的流转&#xff0c;2023年的七夕节即将到来&#xff0c;这是一年一度的浪漫佳节&#xff0c;被众多情侣们期待已久。而对于出海品牌来说&#xff0c;七夕节不仅是一个传统的节日&#xff0c;更是一个极具营销价值的时刻。在这个浪漫的节日里&#xff0c;出海品牌可以借…

神经网络基础-神经网络补充概念-54-softmax回归

概念 Softmax回归&#xff08;Softmax Regression&#xff09;是一种用于多分类任务的机器学习算法&#xff0c;特别是在神经网络中常用于输出层来进行分类。它是Logistic回归在多分类问题上的推广。 原理 Softmax回归的主要思想是将原始的线性分数&#xff08;得分&#xf…

57从零开始学Java之一文详解String字符串的底层实现原理

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在之前的两篇文章中&#xff0c;壹哥给大家介绍了String字符串及其常用的API方法、常用编码、正则表达…

Redis、Memcache和MongoDB的区别

>>Memcached Memcached的优点&#xff1a; Memcached可以利用多核优势&#xff0c;单实例吞吐量极高&#xff0c;可以达到几十万QPS&#xff08;取决于key、value的字节大小以及服务器硬件性能&#xff0c;日常环境中QPS高峰大约在4-6w左右&#xff09;。适用于最大程度…

windows电脑系统自带的画图工具如何实现自由拼图

1.首先选中你要拼接的第一张图片&#xff0c;右键选着编辑&#xff0c;会自动打开自带的画图工具 然后就是打开第一张图片&#xff0c;如下图所示 接着就是将画布托大&#xff0c;如下图所示。 然后点击选择&#xff0c;选择下面的空白区域&#xff0c;选着区域的范围要比准备拼…

手把手教你在虚拟机中部署Kubernetes集群(K8S)

我们在上面&#xff1a;VM部署CentOS并且设置网络 部署好了服务器。接下来需要准备三个服务器分别为 master节点&#xff1a;master 192.168.171.7 node节点&#xff1a;node1 192.168.171.6 node节点&#xff1a;node2 192.168.171.4 此步骤需要启动三台虚拟机&#xff…

12 正则表达式 | HTTP协议相关介绍

文章目录 正则表达式re模块最基础操作&#xff08;匹配开头&#xff09;匹配单个字符匹配多个字符匹配开头结尾匹配分组对于group的理解r的作用re 模块高级用法compilesearchfindall易错点 sub直接替换函数替换 split 根据匹配进行切割字符串&#xff0c;并返回一个列表 python…

Maven之Servlet 版本问题

maven-archetype-webapp 骨架的 Servlet 版本问题 通过 maven-archetype-webapp 骨架去创建 java web 项目时&#xff0c;自动生成的 web.xml 配置文件所使用的 Servlet 的版本比较低&#xff08;2.3&#xff09;&#xff0c;而在低版本的 Servlet 中 EL 表达式默认是关闭的。…

Excel VBA 复制除指定工作表外所有的工作表的内容到一张工作表中

当我们有一张表里面有很多sheet 具有相同的表结构&#xff0c;如果需要汇总到一张表中&#xff0c;那么我们可以借助VBA 去实现汇总自动化 Sub 复制所有工作表内容()Dim ws As WorksheetDim targetSheet As WorksheetDim lastRow As Long 设置目标表格&#xff0c;即要将所有…

uniapp 企业微信侧边栏开发网页授权 注入企业权限 注入应用权限 获取userid(2)

1、网页授权&#xff0c;获取code 代码&#xff1a; oauthUrl() {const that thisuni.removeStorageSync(code)let REDIRECT_URI encodeURIComponent(window.location.href)let CORPID webConfig.appIdlet url https://open.weixin.qq.com/connect/oauth2/authorize?appi…