Streamlit 中函数多次进入的问题

news2025/1/19 2:55:48

Streamlit 函数多次进入的问题

    • Streamlit 学习的背景
    • 重要案例
    • 心得
    • 踩坑或注意点

Streamlit 学习的背景

  • 最近在学习ai相关的知识,同时需要做一些方便使用的web网页。
    例如:调用chatGPT的api,做对话窗。

  • 之前用过gradio, 但是发现在手机端上,显示还不太好。进行学习下Streamlit的使用方法。

重要案例

  • streamlit的多页面:https://blog.csdn.net/BigDataPlayer/article/details/128962594
  • chatbot(聊天窗):https://github.com/AI-Yash/st-chat/
    这里是作者的官方源码,这里提一下,如果使用user的输入,可以看出text-align: right的问题,我们官内是习惯了text-align:left, 如果需要更改,无法单纯地通过st.markdown(css相关的设置)更换,故这里作下记录,可以通过源码进行更改build自己的包。

心得

  • 网页中的控件隐藏:
    由于streamlit的原理,是不停地进入我们编写的.py脚本,故一般是使用session_state来控制页网中的控件显示(即可以达到隐藏的效果)。

踩坑或注意点

  • Streamlit on_xxx函数多次进入的问题:
    由于streamlit的原理故存在一定几率的多次进入on_xxx函数的问题,解决方法是追加一个 st.session_state.cache_xxx的标记变量。
    st.session_state.cache_user_name = “” # 因为使用了回调,但ui的更换不是这么快的,偶尔会发生多次进入的问题,故这里进行缓存
import streamlit as st

if 'prompts' not in st.session_state:
	st.session_state.cache_user_name = ""
	
def init_chat_history():
    print("--> init_chat_history:", st.session_state.my_user_name )

    if st.session_state.my_user_name == st.session_state.cache_user_name:
        print("--> Waring, login ", "my_user_name == cache_user_name, return")
        return
        
    st.session_state.cache_user_name= st.session_state.my_user_name   # 防止多次进入
    #  下面执行一些比较耗时的操作,如读取数据库等

# ui界面
st.markdown(
    """
    - 请先登陆
    - 当前用户名,可以自由登记
    - 请务必,记好自己用户名(用于记录你们的聊天上下文)。
"""
)
st.markdown("---")
st.text_input(label="用户名", on_change=init_chat_history, key="my_user_name")
st.button("登 陆", on_click=init_chat_history)
  • 右上角的设置隐掉:
    .css-14xtw13.e8zbici0 如果不对,请使用F12调试
st.markdown("<style>.css-14xtw13.e8zbici0{visibility:hidden;}</style>", unsafe_allow_html=True)  # 右上角按钮的隐掉
  • chatGPT虚拟角色聊天:
    以下是与编写的ai妹子聊天的内容,使用的是上面提到的 from streamlit_chat import message
    在这里插入图片描述

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

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

相关文章

NestJS:理解ORM(Object Relational Mapping)

一、理解ORM(Object Relation Mapping) ORM是对象—关系映射&#xff08;Object/Relation Mapping&#xff0c;ORM&#xff09;是为了解决面向对象与关系数据库存在的互不匹配现象而产生的技术。业务实体在内存中表现为对象&#xff0c;在数据库中表现为关系数据。ORM通过使用描…

【网络技术】HULK攻击实验

一、重要声明 请勿攻击公网&#xff01;请勿攻击公网&#xff01;请勿攻击公网&#xff01; 一切责任自负&#xff01;一切责任自负&#xff01;一切责任自负&#xff01; 二、工具介绍 HULK&#xff08;Http Unbearable Load King&#xff0c;字面意思是“不能承受的HTTP&a…

项目三:双人骰子

项目三&#xff1a;双人骰子 文章目录 项目三&#xff1a;双人骰子一、导入(5分钟&#xff09;学习目的 二、新授(65分钟)1.预展示结果(5分钟)2.本节课所用的软硬件(5分钟)3.硬件介绍(1分钟)4.图形化块介绍(1分钟)5.单个模块的简单使用(1分钟)6.双人骰子编程逻辑分析(30分钟)7.…

Faster RCNN系列——RoI Pooling与全连接层

在RPN网络中&#xff0c;已经计算过一次类别真值与类别预测值、偏移量真值与偏移量预测值之间的损失值&#xff0c;但这里的类别预测值只包含两类&#xff1a;前景和背景。 RPN网络输出的Proposal作为生成的区域&#xff0c;继续在后续的RoI Pooling和全连接层中进行分类与回归…

企业电子招投标系统源码之电子招投标系统建设的重点和未来趋势

项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以及…

性能优化3-分帧寻路+寻路任务统一管理

前言 当项目里的地图越来越大&#xff0c;一些性能上的问题开始逐渐出现&#xff0c;比如寻路。玩家在操控角色移动的时候&#xff0c;指引需要实时更新&#xff0c;同时一些npc也需要做移动&#xff0c;容易出现cpu占用率短时间过高&#xff0c;甚至掉帧的情况。 去年底的时候…

ChatGPT,音乐,与数据库

小编君是个不务正业&#xff0c;喜欢搞跨界&#xff0c;干啥啥不成的DBA&#xff0c;大概在十一年前就有个不成熟的妄念&#xff0c;能否用计算机来写音乐&#xff1f; ▌用ChatGPT来搞音乐&#xff1f; 音乐是一个个的音符&#xff0c;按照乐理规则排列的。音符之间是否和谐…

