记忆摘要压缩
wesgine 记忆 Digest 摘要压缩的完整管线。
触发方式
HTTP 按需触发
POST /cells/{id}/memory/digest
权限:cell:admin。
GC 自动调度
runDigest 节流调度:
- 由
GCConfig.DigestInterval控制频率 - 默认与 GC 周期协同
- 避免过于频繁
处理管线
Digest 按 (Namespace, CognitiveOwner) 分区处理,包含以下阶段:
1. 语义去重(dedup)
物理合并语义相同的多条记忆:
- BM25 匹配
- 保留较新、召回频率更高的条目
- 物理删除败者
2. 冲突检测(detectConflicts)
检测内容矛盾的条目对:
- 使用
sharedTokenPairs精确配对 - 无共享 token 不配对
- 无自配对/重复
3. 取代检测(detectSupersession)
检测较新条目是否显式否定较旧条目:
- 否定词整词匹配
- CJK 单字排除
- 标记旧条目
Conflicted=true
4. Stale 标记(markStaleEntries)
标记长期零召回的条目:
- 30+ 天零
accessed_at更新 - 仅 L4 条目
- 从自动注入面排除
5. 晋升
将高频召回的临时条目提升到更持久的层。
分区规则
按认知主体分区
Digest 的所有认知判断都在 (Namespace, CognitiveOwner) 分区内进行。
跨主体禁止
跨认知主体做的不是整合而是不可逆损坏(INV-MEM-42):
- dedup 物理删除败者
- detectConflicts 让两人偏好互消
- combinedRecall 把别人热度累加
全量获取
使用 DrainList 分页至清空,不用 Limit: 10_000 硬编码窗口(INV-MEM-34)。
GC 豁免
Digest 的 stale/conflict 标记跳过 IsGCExempt() 条目——这对 Constraint/Instruction/Environment 是惰性的。
但对 KindCollective 不是——一条已判被取代的部门共识会留在每个 actor 的系统提示词里直到 Cell 消亡。
与 GC 的关系
| 系统 | 职责 | 粒度 |
|---|---|---|
| GC | 物理清理 + 配额回收 | 按 actor 不跨主体 |
| Digest | 语义质量维护 | 按 (Namespace, CognitiveOwner) |
GC 按条目淘汰,Digest 按关系判断。