LLM大语言模型(二):Streamlit 无需前端经验也能画web页面

目录

问题

Streamlit是什么?

怎样用Streamlit画一个LLM的web页面呢? 

文本输出

页面布局

滑动条

按钮

对话框

输入框

总结


问题

假如你是一位后端开发,没有任何的web开发经验,那如何去实现一个LLM的对话交互页面呢?

答案是"Streamlit"

Streamlit是什么?

Streamlit是一个开源Python库。

可以轻松创建和共享用于机器学习和数据科学的漂亮的自定义web应用程序。

只需几分钟,您就可以构建和部署功能强大的数据应用程序。

一句话说明白:用python画web页面

怎样用Streamlit画一个LLM的web页面呢? 

下文将以ChatGLM3的demo为例做介绍。

文本输出

使用Streamlit的markdown组件

st.markdown(message["content"])

markdown组件支持HTML标签(官方不建议这么做),help信息等。 

st.markdown(body, unsafe_allow_html=False, *, help=None)

页面布局

整体分为左和右。

左侧又分为超参数调节、“清理会话历史”按钮。

右侧又分为对话展示框、输入框。

我们来看如何用python实现此布局。

左侧布局:

# 左侧超参数调节组件
# st表示streamlit# 设置max_length、top_p和temperature
max_length = st.sidebar.slider("max_length", 0, 32768, 8192, step=1)
top_p = st.sidebar.slider("top_p", 0.0, 1.0, 0.8, step=0.01)
temperature = st.sidebar.slider("temperature", 0.0, 1.0, 0.6, step=0.01)# 清理会话历史按钮
buttonClean = st.sidebar.button("清理会话历史", key="clean")
if buttonClean:st.session_state.history = []st.session_state.past_key_values = Noneif torch.cuda.is_available():torch.cuda.empty_cache()st.rerun()

滑动条

超参数调节使用的滑动条是streamlit的sidebar.slider组件,可以设置最小值、最大值、默认值、step、帮助信息等

st.slider(label, min_value=None, max_value=None, 
value=None, step=None, format=None, 
key=None, help=None, on_change=None, 
args=None, kwargs=None, *, disabled=False, 
label_visibility="visible")

按钮

清理会话历史按钮用的是streamlit的button组件,可以设置button展示名称,key组件唯一标识等。返回bool,用于判断按钮是否被触发。

st.button(label, key=None, 
help=None, on_click=None, 
args=None, kwargs=None, *,type="secondary", disabled=False,use_container_width=False)

对话框

右侧是人机对话框,将对话历史逐条渲染,分为user和assistant消息,使用Streamlit的chat_message组件

# 渲染聊天历史记录
for i, message in enumerate(st.session_state.history):if message["role"] == "user":with st.chat_message(name="user", avatar="user"):st.markdown(message["content"])else:with st.chat_message(name="assistant", avatar="assistant"):st.markdown(message["content"])

Streamlit的chat_message组件,隶属于chat组件分类。如果name是 "human"/"user" or "ai"/"assistant",将自动启用系统内置的展示图标等。纯纯的为了LLM对话框而设计的。

st.chat_message(name, *, avatar=None)

输入框

输入框使用了Streamlit的chat_input组件,获取到input后,调用后端LLM生成新的对话内容。

# 初始化输入框和输出框
with st.chat_message(name="user", avatar="user"):input_placeholder = st.empty()
with st.chat_message(name="assistant", avatar="assistant"):message_placeholder = st.empty()# 获取用户输入
prompt_text = st.chat_input("请输入您的问题")# 如果用户输入了内容,则生成回复
if prompt_text:input_placeholder.markdown(prompt_text)history = st.session_state.historypast_key_values = st.session_state.past_key_valuesfor response, history, past_key_values in model.stream_chat(tokenizer,prompt_text,history,past_key_values=past_key_values,max_length=max_length,top_p=top_p,temperature=temperature,return_past_key_values=True,):message_placeholder.markdown(response)# 更新历史记录和past key valuesst.session_state.history = historyst.session_state.past_key_values = past_key_values

总结

Streamlit提供了一种非常便捷且高效的方式,让后端开发也能轻松的画出来简单的web页面。

特别适合LLM这种页面比较简单的场景。

当然它的大头在data science的数据可视化场景。

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

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

相关文章

Python MySQL数据库连接与基本使用