横扫一线大厂面试的高并发笔记到底有多硬核?

处处需要高并发 “为什么Java面试必问高并发&#xff1f;” 这个问题已经让程序员们倍感头疼&#xff0c;尤其是想要跳槽到更大公司的程序员&#xff0c;能否漂亮的回答高并发的问题已经成为求职者是否是一个优秀程序员的评判标准&#xff0c;大厂面试尤为明显。 不得不说&am…

springMvc(二)

一、SSM整合 前面我们已经把 Mybatis 、 Spring 和 SpringMVC 三个框架进行了学习&#xff0c;今天主要的内容就是把这三个 框架整合在一起完成我们的业务功能开发&#xff0c;具体如何来整合&#xff0c;我们一步步来学习。 1.1 流程分析 (1) 创建工程 创建一个Maven的we…

BUUCTF-PWN-ciscn_2019_n_1

1.溢出到shell位置 下载文件 checksec file 发现是64位的 然后 放入ida 查看字符串 发现 cat flag 然后看看 F5反编译 我们发现了system 然后get()函数 我们可以使用栈溢出 我们看看 v1函数的地址 是30h 然后是64位的 所以 基地址是8字节 我们开始查看 system的地址 所以…

Web3 营销:项目方如何使用空投奖励以及激励真实用户

Apr. 2023, Daniel 在GameFi中&#xff0c;举行成功的空投活动是最难做到的事情之一。 虽然今年Arbitrum和Blur的活动再次使空投成为一个热门话题&#xff0c;但通过空投赚取收益造成了一个机器人问题&#xff0c;即空投者使用多个账户来进入游戏系统。 Trading volume on Bl…

【LeetCode】剑指 Offer 61. 扑克牌中的顺子 p298 -- Java Version

题目链接&#xff1a;https://leetcode.cn/problems/bu-ke-pai-zhong-de-shun-zi-lcof/ 1. 题目介绍&#xff08;61. 扑克牌中的顺子&#xff09; 从若干副扑克牌中随机抽 5 张牌&#xff0c;判断是不是一个顺子&#xff0c;即这5张牌是不是连续的。2&#xff5e;10为数字本身…

活动需求中灵活使用Redis提升生产力

抽奖 一堆用户参与进来&#xff0c;然后随机抽取几个幸运用户给予实物/虚拟的奖品&#xff1b;此时&#xff0c;开发人员就需要写上一个抽奖的算法&#xff0c;来实现幸运用户的抽取&#xff1b;其实我们完全可以利用Redis的集合&#xff08;Set&#xff09;&#xff0c;就能轻…

汽车CAN、LIN汇总

目录&#xff1a; 一、准备知识 1、什么是CAN 2、汽车网络发展时间轴 3、如何通信 4、CAN总线结构 1&#xff09;ISO 11898 2&#xff09;CAN 和 J1850的比较 3&#xff09;CAN 和 UART的比较 5、关于节点 1&#xff09;什么是节点 2&#xff09;节点&#xff1a;报文传…

Jdbc开发结构

一、导入jar包&#xff0c;放置lib目录下&#xff0c;需要的有&#xff1a; &#xff08;1&#xff09;alibaba连接池&#xff08;druid&#xff09; &#xff08;2&#xff09;apache工具类&#xff08;commons-dbutils&…

网络协议-HTTP入门和基础工具链

Http协议介绍 发明者&#xff1a;蒂姆伯纳斯-李 英国计算机科学家&#xff08;1955-&#xff09; 万维网&#xff08;1990HTTP协议&#xff09; 世界第一个浏览器 第一个服务端程序 创办MIT人工智能实验室 HTTP协议 超文本传输协议&#xff08;Hyper Text Trabsfer Prot…

一文带你搞清 ChatGPT 与 Azure OpenAI 的区别

这两周是我从2017年开始全职涉入 NLP 领域后最忙的两周&#xff0c;无数的同事和客户都在向我提出一个询问&#xff1a;ChatGPT 可以帮到我们什么&#xff1f; 特别是在2023年3月31日我做了一场微软 Azure OpenAI [布局助力企业]拥抱新智能时代的演讲之后&#xff0c;这几天我…

信号系统中使用的继电器

继电器是什么 继电器是一种电气开关&#xff0c;它使用电磁力来控制一个或多个电气电路的操作。继电器通常由电磁铁、触点和弹簧等部件组成。当电磁铁被激活时&#xff0c;它会产生磁场&#xff0c;吸引或释放触点&#xff0c;从而打开或关闭电路。 继电器的分类 继电器分为…

CSS学习(5) - 布局

文章首发于我的个人博客&#xff1a;欢迎大佬们前来逛逛 文章目录 CSS布局display属性width和max-widthposition 属性溢出浮动和清除floatclear 布局案例 CSS布局 display属性 display 属性是CSS布局的最重要的属性。 display属性规定是否/如何显示元素。 display元素通常与…

Python词云

词云图wordcloud 1.安装第三方库 j i e b a 库、 m a t p l o t l i b 、 w o r d c l o u d 库 jieba库、matplotlib、wordcloud库 jieba库、matplotlib、wordcloud库 2.过程 1.使用 j i e b a jieba jieba 库对数据进行分词整理&#xff0c;转为 t x t txt txt文件&#…