Streamlit,Streamlit会话及使用指南,将Streamlit部署到云端.

第一个可视化的大模型应用

实现一个带有可视化界面的聊天机器人应用,可以将我们之前实现的聊天机器人转化为一个更加直观、用户友好的,我们的第一个可视化的大模型应用。

通过使用Streamlit,我们借助st.columns、st.container、st.chat_input 和st.chat message 等streamlit APl,将这个过程变得相对简单,它允许开发者使用Python创建具有交互性的页面,而无需深入了解复杂的Web开发技。术。

并且我们使用 st.json 直观地展示对话历史。让大家完整的了解用户和大模型的交互过程。

通过这个实战项目,我们不仅能实现一个功能强大的基于大模型的聊天机器人,还能学习到如何利用Streamlit构建美观的Web界面,还为我们后面的实战项目打下坚定的基础。

1. Streamlit介绍

Streamlit是一个开源Python库,它让开发者能够快速将Python脚本转换成交互式的Web应用,主要用于数据的可视化展示。

Streamlit还提供了丰富的组件,包括输入小部件、数据框架、图表和多页面应用布局等,以增强数据应用的功能。

Streamlit的社区云平台允许用户免费部署、管理和分享他们的应用。

目前常用于构建大模型应用。

  • 大模型应用底层逻辑简单
  • 都是Python生态的

组件库地址: https://docs.streamlit.io/develop/api-reference

特点

  • 设计理念是简单和Pythonic,使得编写代码既美观又易于阅读。
  • Streamlit的快速原型设计让用户能够迅速地与数据交互并提供反馈。
  • 它支持实时编辑,当你修改脚本时,应用会立即更新。
  • 开源并且免费。

 


2. Streamlit APl使用指南

Streamlit的API设计旨在让数据可视化、数据操作和数据分享变得简单直观。其API参考文档根据不同的活动类型进行了组织,如显示数据、优化性能等。每个部分都包含了与该活动类型相关的方法,并提供了实例代码。

安装

设置python虚拟环境

安装 streamlit

# 安装。版本低有些功能不支持。查看官网对应的额版本
 pip install streamlit==1.41.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

 运行 streamlit

streamlit hello  # 默认的hello 项目

访问streamlit页面 http://localhost:8501/

默认项目的一些介绍

 

创新建项目

 vim app.py

import streamlit as st

st.write("你好, 大郎. 我是翠花.")

运行

streamlit run app.py 

 streamlit run .\chatbot.py --server.port 8088   # 指定端口

http://localhost:8501

官网API  https://docs.streamlit.io/develop/api-reference


API参考

st.write

将参数写入应用程序。

查看代码
 import streamlit as st
import pandas as pd

st.write(1234)
st.write(
    pd.DataFrame(
        {
            "first column": [1, 2, 3, 4],
            "second column": [10, 20, 30, 40],
        }
    )
)

st.write_stream

以打字机效果将生成器或流写入应用程序,

流式输出

查看代码
import time
import numpy as np
import pandas as pd
import streamlit as st

_LOREM_IPSUM = """
武大郎,古典名著《水浒传》中的人物。是施耐庵根据元朝无名氏的《大宋宣和遗事》以及元朝龚开《宋江三十六人赞》(以上这两部文学作品都被认为是《水浒传》的雏形或蓝本)中描写的行者武松和武松打虎的故事进行衍生编撰出的新人物(据《浙江通志》记载,武松是个常在涌金门一带卖艺的流浪汉,并无哥哥)。
武大郎从小父母双亡,性情懦弱,却心地善良、为人质朴、疼爱兄弟。因其身不满五尺,面目丑陋,头脑可笑,上身长下身短而被世人嘲笑,起诨名“三寸丁谷树皮”。 [1]武大郎靠卖炊饼,将武松抚养成人,还买了房,无意间娶了潘金莲,却招来横祸,命丧黄泉。 
"""


def stream_data():
    for word in _LOREM_IPSUM:
        yield word + " "
        time.sleep(0.02)

    yield pd.DataFrame(
        np.random.randn(5, 10),
        columns=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
    )

if st.button("按钮,我是流失输出。"):
    st.write_stream(stream_data)

(魔法命令)Magic

当 Streamiit 发现某个变量或字面值单独位于一行时,它会自动使用 st.write 将其写入您的应用程序。

查看代码
 # Draw a title and some text to the app:
'''
# This is the document title
This is some _markdown_.
'''

import pandas as pd
df = pd.DataFrame({'col1': [1,2,3]})
df  # 👈 Draw the dataframe

x = 10
'x变量', x  # 👈 Draw the string 'x' and then the value of x

# Also works with most supported chart types
import matplotlib.pyplot as plt
import numpy as np

arr = np.random.normal(1, 1, size=100)
fig, ax = plt.subplots()
ax.hist(arr, bins=20)

fig  # 和 st.write(fig)  结果一样

文本元素 Markdown

以 Markdown 格式显示字符串。

import streamlit as st
st .markdown("Hello **大郎,喝药了吗?**" )

 大标题(Title)

以标题格式显示文本。

st.title("大舞台 title")

