一、 Streamlit框架
1. Streamlit框架简介
Streamlit是一个开源Python库。它旨在让数据科学家和工程师能够以最少的代码和配置,将他们的数据分析和模型展示转化为交互式的Web应用。Streamlit的设计目标是简单易用,同时保持高度的灵活性和可定制性。
streamlit官网
2. Streamlit安装
# 如果慢可以加上国内镜像(前面有总结)
pip install streamlit -i https://pypi.tuna.tsinghua.edu.cn/simple
# 可以通过简单代码查看,这里有很多示例
streamlit hello


官网中也有很多案例:streamlit官网文档

3. Streamlit框架特点
3.1 简单易用:
Streamlit的API非常简洁,只需要几行代码就可以创建一个基本的应用程序。
无需复杂的前端开发知识,Python代码直接决定了应用的界面和功能。
3.2 快速开发:
支持热重载,代码修改后自动更新应用,无需手动重启服务器。
丰富的内置组件和功能,可以快速实现常见的数据可视化和交互操作。
3.3 高度可定制:
支持自定义CSS样式,可以对应用的外观进行精细调整。
可以集成第三方库和框架,如Plotly、Altair、Pandas等,扩展应用的功能。
3.4 强大的社区支持:
官方文档详细且拥有一个活跃的社区,提供了大量的示例和教程,帮助用户快速上手。
4. Streamlit框架常见组件
Streamlit提供了许多内置组件,用于创建交互式界面:
4.1 文本和标题
st.write()、st.title()、st.header()、st.subheader()等
4.2 输入控件
st.text_input()、st.slider()、st.selectbox()、st.checkbox()、st.button()等
4.3 显示数据
st.dataframe()、st.table()、st.json()等
4.4 显示图表
st.pyplot()、st.altair_chart()、st.bokeh_chart()、st.plotly_chart()等
4.5 布局
st.sidebar()、st.columns()、st.expander()等
详见官网:streamlit官网文档
5. 用户注册案例

# Created by erainm on 2025/7/22 19:55.
# @Author erainm
# @Project: study_python
# @Description: TODO: streamlit 实现注册页面
import datetime
import streamlit as st
# 添加标题
st.title("用户注册")
# 添加分割线
st.divider()
# 添加文本输入框
username = st.text_input("请输入用户名:")
# 添加密码输入框
password = st.text_input("请输入密码:",type="password")
# 添加确认密码输入框
confirm_password = st.text_input("请再次输入密码:",type="password")
# 添加年龄输入框
age = st.number_input("请输入年龄:",value=18)
# 添加性别选择框
gender = st.radio("请选择性别:", options = ("男", "女","保密"),horizontal=True)
# 添加出生日期输入框
birth_date = st.date_input("请选择出生日期:", max_value=datetime.date(2025, 10, 1), min_value=datetime.date(1980, 1, 1),)
# 获取身高
height = st.slider("请输入身高:", 0, 300, 170)
# 添加注册按钮
def save_user_info(username, password, age, gender, birth_date, height):
# 保存用户信息
with open("../data/user_info.txt", "a") as f:
f.write(f"{username},{password},{age},{gender},{birth_date},{height}\n")
if st.button("注册"):
if password == confirm_password:
# 保存到本地文件中
save_user_info(username, password, age, gender, birth_date, height)
st.success("注册成功!")
else:
st.error("密码不一致,请重新输入!")
# Created by erainm on 2025/7/22 20:21.
# @Author erainm
# @Project: study_python
# @Description: TODO: 执行streamlit
import os
# 启动streamlit
# os.system("streamlit run streamlit_register.py")
os.system(r"streamlit run /Users/erainm/Documents/application/dev/workSpace/study_python/day04/streamlit_register.py")
6. 构建AI智能聊天机器人页面

# Created by erainm on 2025/7/22 20:28.
# @Author erainm
# @Project: study_python
# @Description: TODO: 聊天机器人页面构建
import time
import streamlit as st
st.write("欢迎来到聊天机器人页面")
st.divider ()
# 构建AI和用户的会话框
# AI先说话
st.chat_message("AI").write("你好,我是一个聊天机器人,你可以向我提问任何问题。")
user_input = st.chat_input("请输入你的问题:")
if user_input:
# 用户说话
st.chat_message("用户").write(user_input)
# AI回复
st.chat_message("AI").write("我正在思考你的问题,请稍等...")
# 模拟AI思考
time.sleep(2)
# AI回复
st.chat_message("AI").write("我是AI智能聊天机器人")
二、 Ollama调用本地大模型
# Created by erainm on 2025/7/22 21:10.
# @Author erainm
# @Project: study_python
# @Description: TODO: 测试ollama调用本地大模型(大模型需是本地已下载安装的)
import ollama
def ask_ollama(message):
res = ollama.chat(
model="deepseek-r1:7b",
messages=message
)
return res.message.content
if __name__ == '__main__':
while True:
print("提示:输入exit可退出程序")
# 输入问题
promt = input("请输入问题:")
if promt == "exit":
print("程序已退出,感谢您的使用~")
break
# 调用ollama封装消息
message = [{"role": "user", "content":promt}]
result = ask_ollama(message)
print(f"答案为:{result}")
三、 实现AI智聊机器人
1. 创建Ollama调用大模型工具类
# Created by erainm on 2025/7/22 21:19.
# @Author erainm
# @Project: study_python
# @Description: TODO: ollama调用大模型工具类
"""
底层有client,默认使用本地ollama
修改远程ollama,new_ollama = ollama.Client(host="http://地址:11434")
"""
import ollama
new_allama = ollama.Client(host="http://127.0.0.1:11434")
def ask_ollama(message):
response = ollama.chat(
model="deepseek-r1:7b",
messages=message
)
# return response.message.content
return response["message"]["content"]
2. Streamlit创建聊天页面
# Created by erainm on 2025/7/22 21:19.
# @Author erainm
# @Project: study_python
# @Description: TODO: 使用Streamlit创建聊天页面
"""
1. 解决用户提问了才回答,不会出现None
2. 解决保存历史记录
3. 解决可联系上下文
"""
import streamlit as st
from ollama_utils import ask_ollama
st.title("Ollama AI聊天机器人")
st.divider ()
if "message" not in st.session_state:
st.session_state["message"] = []
st.session_state["message"].append({"role":"assistant","content":"欢迎来到Ollama AI聊天机器人."})
# AI 先说话
for message in st.session_state["message"]:
st.chat_message(message["role"]).write(message["content"])
# 用户说话
prompt = st.chat_input("请输入你的问题")
# 用户提问了才回答
if prompt:
st.chat_message("user").write(prompt)
st.session_state["message"].append({"role":"user","content":prompt})
# AI回答
result = ask_ollama(st.session_state["message"][-10:]) # 此处把最新的10条消息发送给大模型
st.chat_message("assistant").write(result)
st.session_state["message"].append({"role":"assistant","content":result})
3. 运行
# Created by erainm on 2025/7/22 21:27.
# @Author erainm
# @Project: study_python
# @Description: TODO: 执行streamlit页面
import os
os.system("streamlit run streamlit_page.py")
4. 最终效果展示


690

被折叠的 条评论
为什么被折叠?



