ToB企服应用市场:ToB评测及商务社交产业平台

标题: Streamlit项目:基于讯飞星火认知大模型开辟Web智能对话应用 [打印本页]

作者: 一给    时间: 2024-6-22 12:51
标题: Streamlit项目:基于讯飞星火认知大模型开辟Web智能对话应用

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文件的研究和修改上。

在您的环境中,为了确保可以或许乐成搭建本篇博文所介绍的项目,您至少需要安装以下须要的库:
  1. pip install streamlit
  2. pip install websocket-client
  3. pip install streamlit_chat
复制代码
我们来看看test.py文件中的代码:
  1. import SparkApi
  2. #以下密钥信息从控制台获取
  3. appid = "XXXXXXXX"     #填写控制台中获取的 APPID 信息
  4. api_secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"   #填写控制台中获取的 APISecret 信息
  5. api_key ="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"    #填写控制台中获取的 APIKey 信息
  6. #用于配置大模型版本,默认“general/generalv2”
  7. domain = "general"   # v1.5版本
  8. # domain = "generalv2"    # v2.0版本
  9. #云端环境的服务地址
  10. Spark_url = "ws://spark-api.xf-yun.com/v1.1/chat"  # v1.5环境的地址
  11. # Spark_url = "ws://spark-api.xf-yun.com/v2.1/chat"  # v2.0环境的地址
  12. text =[]
  13. # length = 0
  14. def getText(role,content):
  15.     jsoncon = {}
  16.     jsoncon["role"] = role
  17.     jsoncon["content"] = content
  18.     text.append(jsoncon)
  19.     return text
  20. def getlength(text):
  21.     length = 0
  22.     for content in text:
  23.         temp = content["content"]
  24.         leng = len(temp)
  25.         length += leng
  26.     return length
  27. def checklen(text):
  28.     while (getlength(text) > 8000):
  29.         del text[0]
  30.     return text
  31.    
  32. if __name__ == '__main__':
  33.     text.clear
  34.     while(1):
  35.         Input = input("\n" +"我:")
  36.         question = checklen(getText("user",Input))
  37.         SparkApi.answer =""
  38.         print("星火:",end = "")
  39.         SparkApi.main(appid,api_key,api_secret,Spark_url,domain,question)
  40.         getText("assistant",SparkApi.answer)
  41.         # 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 的网页。以下是完备的网页源码(注释很具体):
  1. import streamlit as st
  2. from streamlit_chat import message
  3. import SparkApi
  4. # 以下密钥信息从控制台获取
  5. appid = "XXXXXXXX"  # 填写控制台中获取的 APPID 信息
  6. api_secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"  # 填写控制台中获取的 APISecret 信息
  7. api_key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"  # 填写控制台中获取的 APIKey 信息
  8. # 用于配置大模型版本,默认“general/generalv2”
  9. # domain = "general"   # v1.5版本
  10. domain = "generalv2"  # v2.0版本
  11. # 云端环境的服务地址
  12. # Spark_url = "ws://spark-api.xf-yun.com/v1.1/chat"  # v1.5环境的地址
  13. Spark_url = "ws://spark-api.xf-yun.com/v2.1/chat"  # v2.0环境的地址
  14. text = []  # 用于存储对话内容的列表
  15. def getText(role, content):
  16.     """
  17.     构造包含角色和内容的对话信息,并添加到对话列表中
  18.    
  19.     参数:
  20.     role (str): 对话角色,可以是 "user"(用户)或 "assistant"(助手)
  21.     content (str): 对话内容
  22.    
  23.     返回值:
  24.     text (list): 更新后的对话列表
  25.     """
  26.     jsoncon = {}
  27.     jsoncon["role"] = role
  28.     jsoncon["content"] = content
  29.     text.append(jsoncon)
  30.     return text
  31. def getlength(text):
  32.     """
  33.     计算对话列表中所有对话内容的字符长度之和
  34.    
  35.     参数:
  36.     text (list): 对话列表
  37.    
  38.     返回值:
  39.     length (int): 对话内容的字符长度之和
  40.     """
  41.     length = 0
  42.     for content in text:
  43.         temp = content["content"]
  44.         leng = len(temp)
  45.         length += leng
  46.     return length
  47. def checklen(text):
  48.     """
  49.     检查对话列表中的对话内容字符长度是否超过限制(8000个字符)
  50.     如果超过限制,删除最早的对话内容,直到满足字符长度限制
  51.    
  52.     参数:
  53.     text (list): 对话列表
  54.    
  55.     返回值:
  56.     text (list): 更新后满足字符长度限制的对话列表
  57.     """
  58.     while getlength(text) > 8000:
  59.         del text[0]
  60.     return text
  61. if __name__ == '__main__':
  62.     # 在 Streamlit 网页上显示欢迎文本
  63.     st.markdown("#### 我是讯飞星火认知模型机器人,我可以回答您的任何问题!")
  64.    
  65.     # 初始化对话历史和生成的响应列表
  66.     if 'generated' not in st.session_state:
  67.         st.session_state['generated'] = []
  68.     if 'past' not in st.session_state:
  69.         st.session_state['past'] = []
  70.    
  71.     # 获取用户输入的问题
  72.     user_input = st.text_input("请输入您的问题:", key='input')
  73.    
  74.     if user_input:
  75.         # 构造用户输入的对话信息
  76.         question = checklen(getText("user", user_input))
  77.         
  78.         # 调用 SparkApi 中的函数进行问题回答
  79.         SparkApi.answer = ""
  80.         print("星火:", end="")
  81.         SparkApi.main(appid, api_key, api_secret, Spark_url, domain, question)
  82.         output = getText("assistant", SparkApi.answer)
  83.         
  84.         # 将用户输入和生成的响应添加到对话历史和生成的响应列表中
  85.         st.session_state['past'].append(user_input)
  86.         st.session_state['generated'].append(str(output[1]['content']))
  87.         
  88.     if st.session_state['generated']:
  89.         # 在网页上显示对话历史和生成的响应
  90.         for i in range(len(st.session_state['generated']) - 1, -1, -1):
  91.             message(st.session_state["generated"][i], key=str(i))
  92.             message(st.session_state['past'][i], is_user=True, key=str(i) + '_user')
复制代码
在代码中,将以下变量更换为您从讯飞开放平台获得的信息:

终端运行 Streamlit 应用步调:
  1. streamlit run your_app.py
复制代码

4.2 Streamlit相关知识点

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

本博文介绍了如何使用Streamlit和讯飞星火认知模型机器人构建一个问答应用步调。通过集成讯飞开放平台的API和自定义的Streamlit组件,我们可以实现实时的问答功能,并在网页上显示对话历史和生成的响应。
在使用这段代码前,需要完成一些准备工作,包括在讯飞开放平台注册账号、创建应用步调并获取相关信息。然后,需要安装所需的Python库,并将提供的源代码修改为适用于自己的API密钥和地点信息。末了,运行Streamlit应用步调并在浏览器中访问生成的URL即可。
在实现问答功能的过程中,我们学习了一些与Streamlit相关的知识点,包括显示Markdown文本、创建文本输入框、存储会话状态等。这些功能使得构建交互式的Web应用步调变得简单易用。
通过本博文的介绍,您如今可以开始使用讯飞星火认知模型机器人构建自己的问答应用步调了。希望这对您有资助,祝您在开辟过程中顺利前进!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4