一、应用场景 python项目连接MySQL数据库时,需要第三方库的支持。这篇文章使用的是PyMySQL库,适用于python3.x。 二、安装 pip install PyMySQL三、使用方法 导入模块 import pymysql连接数据库 db pymysql.connect(hostlocalhost,usercode_space…

Spring MVC开发流程

1.Spring MVC环境基本配置 Maven工程依赖spring-webmvc <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.1.9.RELEASE</version> </dependency>web.xml配置Dispatche…

NSSCTF第16页(2)

[NSSRound#4 SWPU]1zweb(revenge) 查看index.php <?php class LoveNss{public $ljt;public $dky;public $cmd;public function __construct(){$this->ljt"ljt";$this->dky"dky";phpinfo();}public function __destruct(){if($this->ljt"…

day01unittest复习,断言

1.unittest 方法执行前 # def setUp(self) -> None: # print(方法执行前执行) # # def tearDown(self) -> None: # print(方法执行后执行一次) 2.unittest 类方法执行前后执行一次 classmethod def setUpClass(cls) -> None:print(类执行前执行一次)classm…

微分和导数(一)

1.微分&#xff1a; 假设我们有⼀个函数f : R → R&#xff0c;其输⼊和输出都是标量。如果f的导数存在&#xff0c;这个极限被定义为 如果f′(a)存在&#xff0c;则称f在a处是可微的。如果f在⼀个区间内的每个数上都是可微的&#xff0c;则此函数在此区间中是可微的。导数f′…

网络协议 - UDP 协议详解

网络协议 - UDP 协议详解 UDP概述UDP特点UDP的首部格式UDP校验 參考文章 基于TCP和UDP的协议非常广泛&#xff0c;所以也有必要对UDP协议进行详解。 UDP概述 UDP(User Datagram Protocol)即用户数据报协议&#xff0c;在网络中它与TCP协议一样用于处理数据包&#xff0c;是一种…

必要时进行保护性拷贝

保护性拷贝&#xff08;Defensive Copy&#xff09;是一种常见的编程实践&#xff0c;用于在传递参数或返回值时&#xff0c;创建副本以防止原始对象被意外修改。以下是一个例子&#xff0c;展示了何时进行保护性拷贝&#xff1a; mport java.util.ArrayList; import java.uti…

数据手册Datasheet解读-肖特基二极管笔记

数据手册Datasheet解读笔记1-肖特基二极管 数据手册大体结构共包含10个部分肖特基二极管-SS14第一重点关注点&#xff1a;极限值第二重点关注点&#xff1a;电气特性 数据手册大体结构共包含10个部分 1.Features一特性 2.Application一应用 3.Description一说明4.Pin Configur…

关于在Java中打印“数字”三角形图形的汇总

之前写过一篇利用*打印三角形汇总&#xff0c;网友需要查看可以去本专栏查找之前的文章&#xff0c;这里利用二维数组嵌套循环打印“数字”三角形&#xff0c;汇总如下&#xff0c;话不多说&#xff0c;直接上代码&#xff1a; /*** 打印如下数字三角形图形*/ public class Wo…

逻辑分析仪_使用手册

LA1010 1> 能干啥&#xff1f;2> 硬件连接3> 软件安装4> 参数设置4.1> 采样深度和采样率4.2> 添加协议解析器4.3> 毛刺过滤设置 1> 能干啥&#xff1f; 测量通信波形&#xff0c;并自动解析&#xff1b; 比如测量&#xff0c;UART&#xff0c;SPI&…

【DataSophon】大数据管理平台DataSophon-1.2.1安装部署详细流程

&#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&am…

java_web_电商项目

java_web_电商项目 1.登录界面2.注册界面3. 主界面4.分页界面5.商品详情界面6. 购物车界面7.确认订单界面8.个人中心界面9.收货地址界面10.用户信息界面11.用户余额充值界面12.后台首页13.后台商品增加14.后台用户增加15.用户管理16.源码分享1.登录页面的源码2.我们的主界面 1.…

在线二进制原码,补码,反码计算器

具体请前往&#xff1a;在线原码/反码/补码计算器

LLM中的Prompt提示

简介 在LLM中&#xff0c;prompt&#xff08;提示&#xff09;是一个预先设定的条件&#xff0c;它可以限制模型自由发散&#xff0c;而是围绕提示内容进行展开。输入中添加prompt&#xff0c;可以强制模型关注特定的信息&#xff0c;从而提高模型在特定任务上的表现。 结构 …

会声会影怎么使用? 会声会影2024快速掌握入门技巧

一听说视频剪辑我们就不由得联想到电影、电视等一些高端的视频剪辑技术&#xff0c;大家都觉得视频剪辑是一个非常复杂而且需要很昂贵的设备才可以完成的技术活&#xff0c;这对很多“门外汉”来说都可望而不可及。实际上&#xff0c;使用会声会影剪辑视频不仅是很多人都可以操…

【深度强化学习】策略梯度方法:REINFORCE、Actor-Critic

参考 Reinforcement Learning, Second Edition An Introduction By Richard S. Sutton and Andrew G. Barto非策略梯度方法的问题 之前的算法&#xff0c;无论是 MC&#xff0c;TD&#xff0c;SARSA&#xff0c;Q-learning&#xff0c; 还是 DQN、Double DQN、Dueling DQN…

STM32G030C8T6:使用按键控制LED亮灭(外部中断)

本专栏记录STM32开发各个功能的详细过程&#xff0c;方便自己后续查看&#xff0c;当然也供正在入门STM32单片机的兄弟们参考&#xff1b; 本小节的目标是&#xff0c;系统主频64 MHZ,采用高速外部晶振&#xff0c;通过KEY1 按键的PA0 引脚配置成中断输入引脚&#xff0c;PB9引…

写好ChatGPT提示词原则之:清晰且具体(clear specific)

ChatGPT 的优势在于它允许用户跨越机器学习和深度学习的复杂门槛&#xff0c;直接利用已经训练好的模型。然而&#xff0c;即便是这些先进的大型语言模型也面临着上下文理解和模型固有局限性的挑战。为了最大化这些大型语言模型&#xff08;LLM&#xff09;的潜力&#xff0c;关…

Spring 6(二)【IOC原理】

前言 1、IOC IoC 是 Inversion of Control 的简写&#xff0c;译为“控制反转”&#xff0c;它不是一门技术&#xff0c;而是一种设计思想&#xff0c;是一个重要的面向对象编程法则&#xff0c;能够指导我们如何设计出松耦合、更优良的程序。 1.1、控制反转 控制反转不是技术…

visual Studio MFC 平台实现图片的傅里叶变换

图片的傅里叶变换 本文主要讲解傅里叶变换的基本数学概念与物理概念&#xff0c;并本文使用visual Studio MFC 平台实现对傅里叶变换在图片上进行了应用。 一、傅里叶变换的原理 在这里推荐一篇讲得非常形象的文章通俗讲解&#xff1a;图像傅里叶变换 1.1 傅里叶变换原理的说明…