标题

以标题格式显示文本,

st.header("大舞台 header")

代码块

显示具有可选语法高亮的代码块。

st.code("大郎 = Do you want to drink medicine")
st.code("print('大郎喝药了,柠檬味道的。')")

 分隔符

显示水平规则。

st.divider()

数据元素 

将对象或字符串显示为美化的 JSON 字符串。

st.json({'dalang': '武大', 'erlang': '武二'})

输入小部件(Iinput widgets)

按钮

显示按钮小部件

if st.button('大舞台按钮'):
    st.write('蚌埠市第二届龙虾啤酒嗨玩节活动期间,现场人潮涌动,市民游客齐聚淮河文化广场,喝啤酒,“尅”龙虾。')
else:
    st.write('Goodbye')

下载按钮

显示下载按钮小部件。

text_contents='''This下载的内容'''
st.download_button('下载按钮', text_contents)

链接按钮

显示链接按钮。

st.link_button('链接按钮', 'https://www.baidu.com')

跳转链接页面page,并且可以设置图标

st.page_link

st.page_link("app.py", label="Home", icon="🏠")
st.page_link("pages/profile.py", label="跳转到指定page页面", icon="1️⃣", disabled=False)   # pages/profile.py 跳转的文件目录
st.page_link("http://www.baidu.com", label="Baidu", icon="🔍")

 icon的MarkDown 表情大全   https://tool.cccyun.cc/emoji

复选框按钮

显示复选框小部件。

agree = st.checkbox("I agree")

if agree:
    st.write("大郎,选中我了.我给你返回一个True")

切换开关

显示切换开关小部件。

on = st.toggle("我是开关")
if on:
    st.write("开关已打开。")

单选按钮

显示单选按钮小部件,

genre = st.radio(
    "你喜欢什么类型的电影?",
    [":rainbow[喜剧]", "***惊悚***", "动作 :movie_camera:"],  # :rainbow 彩虹颜色。
    captions=[
        "好看又治愈,喜剧片真的是高看不得了。",
        "惊悚片,致命弯道,食人魔,刺激又过瘾。",
        "强身又健体,动作片武打效果真的是过瘾。",
    ],
)

if genre == ":rainbow[喜剧]":
    st.write("你选择了喜剧。")
else:
    st.write("你没有选择喜剧。")

选择框

显示选择框小部件。

option = st.selectbox(
    "你希望如何联系你?",
    ("Email", "Home phone", "Mobile phone"),
)

st.write("You selected:", option)

多选框

显示多选框小部件。多选框初始为空。

已列表形式多选择。

options = st.multiselect(
    "你最喜欢的颜色是什么?",
    ["Green", "Yellow", "Red", "Blue"],  # 可选项
    ["Yellow", "Red"],           #默认项
)

st.write("You selected:", options)

滑块

显示滑块小部件。

import streamlit as st
from datetime import time

age = st.slider("滑块功能,你的年龄是多少?", 0, 130, 25)
st.write("I'm ", age, "years old")


values = st.slider("选择滑块数字范围?", 0.0, 100.0, (25.10, 75.0))
st.write("Values:", values)


appointment = st.slider(
    "安排您的预约:", value=(time(11, 30), time(12, 45))
)
st.write("You're scheduled for:", appointment)


start_time = st.slider(
    "你什么时候开始的?",
    value=datetime(2020, 1, 1, 9, 30),
    format="MM/DD/YY - hh:mm",
)
st.write("Start time:", start_time)

选择滑块

显示选择滑块小部件,从列表中选择项目。

color = st.select_slider(
    "选择彩虹的颜色?",
    options=[
        "red",
        "orange",
        "yellow",
        "green",
        "blue",
        "indigo",
        "violet",
    ],
)
st.write("我最喜欢的颜色是", color)

 

 

3. Streamlit会话管理(Session State)

1.维持应用状态: 通过会话状态,Streamlit应用能够记住用户的操作和输入,即使在应用代码被重新执行时也不例外。这对于创建一个连贯且逻辑一致的交互式用户体验至关重要。

2.跨页面状态持久化: 对于包含多个页面的应用,会话状态能够跨页面保持,使得用户在应用的不同页面间导航时,之前的操作和输入得以保留。这一特性对于构建有着复杂用户流程和多个交互界面的Web应用极为重要。

3.简化的状态管理: Streamlit的会话状态简化了状态管理的复杂性,使得开发者无需依赖外部数据库或复杂的后端逻辑就能实现状态的存储和更新。

import streamlit as st
import numpy as np

container = st.container()

if 'messages' not in st.session_state:
    st.session_state.messages = []  # 初始化一个空数组

prompt = st.chat_input("请输入: ")

if prompt:
    st.session_state.messages.append(prompt)

with container:
    with st.chat_message("user"):
        for messages in st.session_state.messages:
            st.write(messages)

 

4. 将应用部署在Streamlit云服务上,共享给其他人访问

把项目传的 github上,然后访问。读取对应的分支代码。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

end..

 

posted @ 2025-01-10 10:54  王竹笙  阅读(4)  评论(0)    收藏  举报