记忆命名空间寻址
wesgine 的记忆系统使用命名空间(Namespace)对条目进行逻辑分区,实现 Agent 级隔离和话题组织。
命名空间层次
Cell (物理隔离,表内无 cell_id)
└── Scope (存储分区)
└── Namespace (逻辑分区)
└── Actor (归属)
└── Key (去重键)
命名空间类型
| 函数 | 格式 | 用途 |
|---|---|---|
AgentNS(agentID) | agent://{agentID} | Agent 角色记忆(L4) |
SessionNS(sessionID) | session://{sessionID} | 会话临时记忆 |
UserNS(actor) | u:{actor} | 个人记忆(L3 about_me) |
CellNS() | 曾用于迁移,已移除 |
命名空间寻址规则
Agent 命名空间
- 同一 Cell 内所有 Actor 共用 Agent 命名空间
agent://legal-agent下的记忆对所有访问该 Agent 的 Actor 可见- Agent 命名空间内的
shared通道允许跨 Agent 共享知识
Session 命名空间
session://s-abc123只在该会话内可见- 会话结束后条目不自动删除,但不再被自动注入
ColdStartOverlay可跨会话读取这些条目(如果配置了CrossSessionDays)
用户命名空间
u:alice存储 Alice 的个人偏好- 不同 Actor 的用户命名空间物理隔离
行身份组成
记忆条目的唯一性由四元组决定:
(scope, namespace, actor, key)
scope+namespace:定位存储分区actor:归属(INV-MEM-48 后为独立列)key:去重键(显式提供或ContentDedupKey自动生成)
同一四元组的写入触发 upsert(更新而非新增)。
反模式
| 禁止 | 正确做法 |
|---|---|
把 actor 编进 namespace 前缀(u:alice/agent://X) | actor 是独立列(INV-MEM-48) |
AgentNS("") — 空字符串 agentID | 引擎拒绝(ErrLayerNamespaceRequired) |
用 RawNS 绕过类型化函数 | 使用 AgentNS / SessionNS / UserNS |
在 namespace 里编码业务语义(如 agent://legal-2024Q3) | namespace 只做路由,业务语义放 metadata |
相关文档
- 记忆层模型 →
memory-layer-overview.md - Actor 字段提列 →
memory-actor-promotion.md - 去重键 →
memory-dedup-key.md - 写入管线 →
memory-save-pipeline.md