记忆 GC 与 Digest
wesgine 记忆垃圾回收与语义摘要:淘汰策略、冲突检测、陈旧标记与晋升。
GC 概览
GC 定期清理低价值记忆条目,释放存储配额。
触发方式
| 方式 | 说明 |
|---|---|
| 自动 | GC 定时循环(GCConfig.Interval) |
| 手动 | POST /memory/gc |
淘汰策略(INV-MEM-26)
runMaxEntries 使用 recall-frequency weighted 淘汰。
不是纯 LRU——RetentionScore 综合考虑:
| 因子 | 权重 |
|---|---|
accessed_at 衰减 | 时间越久分越低 |
recall_count | 被召回次数越多分越高 |
created_at | 创建时间 |
trust 级别 | 高信任级别加分 |
GC 豁免(IsGCExempt)
以下 Kind 豁免 GC:
KindConstraint(用户约束)KindInstruction(指令)KindEnvironment(环境信息)
Digest 语义摘要
Digest 是定期运行的语义维护任务。
触发方式
| 方式 | 说明 |
|---|---|
| GC 调度 | DigestInterval 节流 |
| 手动 | POST /memory/digest |
四项操作
1. 去重(dedup)
BM25 语义去重,物理删除败者。
按 (Namespace, CognitiveOwner) 分区——不跨认知主体(INV-MEM-42)。
2. 冲突检测(detectSupersession / INV-MEM-30)
检测"较新条目显式否定较旧条目"。
标记旧条目 Conflicted=true → 从全部自动注入面排除。
否定判据必须是整词——negationMarkers 不含裸字 不(INV-MEM-30)。
3. 陈旧标记(markStaleEntries / INV-MEM-29)
30+ 天零召回的 L4 条目标记 stale。
从全部自动注入面排除;显式检索路径不受影响。
4. 晋升
高频召回的条目可被晋升到更高信任级别。
RecallQualityOK 单点(INV-MEM-50)
所有自动注入面(9 个 arm)共用此判据:
| 条件 | 结果 |
|---|---|
Conflicted=true | 排除 |
| stale | 排除 |
IsGCExempt() | 惰性通过 |
显式检索故意不设此门。
accessed_at 下界(INV-MEM-51)
accessed_at 的下界是 created_at。
saveCore 落盘前抬平,存量由 DDL 幂等修。
零值不是中性状态——它是该字段最坏的取值。
CognitiveOwner 分区
Digest 的跨条目认知判断按 (Namespace, CognitiveOwner) 分区。
跨主体做的不是整合而是不可逆损坏(INV-MEM-42):
dedup物理删除败者detectConflicts让两人的偏好互相消音combinedRecall把别人的热度累加
全量分页(INV-MEM-34)
Digest 读写一律分页至清空(DrainList)。
不用硬编码 Limit: 10000。
相关文档
- Memory 层模型 →
memory-layer-model.md - 显式搜索 →
memory-explicit-search.md - 上下文压缩 →
context-compression.md