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 = 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
    


if __name__ == '__main__':
    text.clear
    while(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 message

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 = []  # 用于存储对话内容的列表

def getText(role, content):
    """
    构造包含角色和内容的对话信息,并添加到对话列表中
    
    参数:
    role (str): 对话角色,可以是 "user"(用户)或 "assistant"(助手)
    content (str): 对话内容
    
    返回值:
    text (list): 更新后的对话列表
    """
    jsoncon = {}
    jsoncon["role"] = role
    jsoncon["content"] = content
    text.append(jsoncon)
    return text

def getlength(text):
    """
    计算对话列表中所有对话内容的字符长度之和
    
    参数:
    text (list): 对话列表
    
    返回值:
    length (int): 对话内容的字符长度之和
    """
    length = 0
    for content in text:
        temp = content["content"]
        leng = len(temp)
        length += leng
    return length

def checklen(text):
    """
    检查对话列表中的对话内容字符长度是否超过限制(8000个字符)
    如果超过限制,删除最早的对话内容,直到满足字符长度限制
    
    参数:
    text (list): 对话列表
    
    返回值:
    text (list): 更新后满足字符长度限制的对话列表
    """
    while getlength(text) > 8000:
        del text[0]
    return text

if __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应用程序变得简单易用。

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity 之 变量修饰符public 与private 以及默认

文章目录 publicprivate默认情况的成员变量 public 当在Unity中使用public修饰符时,它将变量声明为公共变量,这意味着该变量可以在Unity编辑器中进行设置,并且可以从其他脚本中访问和修改。公共变量在Unity中广泛用于在脚本之间共享数据&…

快速排序 | C++|时间空间复杂度

1.概念 快速排序(QuickSort)的基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的。 2.算法思想描述 1.进行一次划分&…

框架分析(1)-IT人必须会

框架分析(1)-IT人必须会 专栏介绍当今主流框架前端框架后端框架移动应用框架数据库框架测试框架 Angular关键特点和功能:组件化架构双向数据绑定依赖注入路由功能强大的模板语法测试友好 优缺点分析优点缺点 总结 专栏介绍 link 主要对目前市…

用例图的基本概念及其使用方式(包含案例)

一、引言 用例(Use Case),是软件工程或系统工程中对系统如何反应外界请求的描述,是一种通过用户的使用场景来获取需求的技术。此概念“用例”的提出者为Ivar Jacobson。每个用例提供了一个或多个场景,该场景说明了系统是如何和最终用户或其它…

Android Studio实现读取本地相册文件并展示

目录 原文链接效果 代码activity_main.xmlMainActivity 原文链接 效果 代码 activity_main.xml 需要有一个按钮和image来展示图片 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk…

亚信科技AntDB数据库连年入选《中国DBMS市场指南》代表厂商

近日&#xff0c;全球权威ICT研究与顾问咨询公司Gartner发布了2023年《Market Guide for DBMS, China》&#xff08;即“中国DBMS市场指南”&#xff09;&#xff0c;该指南从市场份额、技术创新、研发投入等维度对DBMS供应商进行了调研。亚信科技是领先的数智化全栈能力提供商…

Nginx的介绍

本资料转载于传智教育-解锁你的IT职业薪未来&#xff0c;仅用于学习和讨论&#xff0c;如有侵权请联系 视频地址&#xff1a;04-Nginx的优点_哔哩哔哩_bilibili 资源文档&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1RlFl92FdxRUqc858JSxPSQ 提取码&#xff1a;12…

极智嘉x吉利汽车 x京东物流,引领汽车行业智慧物流新变革!

近日&#xff0c;中国领先的汽车制造商吉利汽车携手中国领先的技术驱动的供应链解决方案及物流服务商京东物流、全球仓储机器人引领者极智嘉(Geek)&#xff0c;在西安吉利汽车制造基地RDC仓库率先落地SkyPick上存下拣解决方案&#xff0c;实现了全物流链精益化、智能化、一体化…

热电联产在综合能源系统中的选址定容研究(matlab代码)

目录 1 主要内容 目标函数 程序模型 2 部分代码 3 程序结果 1 主要内容 该程序参考《热电联产在区域综合能源系统中的定容选址研究》&#xff0c;主要针对电热综合能源系统进行优化&#xff0c;确定热电联产机组的位置和容量&#xff0c;程序以33节点电网和17节点热网为例…

70 # 协商缓存的配置:通过修改时间

对比&#xff08;协商&#xff09;缓存 比较一下再去决定是用缓存还是重新获取数据&#xff0c;这样会减少网络请求&#xff0c;提高性能。 对比缓存的工作原理 客户端第一次请求服务器的时候&#xff0c;服务器会把数据进行缓存&#xff0c;同时会生成一个缓存标识符&#…

传统车间VS数字化车间,以MES为核心打造智能工厂!

传统车间的生产制造场景往往存在着信息沟通不顺畅&#xff0c;传达不到位的情况&#xff0c;导致生产效率受影响。 其次车间数据的“缓存期”偏短&#xff0c;无法进行长时间的复盘总结&#xff0c;从而难以发现企业管理问题&#xff0c;无法持续改善。 随着大数据、工业互联…

【大虾送书第六期】搞懂大模型的智能基因,RLHF系统设计关键问答

目录 ✨1、RLHF是什么&#xff1f; ✨2、RLHF适用于哪些任务&#xff1f; ✨3、RLHF和其他构建奖励模型的方法相比有何优劣&#xff1f; ✨4、什么样的人类反馈才是好的反馈 ✨5、RLHF算法有哪些类别&#xff0c;各有什么优缺点&#xff1f; ✨6、RLHF采用人类反馈会带来哪些局…

【UniApp开发小程序】商品详情展示+评论、评论展示、评论点赞+商品收藏【后端基于若依管理系统开发】

文章目录 界面效果界面实现工具js页面日期格式化 后端收藏ControllerServicemapper 评论ControllerServiceMapper 商品Controller 阅读Service 界面效果 【说明】 界面中商品的图片来源于闲鱼&#xff0c;若侵权请联系删除 【商品详情】 【评论】 界面实现 工具js 该工…

【虫洞攻击检测】使用多层神经网络的移动自组织网络中的虫洞攻击检测研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Web网页浏览器远程访问jupyter notebook服务器【内网穿透】

文章目录 前言1. Python环境安装2. Jupyter 安装3. 启动Jupyter Notebook4. 远程访问4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5. 固定公网地址 前言 Jupyter Notebook&#xff0c;它是一个交互式的数据科学和计算环境&#xff0c;支持多种编程语言&#xff0c;如…

zotero在不同系统的安装(win/linux)

1 window系统安装 zotero 官网&#xff1a; https://www.zotero.org/ 官方文档 &#xff1a;https://www.zotero.org/support/ (官方)推荐常用的插件: https://www.zotero.org/support/plugins 入门视频推荐&#xff1a; Zotero 文献管理与知识整理最佳实践 点击 exe文件自…

安全学习DAY17_信息打点-语言框架组件识别

信息打点-WEB打点-语言框架&开发组件 文章目录 信息打点-WEB打点-语言框架&开发组件本节涉及链接&工具本节知识&思维导图基础概念介绍框架&#xff1a;组件&#xff1a;Web架构 对应Web测试手法后端&#xff1a;前端组件&#xff1a;java居多&#xff0c;框架&…

物联网在制造业中的应用

制造业目前正在经历第四次工业革命&#xff0c;物联网、人工智能和机器人等技术进步正在推动行业的发展。研究表明&#xff0c;到2024年&#xff0c;全球制造商将在物联网解决方案上投资700亿美元&#xff0c;许多制造商正在实施物联网设备&#xff0c;以利用预测性维护和复杂的…

LeetCode450. 删除二叉搜索树中的节点

450. 删除二叉搜索树中的节点 文章目录 [450. 删除二叉搜索树中的节点](https://leetcode.cn/problems/delete-node-in-a-bst/)一、题目二、题解方法一&#xff1a;递归&#xff08;一种麻烦的方法&#xff09;方法二&#xff1a;优化后的递归 一、题目 给定一个二叉搜索树的根…

系统架构设计专业技能 · 信息安全技术

系列文章目录 系统架构设计专业技能 网络技术&#xff08;三&#xff09; 系统架构设计专业技能 系统安全分析与设计&#xff08;四&#xff09;【系统架构设计师】 系统架构设计高级技能 软件架构设计&#xff08;一&#xff09;【系统架构设计师】 系统架构设计高级技能 …