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

Rasa 2.5.0:如何用max_event_history避免拉取大量数据库记录?

Rasa 2.5.0 大用户事件记录导致内存过高的解决方案及max_event_history配置验证

问题背景

生产环境基于Rasa 2.5.0运行超1年,采用MariaDB作为存储数据库。部分用户(sender_id)的事件记录数已超400万条,近期应用内存占用突破10GB,推测是这类用户与系统交互时,全量加载所有历史事件到内存导致。

当前Tracker Store配置

tracker_store = SQLTrackerStore(domain=domain, dialect="mysql", host=self.tracker_store_host,
                                port=self.tracker_store_port, db=self.tracker_store_db,
                                username=self.tracker_store_user, password=self.tracker_store_password)

疑问解答:动态设置max_event_history是否有效?

在Rasa 2.5.0版本中,这种动态赋值的方式是有效的,但更推荐初始化时直接配置,同时需要注意以下细节:

核心作用说明

max_event_history用于限制Tracker加载的历史事件数量,设置为100后,系统只会加载每个sender_id最新的100条事件到内存,旧事件不会被加载,直接解决全量加载导致的内存占用过高问题。

关键注意事项

  • 该配置是全局生效的,对所有sender_id的Tracker都会应用这个限制,无法单独针对特定用户配置。
  • 已加载到内存中的Tracker不会立即生效,需要重启服务,或等待该用户的Tracker被重新加载(比如服务重启后用户再次发起交互)。
  • 数据库中的旧事件不会被自动删除,只是加载时不读取。如果需要减少数据库存储压力,需手动编写脚本清理MariaDB中events表的历史数据(保留每个sender_id最新的N条)。

更规范的配置方式

建议在初始化SQLTrackerStore时直接传入参数,避免后续赋值可能带来的潜在问题:

tracker_store = SQLTrackerStore(
    domain=domain,
    dialect="mysql",
    host=self.tracker_store_host,
    port=self.tracker_store_port,
    db=self.tracker_store_db,
    username=self.tracker_store_user,
    password=self.tracker_store_password,
    max_event_history=100  # 直接在初始化时配置
)

额外优化建议

  • 定期清理数据库旧事件:编写定时任务,针对每个sender_id保留最新的100条事件,删除更早的记录,避免数据库持续膨胀。
  • 监控调整数值:设置后观察高记录用户交互时的内存变化,根据业务逻辑需求调整max_event_history的数值(比如业务需要更多历史上下文,可适当调高到200条)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 22:32:22