用途:把科研模型从 Notebook 推进到可部署系统。FastAPI 负责后端(模型服务、数据处理),Streamlit 负责前端(交互控件、实时绘图)。
主要能力:FastAPI 基于 Pydantic 做数据校验、基于 Starlette 提供 Web 能力,支持 async/await 高并发、自动生成 Swagger/Redoc 文档、依赖注入与后台任务;Streamlit 支持滑块、地图、图表等交互控件,用 @st.cache_data 缓存重计算,用 @st.cache_resource 缓存数据库连接或模型,支持多列布局、侧边栏、session_state 与 st.form。
使用方式:先安装依赖 pip install fastapi uvicorn streamlit pydantic。FastAPI 用 uvicorn main_api:app --reload 启动,生产可用 uvicorn main:app --workers 4;Streamlit 用 streamlit run main_ui.py 启动,默认端口 8501,FastAPI 默认 8000。建议把科学逻辑抽成独立模块,供 API 与 UI 共用。
适用场景:将机器学习模型封装为 REST API、为重型科学计算建微服务、搭建数据探索仪表盘、向非技术相关方演示科研结果、内部工具快速原型。
限制与注意:Streamlit 每次交互自上而下重跑脚本,耗时超过约 1 秒的函数必须缓存;FastAPI 中 CPU 密集型任务应使用普通 def 而非 async def,以免阻塞事件循环;敏感数据不要写在 UI 代码里,应使用环境变量或 .streamlit/secrets.toml;输入类型不符时 FastAPI 返回 422。官方文档见 https://fastapi.tiangolo.com/ 与 https://docs.streamlit.io/。