记忆核心
记忆核心(HMC)是每个人格库里的一组表和一个引擎:编码、检索、巩固。它和一套更早的记忆表并行:两边都写,切换按证据一步步往前走,出了隐私问题立刻退回。
三件事
- 编码(
HMCEngine.encode):去重、近似去重合并证据 → 找说的是同一件事的现存记忆 → 判断关系(更正 / 状态变了 / 矛盾 / 弱来源推不翻强来源)→ 旧行换真相标记、记一条关系边(历史不删)→ 归到一段经历 → 写行、主体、实体、来源。值不值得记由encoding.py的显著性打分决定,不调模型。 - 检索(
recall):隐私、空间、真相先在 SQL 里过滤(不在候选里就等于不存在),几路各取一批候选,统一重排,按层配额编成一包。 - 巩固(
consolidation.py):睡着时跑、醒着隔一阵也跑,九步,每步一个事务、可以重跑;每次记进hmc_runs。
档位和切换
每个人格各自一个档位,存在自己库里:
LEGACY:只用旧的记忆表(HMC 关掉时)。SHADOW:回复用旧的;同一个线索 HMC 在后台也检索一遍,逐条对比记进hmc_shadow。PRIMARY:回复用 HMC;出错、超时用旧的兜底,每次兜底都计数、看得到。AUTHORITATIVE:正常路径不再读旧的;旧的照样写(双写),回滚窗口内切回去数据是新的。
[hmc].mode = "auto"(默认)时按证据往前走:样本够(影子至少 40 次、主用至少 100 次)、零隐私失败、输给旧的比例不超过 15%、兜底不超过 2%。任何一次隐私失败(含跨人格)立刻退回 SHADOW。 写成别的值就固定在那一档。
删除和墓碑
删一条记忆(后台的「删」、人格自己遗忘)只留墓碑:内容、主体、来源都清掉,留一个「这里删过」的记号;启动对账时按墓碑把旧表里的同一条也擦掉。
对应的代码
src/aeria/hmc/:engine.py(编码、检索)、encoding.py(值不值得记)、retrieval.py(多路召回、隐私门、配额)、strength.py、conflict.py、consolidation.py、service.py(档位、双写、影子对比、自动切换)、schema.py(表结构)、migration.py。- 配置:
[hmc](mode、consolidation_enabled、model_review_enabled、min_shadow_samples、min_primary_samples、max_legacy_wins_ratio、max_fallback_ratio、rollback_window_days)。 - 后台:「记忆管理 → 记忆核心」;接口
/api/hmc/…。 - 测试:
tests/test_4_0_hmc.py、tests/test_4_0_r1_hmc.py。
没做到的
- 旧的记忆表还在双写,什么时候退役没定。
- 显著性打分是手写的,没用真实的「后来用上了没有」校准过。