记忆 Kind 分类
wesgine 记忆系统使用 Kind 字段对条目进行语义分类,它决定了条目的耐久性、GC 行为和自动注入方式。
Kind 枚举
| Kind | 说明 | 耐久性 | 示例 |
|---|---|---|---|
constraint | 行为约束 | 持久 | "回复始终用中文" |
instruction | 操作指令 | 持久 | "代码注释用英文" |
fact | 事实陈述 | 持久 | "公司总部在北京" |
preference | 用户偏好 | 持久 | "偏好简洁回复" |
correction | 纠正反馈 | 持久 | "上次你把 X 搞错了,正确是 Y" |
convention | 项目惯例 | 持久 | "用 tabs 缩进" |
lesson | 经验教训 | 持久 | "处理 CSV 时先检查编码" |
context | 跨会话上下文 | 会话级 | 会话摘要 |
episodic | 情景记忆 | 会话级 | 某次对话中学到的东西 |
collective | 集体共识 | 持久 | 部门规定 |
Kind 与耐久性
Kind 是决定记忆条目是否跨会话可见的唯一依据:
func kindDurability(k Kind) (Durability, error) {
switch k {
case KindConstraint, KindInstruction, KindFact,
KindPreference, KindCorrection, KindConvention,
KindLesson, KindCollective:
return DurablePersistent, nil
case KindContext, KindEpisodic:
return DurableSession, nil
default:
return 0, ErrUnknownKind
}
}
- 持久(Persistent):跨会话可见,所有自动注入面都可携带
- 会话级(Session):仅当前会话内可见
Kind 与 Formation 的区别
| Kind | Formation | |
|---|---|---|
| 回答 | 这条记忆是什么 | 这条记忆怎么来的 |
| 决定 | 耐久性、GC 行为、自动注入 | 仅用于审计和统计 |
| 是否必填 | 是(saveCore 拒收空 Kind) | 否 |
Kind 与 Trust 的默认映射
当写入时 Trust 为零值(Go 零值 = TrustSystem = 最高信任),saveCore 会按 Kind 回退到合理默认值:
| Kind | 默认 Trust |
|---|---|
environment | TrustSystem(T0) |
constraint、instruction | TrustExplicit(T1) |
fact、collective | TrustMulti(T2) |
preference、correction、convention、lesson | TrustInferred(T3) |
| 其他 | TrustUnknown(T4) |
Kind 与 GC
constraint、instruction、environment→ GC 豁免(不被retentionScore淘汰)- 其余 Kind → 参与 GC 淘汰排序
- 所有 Kind 都计入配额
已删除的 Kind
| 已删除 Kind | 原因 |
|---|---|
experience | 把"运行快照"与"教训"混在一个名字下,拆成 lesson(教训)和 wes_run_traces(快照) |
canvas | 声明之外零命中 |
todo | 声明之外零命中 |
零值拒写
空 Kind → ErrKindRequired。Kind 是三张表(memories、dedup、注入索引)的键,允许空值会导致无法定位的幽灵条目。
相关文档
- 记忆 Kind 与耐久性 →
memory-kind-durability.md - 记忆信任等级 →
memory-trust-levels.md - 记忆 Formation 参考 →
memory-formation-reference.md - 记忆 GC 豁免 →
memory-gc-exempt.md