记忆系统
wesgine 的记忆系统让 AI Agent 能够跨会话保留和召回信息,支持七层分层模型。
七层模型
层定义
| 层 | 名称 | 说明 | 持久性 |
|---|---|---|---|
| L1 | environment | 宿主环境信息 | 引擎感知 |
| L2 | consensus | 部门/团队共识 | 跨 actor 共享 |
| L3 | about_me | 关于用户的偏好 | per-actor |
| L4 | agent_memory | 角色记忆 | per-agent per-actor |
| — | session | 会话记忆 | 会话内 |
| — | working | 工作缓存 | 临时 |
| — | unknown | 未分类 | 兜底 |
层特性
| 层 | 可写 | 需要 actor |
|---|---|---|
| environment | 否(引擎产出) | 否 |
| consensus | 是(需 admin) | 否 |
| about_me | 是 | 是 |
| agent_memory | 是 | 是 |
| session | 否(运行时态) | — |
| working | 否(运行时态) | — |
记忆写入
写入工具
AI 通过 memory 工具写入记忆:
memory(action="save", content="用户偏好 Vim 键位", layer="about_me")
写入校验
写入时经过多层校验:
| 校验 | 说明 |
|---|---|
| 威胁扫描 | 检测凭据泄漏(INV-MEM-24) |
| 质量门控 | 拦截系统状态前缀(INV-MEM-31) |
| 去重 | ContentDedupKey 防重复 |
| Actor 校验 | 必须有 actor(INV-MEM-38) |
信任等级
| 等级 | 含义 | 来源 |
|---|---|---|
| System | 系统级 | 环境感知器 |
| Explicit | 显式声明 | 用户指令 |
| Multi | 多方确认 | 集体投票 |
| Inferred | 推断 | AI 观察 |
| Unknown | 未知 | 默认 |
记忆召回
三个注入面
记忆通过三个路径注入 AI 上下文:
| 面 | 时机 | 方式 |
|---|---|---|
| Eager | 每轮 | 系统提示词索引 |
| Lazy | 当轮 | 语义匹配叠加 |
| Cold-start | 新会话首轮 | 历史摘要重放 |
召回质量
自动注入面有质量过滤:
| 过滤 | 说明 |
|---|---|
| Stale | 30 天零召回标记过期 |
| Conflicted | 被新条目否定的旧条目 |
| RecallQualityOK | 统一质量判断单点 |
显式检索
memory(action="search") 不受质量过滤限制——显式检索回答"我存过什么"。
Actor 边界
隔离模型
记忆按 actor 隔离:
| 层 | actor 语义 |
|---|---|
| L1/L2 | 无主(全 Cell 共享) |
| L3/L4 | 有主(per-actor) |
判据单点
| 操作 | 判据 |
|---|---|
| 读 | memory.ActorVisible |
| 写 | saveCore 的 RequireActor |
| 删 | DeleteAs(id, actor) |
记忆管理 API
列表
GET /cells/{id}/memory?layer=about_me&actor=alice&limit=20
计数
GET /cells/{id}/memory/counts?actor=alice
返回全部七层的计数(含 0)。
搜索
POST /cells/{id}/memory/search
{
"query": "编辑器偏好",
"layer": "about_me"
}
写入
POST /cells/{id}/memory
{
"content": "偏好暗色主题",
"layer": "about_me"
}
删除
DELETE /cells/{id}/memory/{memoryId}
清空层
DELETE /cells/{id}/memory/layer?layer=about_me&actor=alice
GC 与维护
自动 GC
GC 使用 recall-frequency weighted 淘汰(RetentionScore),不是纯 LRU。
Digest
定期运行语义去重和压缩:
| 操作 | 说明 |
|---|---|
| 去重 | 合并相似条目 |
| 冲突检测 | 标记被否定的旧条目 |
| 过期标记 | 30 天零召回的标记 stale |
| 取代检测 | 新条目显式否定旧条目 |
注意事项
- 层是封闭域,共七个值
- 消费方不推导层,直接使用引擎返回的
layer字段 - actor 是一等字段,不是 metadata 键
- 写入必须带 actor(私有层)
- 显式检索不受质量过滤限制
- GC 用 RetentionScore 不是纯 LRU