这道题其实在问一个很本质的问题:当[[Agent]]面对一个动态变化的环境时,怎么避免用昨天的信息做今天的决策。特别是有长时间会话或者频繁更新业务规则的场景,旧记忆确实会拖后腿。我的判断是,有必要引入记忆衰退,但前提是区分清楚两类记忆:一类是事实性知识,比如产品手册、政策文档,这些应该走外挂的[[RAG]],定期更新就好;另一类是交互记忆,也就是会话过程中产生的上下文,这才是衰减机制真正要管的地方。
具体怎么实现,我重点讲三个方向。先说时间衰减,这是最直观的思路。给每条记忆打一个时间戳,检索的时候按指数函数降权,比如 e^{-λt},越旧的权重越低,甚至可以定期物理删除超期的记忆。再一个是重要性评分,用LLM或者一个轻量模型给记忆打一个重要性分,低分的优先淘汰。这个方法的好处是能保留那些虽然旧但很关键的信息,比如用户明确说过的偏好。最后一个是访问频率衰减,有点像缓存里的LRU策略,长期没被访问的记忆就迁移到慢存储或者压缩成摘要,释放工作记忆空间。这几个方法各有适用场景,真正落地往往是组合使用。比如时间衰减做第一轮粗筛,重要性评分做第二轮精排,访问频率用来管理存储层级。
举个例子,在客服退款场景里,商家满减政策可能一个月调整一次。如果Agent把上个月的政策记在上下文里,很可能给用户错误的答复。这时候时间衰减就很关键,政策相关的记忆在政策更新后权重迅速降低,避免误导。同时,用户的历史投诉记录如果有重要性评分,即使时间久也能保留,因为对处理新投诉有参考价值。
落地的时候有几个坑要特别注意。一个是衰减参数λ的调优,这需要结合业务节奏。客服场景可以激进一些,天级衰减;个人助理场景就得保守,月级甚至更久。另一个是计算开销,每次检索都对所有记忆做一次衰减计算成本很高。我的做法是把衰减机制放在检索前的候选过滤阶段,或者[[重排序]]阶段,而不是暴力计算。还有一个常见失败场景是,如果衰减策略一刀切,可能把刚写入但还没被检索过的有用记忆也删掉了,所以上线前一定要做模拟回放,用历史数据验证召回率。
另外,我最近在关注一个更进阶的方向,让Agent自己学会遗忘。比如用[[Self-RAG]]或者[[Reflexion]]机制,Agent在执行任务时主动判断哪些记忆不再有用,然后生成一个forget操作。这样比固定衰减更灵活,但稳定性是个挑战。
所以整体上,我更倾向于把记忆衰退看作一个系统工程,不是简单的删除,而是让Agent学会动态管理记忆的优先级。核心就是一句话:模拟人类认知的遗忘曲线,该记的记,该忘的忘。