RWS.LOG/
搜索
踩坑复盘 / 状态管理

Streamlit 页面重运行后,状态为什么丢了

理解 rerun、session state 与后端对象生命周期之间的区别。

·6 MIN#Streamlit#Python#Debug

问题现象

页面发生交互后脚本重新执行,聊天消息还在,但 Agent 内部对象、缓存或当前任务状态出现不一致。

根本原因

Streamlit 的交互模型是从上到下重新执行脚本。普通局部变量不会自然跨 rerun 保存,而 session state、缓存资源和外部持久化拥有不同生命周期。

解决方案

  • 页面展示状态放入 st.session_state
  • 昂贵且可复用的客户端使用资源缓存。
  • 对话状态使用稳定的 thread ID 和 Checkpointer。
  • 服务重启后仍需保留的数据写入 SQLite 或 PostgreSQL。

验证方式

分别测试组件交互、浏览器刷新、服务进程重启和并发会话,不能只测试正常聊天路径。