以下是一个使用Streamlit开发AI Web应用的详细实战教程,包含代码和注释说明。
由于篇幅限制,这里提供完整框架和核心代码示例,实际开发可根据需求扩展。
使用Streamlit开发AI情感分析Web应用
目录
- 开发环境搭建
- Streamlit基础组件详解
- 情感分析模型选择与部署
- 完整应用开发流程
- 界面美化与交互优化
- 部署与发布
- 完整代码与注释
第一章:开发环境搭建
1.1 安装Python环境
推荐使用Python 3.8+版本,建议通过Anaconda管理环境:
bash
复制
conda create -n st-env python=3.8
conda activate st-env
1.2 安装必要库
bash
复制
pip install streamlit
pip install transformers # Hugging Face模型库
pip install torch # PyTorch深度学习框架
pip install pandas # 数据处理
pip install plotly # 可视化
1.3 验证安装
创建test_app.py:
python
复制
import streamlit as st
st.title("测试应用")
st.write("Hello World!")
运行:
bash
复制
streamlit run test_app.py
第二章:Streamlit基础组件详解
2.1 核心组件
python
复制
import streamlit as st
# 文本组件
st.title("情感分析系统") # 大标题
st.header("实时分析功能") # 中标题
st.subheader("版本 1.0") # 小标题
st.text("这是一个基础文本组件") # 固定宽度文本
st.markdown("**重点内容**") # Markdown支持
# 输入组件
user_input = st.text_area("请输入文本", height=150) # 多行文本输入
slider_val = st.slider("选择置信度阈值", 0.0, 1.0, 0.7) # 滑动条
# 布局组件
col1, col2 = st.columns(2) # 创建双列布局
with col1:
if st.button("分析"):
# 处理逻辑
with col2:
st.spinner("处理中...") # 加载动画
# 文件上传
uploaded_file = st.file_uploader("上传文本文件", type=["txt"])
2.2 高级功能
python
复制
# 缓存机制
@st.cache_resource
def load_model():
return pipeline("sentiment-analysis")
# 会话状态管理
if "click_count" not in st.session_state:
st.session_state.click_count = 0
# 进度条
progress_bar = st.progress(0)
for i in range(100):
progress_bar.progress(i + 1)
第三章:情感分析模型部署
3.1 使用Hugging Face模型
python
复制
from transformers import pipeline
# 初始化模型
@st.cache_resource
def get_model():
return pipeline(
"sentiment-analysis",
model="distilbert-base-uncased-finetuned-sst-2-english",
tokenizer="distilbert-base-uncased-finetuned-sst-2-english"
)
# 分析函数
def analyze_text(text):
model = get_model()
results = model(text)
return {
"label": results[0]["label"],
"score": results[0]["score"]
}
3.2 处理长文本
python
复制
def chunk_text(text, max_length=512):
return [text[i:i+max_length] for i in range(0, len(text), max_length)]
def analyze_long_text(text):
chunks = chunk_text(text)
results = []
for chunk in chunks:
result = analyze_text(chunk)
results.append(result)
return aggregate_results(results) # 自定义结果聚合函数
第四章:完整应用开发
4.1 主界面设计
python
复制
import streamlit as st
import pandas as pd
import plotly.express as px
def main():
st.set_page_config(
page_title="智能情感分析系统",
page_icon="",
layout="wide"
)
# 侧边栏
with st.sidebar:
st.header("设置")
confidence_threshold = st.slider("置信度阈值", 0.5, 1.0, 0.7)
max_length = st.number_input("最大文本长度", 100, 2000, 512)
# 主界面
st.title(" 实时文本情感分析")
# 输入区域
input_tab, file_tab = st.tabs(["文本输入", "文件分析"])
with input_tab:
text = st.text_area("输入需要分析的文本", height=200)
if st.button("开始分析"):
with st.spinner("分析中..."):
result = analyze_text(text)
display_results(result)
with file_tab:
uploaded_file = st.file_uploader("上传文本文件", type=["txt"])
if uploaded_file:
text = uploaded_file.read().decode()
results = analyze_long_text(text)
show_statistics(results)
def display_results(result):
col1, col2 = st.columns(2)
with col1:
st.subheader("分析结果")
label = " 积极" if result["label"] == "POSITIVE" else " 消极"
st.metric("情感倾向", label)
st.write(f"置信度:{result['score']:.2%}")
with col2:
fig = px.pie(
names=["积极", "消极"],
values=[result["score"], 1 - result["score"]],
title="情感分布"
)
st.plotly_chart(fig, use_container_width=True)
第五章:界面优化
5.1 主题定制
创建.streamlit/config.toml:
toml
复制
[theme]
primaryColor = "#FF4B4B"
backgroundColor = "#FFFFFF"
secondaryBackgroundColor = "#F0F2F6"
textColor = "#31333F"
font = "sans serif"
5.2 高级交互
python
复制
# 实时分析
if st.toggle("启用实时分析"):
text = st.text_area("输入文本", key="realtime_input")
if text:
preview_result = analyze_text(text[:100])
st.write(f"实时预览:{preview_result['label']}")
# 历史记录
if "history" not in st.session_state:
st.session_state.history = []
st.session_state.history.append(result)
history_df = pd.DataFrame(st.session_state.history)
st.line_chart(history_df["score"])
第六章:部署发布
6.1 本地打包
创建requirements.txt:
复制
streamlit>=1.28
transformers>=4.30
torch>=2.0
plotly>=5.15
pandas>=2.0
6.2 使用Docker部署
Dockerfile:
dockerfile
复制
FROM python:3.8-slim
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
EXPOSE 8501
CMD ["streamlit", "run", "app.py", "--server.port=8501"]
6.3 云服务部署
以Hugging Face Spaces为例:
- 创建新Space
- 选择Streamlit模板
- 上传代码文件
- 配置环境变量
第七章:完整代码
完整app.py:
python
复制
# 省略部分重复代码,完整代码需包含所有功能模块
# 此处展示核心整合代码
import streamlit as st
from transformers import pipeline
import pandas as pd
import plotly.express as px
# 初始化模型
@st.cache_resource
def load_model():
return pipeline(
"sentiment-analysis",
model="distilbert-base-uncased-finetuned-sst-2-english"
)
# 分析函数
def analyze_text(text, model):
return model(text)[0]
# 界面主函数
def main():
# 页面配置
st.set_page_config(...)
# 侧边栏
with st.sidebar:
# 配置参数
# 主界面
st.title(...)
# 输入处理
# 结果显示
# 历史记录
if __name__ == "__main__":
main()
总结与扩展
本文实现了一个完整的AI情感分析Web应用,包含以下功能:
- 实时文本分析
- 文件批量处理
- 可视化结果展示
- 历史记录追踪
- 参数配置功能
扩展方向建议:
- 增加多语言支持
- 集成自定义模型训练
- 添加用户认证系统
- 实现API接口
- 加入实时数据库
通过本案例可以掌握:
Streamlit核心组件的使用
Hugging Face模型集成
Web应用部署全流程
交互式界面设计技巧
以上为精简版教程框架,实际开发需要根据具体需求调整完善。
建议通过以下方式深入理解:
- 逐步实现每个功能模块
- 查阅Streamlit官方文档
- 尝试不同模型组合
- 添加错误处理机制
- 进行性能优化测试