记忆验证与诊断
wesgine 记忆条目的写入后可召回性诊断、自动注入面谓词与验证端点。
验证端点(INV-MEM-25)
POST /cells/{id}/memory/validate
请求
{
"entry_id": "mem-abc123"
}
响应
{
"accessible": true,
"recallable": true,
"reasons": []
}
三个维度
| 维度 | 说明 |
|---|---|
Accessible | 条目是否存在且属于当前 actor |
Recallable | 条目是否会出现在自动注入面 |
reasons | 不可召回的具体原因 |
三个自动注入面(INV-MEM-50)
9 个 arm
| 面 | arm 数 | 门控对 |
|---|---|---|
| Eager(系统提示词索引) | 5 | EagerCarriesRow + ActorVisible |
| Lazy(当轮 overlay) | 3 | LazyCarriesRow + EntryVisible |
| Cold-start(跨会话摘要) | 1 | ColdStartCarriesRow + ActorVisible |
门控成对
每个 arm 问两半:
- 可见性:
ActorVisible或EntryVisible - 质量:
RecallQualityOK
RecallQualityOK 单点
所有自动注入面共用:
| 条件 | 结果 |
|---|---|
Conflicted=true | 排除 |
| stale(30+ 天零召回) | 排除 |
IsGCExempt() | 惰性通过 |
显式检索不设此门
memory(search) 回答"我存过什么"。
对指名索取者隐藏被取代的行 = 把错答换成缺答。
记忆中心必须显示冲突,否则无人能解决。
Validate 的三处漂移(已修复)
旧问题
- 扁平 kind 表套所有 scope(无差别收
KindContext) - 无条件
EntryVisible套到 eager 面 - 完全没有质量子句
修复
谓词按 arm 不按 scope:
- Eager 用
EagerCarriesRow+ActorVisible - Lazy 用
LazyCarriesRow+EntryVisible - Cold-start 用
ColdStartCarriesRow+ActorVisible - 三者 OR
store 看不见的门
KB arm
语料绑定在 agent config 上——store 无法判断。
报成条件而非答案。
Cold-start arm
需要 Cell 设 CrossSessionDays > 0(默认 0 = 整面关闭)。
行未过期、Key 不是正在开的会话——两者都不是行的属性。
裸答"可召回"会在整面关闭的 Cell 上被读成"这条会注入"。
测试必须差分
验证方法:
- 存进真 store
- 跑三个 Build(Eager / Lazy / Cold-start)
- 断言
Recallable等于"文本出现在输出里"
矩阵必须含 KindContext——那是 cold-start 独家携带的 kind。
删除的 Kind
| Kind | 处置 |
|---|---|
KindExperience | 删除(快照写入路径整条删掉) |
canvas | 删除(声明之外零命中) |
todo | 删除(声明之外零命中) |
存量按 DEV-1 清库。
相关文档
- Memory 层模型 →
memory-layer-model.md - GC 与 Digest →
memory-gc-digest.md - 上下文压缩 →
context-compression.md - 写入管线 →
memory-write-pipeline.md