记忆 GC 保留评分(RetentionScore)

wesgine 的记忆 GC 使用 retentionScore 加权评分来决定淘汰优先级,而非简单的 LRU。


评分公式

retentionScore = timeDecay × W_time
               + recallWeight × W_recall
               + trustWeight × W_trust
               + kindWeight × W_kind

各因子范围 [0, 1],权重之和 = 1。


因子详解

timeDecay(时间衰减)

基于 accessed_at 的指数衰减。最近被访问的条目衰减慢,长期未访问的衰减快。

recallWeight(召回频率)

基于 recall_count 的对数权重。被频繁召回的条目得分高。

trustWeight(信任权重)

基于 Trust 等级的静态映射:

Trust权重
TrustSystem1.0
TrustExplicit0.8
TrustMulti0.6
TrustInferred0.4
TrustUnknown0.2

kindWeight(类型权重)

不同 Kind 有不同的 GC 保护力度:


GC 豁免类型

以下 Kind 完全免疫 GC 淘汰:

豁免条目仍计入配额,但不参与 retentionScore 排序。


淘汰流程

定时触发 GC
    ↓
查询非豁免条目(按 retentionScore 升序)
    ↓
score 最低的条目优先淘汰
    ↓
每批 N 条(节流),避免数据库压力
    ↓
QuotaSink.RecordMemoryDelta(-N) 更新配额

与 TTL 的关系

TTL 是硬过期(到期直接删除),retentionScore 是软排序(超配额时低分先淘汰)。两者互补:


INV-MEM-26

GC runMaxEntries 使用 recall-frequency weighted 淘汰,不是纯 LRU。


相关文档