You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LangChain Flask应用多用户复杂对象路由传递与状态管理问询

针对Azure Web App部署LangChain多用户聊天机器人的无Redis解决方案

1. 多用户数据隔离:线程安全的进程内缓存

  • 替换全局变量,使用带threading.Lock保护的字典存储用户专属数据,键采用用户邮箱的哈希值(确保唯一性),值为包含DataFrames、Agent实例、对话Memory的自定义对象。
  • Azure Web App单实例为多线程模型,线程锁可避免并发读写冲突;若启用多实例横向扩展,依赖Azure默认的会话亲和性(Sticky Sessions),确保同一用户的请求持续路由到同一实例,每个实例维护独立的用户数据缓存分片。

2. 大DataFrames存储:磁盘缓存替代Session

  • 放弃Session存储大对象,用joblib(比pickle更高效)序列化DataFrames,存储到Azure Web App的临时存储目录(D:\home\site\wwwroot\user_cache)或Azure Files共享存储,文件名格式为{user_hash}_{table_name}.joblib。
  • 每次请求时先检查本地缓存文件是否存在且未过期,存在则直接反序列化加载,避免重复从SQL Server拉取数据。

3. 初始化耗时优化:预加载+缓存复用

  • 预加载通用资源:应用启动时,针对高频权限组预拉取通用数据表、初始化基础Agent模板,用户请求时仅需注入专属数据,无需全量初始化。
  • 用户级缓存复用:首次请求时加载用户专属DataFrames并初始化Agent,将结果存入线程安全字典/磁盘缓存,后续请求直接复用,直到用户会话过期或数据更新。

4. 生产环境稳定性保障

  • 给用户数据缓存添加LRU淘汰策略:用cachetools.LRUCache替代普通字典,限制缓存的用户数量(比如1000个),避免内存溢出。
  • 实现会话过期清理:记录每个用户数据的最后访问时间,用定时任务(如APScheduler)每日清理超过24小时未访问的缓存数据和磁盘文件。
  • 启用Azure Application Insights,监控内存使用率、缓存命中率、初始化耗时等指标,根据数据调整缓存策略。

5. 对话Memory处理

  • 将ConversationBufferMemory等对话上下文对象和用户DataFrames、Agent实例绑定,一同存入线程安全字典或序列化到磁盘缓存,确保同一用户的对话上下文连贯。

内容的提问来源于stack exchange,提问作者Ahad Anjum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 15:27:19