-
易用性:Streamlit 提供了一个直观且易于使用的环境,让数据科学家和机器学习工程师能够快速构建数据驱动的应用程序,而不需要专业的前端开发技能。对于大语言模型这类复杂模型,Streamlit 可以帮助开发者迅速搭建展示模型效果及交互界面的Web应用,方便用户输入查询、模型预测及结果展示。
-
实时互动:通过Streamlit,可以将大语言模型集成到Web应用中,实现实时交互式体验,用户可以直接在浏览器中与模型进行对话或提交请求,并立即得到模型生成的结果。
-
简化部署:Streamlit 应用可以通过一行命令部署到云端服务,大大降低了将大语言模型部署为Web服务的门槛,便于模型的分享和使用。
原理
- 基于Python API:Streamlit 库基于Python编写,允许用户用Python脚本描述UI元素和数据处理逻辑。
- 响应式设计:Streamlit 应用是动态生成的,每当用户交互或数据发生变化时,都会重新渲染整个页面,更新结果显示。
- 集成模型调用:在Streamlit应用中,开发者可以方便地调用大语言模型API或本地模型来处理用户输入,然后将模型输出结果展示在网页上。
流程
- 安装Streamlit:首先确保Python环境中已安装Streamlit库。
- 创建应用脚本:编写Python脚本,定义UI组件(如文本输入框、按钮、文本显示区域等)。
- 集成大语言模型:在脚本中添加调用大语言模型的方法,通常是封装好模型预测API调用。
- 处理用户输入:监听用户在界面上的操作,如点击按钮或输入问题,触发模型调用。
- 展示模型输出:将模型返回的结果通过Streamlit的API显示在网页上。
- 运行应用:使用 命令启动应用,Streamlit会自动在本地开启一个Web服务器,并在浏览器中打开应用。
streamlit布局示例代码
以下展示了如何自定义你的 Streamlit 应用布局:
- 逐行解释
创建 Streamlit 应用时要做的第一件事就是将 库导入为 :
我们首先令页面的显示模式变为宽屏模式,页面内容将占据浏览器的全部宽度进行显示。
接下来,我们为这个 Streamlit 应用设置一个标题。
在应用标题下方创建一个标题名为 的可折叠区域。在展开时,我们可以看到其其中包含的额外细节。
通过在 和 之前加上 命令,我们将用于接收用户输入的组件放入侧边栏内。用户输入或选择的数值将被赋值并存储在 、 和 变量之中。
最后,我们使用 命令创建三列,分别名为 、 和 。然后我们使用独立的 语句将内容放入每列之中。其中我们创建了三个条件分支语句,根据用户是否在侧边栏中提供了输入来显示不同的文字。默认情况下显示的均为 语句下的内容。如果用户提供了对应的输入,则会显示在 标题下方。
值得注意的是,这里我们用 -字符串来将固定的信息与用户的输入数值相结合。
聊天机器人示例代码(简化版)
在这个例子中,我们使用了Hugging Face Transformers库加载了GPT-2模型,并通过Streamlit创建了一个简单的文本输入框和按钮。当用户输入问题并点击“生成文本”按钮时,模型会生成对应的回复,并在页面上显示结果。
这段代码是一个基于Streamlit构建的与预训练大语言模型ChatGLM3-6B交互的简单演示应用。以下是代码逐段解析:
-
导入所需库:
- : 用于从操作系统环境变量获取模型路径。
- : 引入Streamlit库,用于构建Web应用程序界面。
- : PyTorch深度学习框架,用于模型的加载和计算。
- : Hugging Face Transformers库,提供了预训练模型和tokenizer的加载接口。
-
定义环境变量:
- 和 从环境变量获取,如果没有设置则使用默认值。
-
设置Streamlit页面配置:
- 设置页面标题、图标以及布局方式。
-
使用装饰器 缓存资源函数 ,以避免每次调用时都重新加载模型和tokenizer:
- 函数内部使用 和 加载预训练的tokenizer和模型,同时设定模型处于评估模式 ()。
-
初始化会话状态(session state):
- 存储聊天历史记录 和模型需要的过去关键值 。
-
创建侧边栏滑块控制最大生成长度 、采样策略中的 和温度参数 。
-
清理会话历史功能:
- 当用户点击清理按钮时,清空历史记录、过去关键值,并尝试释放GPU缓存,然后刷新页面。
-
展示聊天历史:
- 遍历 列表,分别按照用户消息和助手(模型生成)消息样式展示过去的聊天内容。
-
用户输入区域:
- 创建两个空白占位符,分别用于接收用户输入和展示模型生成的回答。
-
用户输入事件处理:
- 获取用户输入的文字内容 。
- 将用户输入加入到聊天历史 中。
- 调用模型的 方法,传入用户输入、历史记录、参数设置等,生成模型回复。
- 将模型回复添加到聊天历史并更新会话状态中的历史记录和过去关键值。