Agent Memory System 该怎么设计:共享经验、本地记忆、Gateway API 和适配边界
这篇不只介绍 Agent Memory System 是什么,而是拆它为什么要区分共享经验和本地记忆,为什么要有 Gateway API、经验编码、ACL 和适配器层,以及它和 OpenClaw 官方记忆系统更合理的分工。
Find related content
Search the site for tools, terms, comparison pages, or related troubleshooting notes without going back to the blog index.
Main answer
更稳的跨 Agent 记忆系统不是一层大而全的存储,而是把共享经验、本地记忆、访问控制、适配器和工作流接入边界拆清楚,让不同 Agent 通过统一接口读写受控记忆。
Who should read this
适合想真正设计多 Agent 共享记忆系统,而不是只想存一堆向量或聊天历史的开发者和系统搭建者。
Key check
从仓库里的设计文档可以看出,这个项目已经考虑了共享表结构、ACL、Agent 注册、Gateway API、OpenClaw 兼容和 Claude Code / Codex 适配,不是单点脚本。
Next step
如果你更关心怎么把这套设计变成可跑的项目,下一步看部署实战篇会更合适。
你将学到
- + 跨 Agent 记忆系统为什么要做层次拆分
- + Gateway API 在这类系统里的实际角色
- + 为什么 ACL、Agent 注册和共享表结构不是可有可无
- + 和 OpenClaw 官方记忆系统怎样分工更现实
Agent Memory System 该怎么设计
如果我们把 Agent Memory System 只理解成“把记忆存进数据库”,那它的价值就会被低估很多。
这类项目真正难的地方,不在于存储本身,而在于四件事:
- 什么内容该共享
- 什么内容只该本地保留
- 不同 Agent 怎么接入
- 出问题时怎么治理
从这个仓库的设计文档来看,它最值得看的并不是某一个技术点,而是整体拆法。
第一层拆分:共享经验和本地记忆必须分开
这是整个系统里最重要的设计判断。
共享经验层
这层服务的是“跨 Agent 复用”。
更适合放:
- 已验证的方法
- 项目里稳定的规则
- 可被引用的经验总结
本地记忆层
这层服务的是“当前 Agent 的私有上下文”。
更适合放:
- 当前 Agent 的偏好
- 临时工作记忆
- 不适合公开扩散的信息
如果这两层不分开,会有两个直接后果:
- 不该共享的信息被扩散
- 真正有复用价值的经验被临时噪声淹没
第二层拆分:存储层和接入层不能混成一层
仓库文档里一个很好的点,是它不只考虑“数据放哪里”,还考虑“别人怎么来用”。
所以这里至少有两层:
存储层
负责:
- 共享经验表
- 本地记忆表
- 元数据
- 标签、编码、重要度、来源
接入层
负责:
- CLI
- Python SDK
- REST Gateway API
- 给 OpenClaw / Claude Code / Codex 的适配入口
这层拆开之后,系统才会具备真正的可扩展性。
否则每加一个 Agent,都会变成一次重写。
Gateway API 为什么是关键
很多人做多 Agent 系统时,会先写多个脚本分别接不同工具。
这样短期很快,长期很乱。
Agent Memory System 往 Gateway API 方向走,是个比较稳的思路,因为它把这些能力统一了:
- 写入共享记忆
- 搜索共享记忆
- 查询共享经验
- 管理访问权限
- 注册 Agent 身份
这层的价值不是“看起来架构更大”,而是让所有 Agent 对记忆系统说同一种语言。
经验编码规则为什么重要
这个项目不是把经验随意落成一段文本,而是给经验设计了编码格式,例如:
EXP-{DOMAIN}-{TAG}-{SEQ:4}
这意味着共享经验在系统里不是“匿名文本”,而是可编号、可引用、可追踪的对象。
它带来的好处很实在:
- 后续检索结果更容易被引用
- 团队协作时可以直接讨论某条经验
- 删除、覆盖、更新时更容易治理
ACL 和 Agent Registry 为什么不是“高级可选项”
很多初版系统会忽略权限和 Agent 注册,先把功能跑通再说。
这当然可以,但如果目标是跨 Agent 共享,ACL 和 Registry 很快就会从“可选”变成“必需”。
ACL 解决的问题
- 哪个 Agent 能看哪些共享记忆
- 哪些项目级经验不该被全局读取
- 哪些操作允许写,哪些只允许读
Agent Registry 解决的问题
- 谁在访问系统
- 它属于哪类 Agent
- 它具备什么能力
- 它最近是否还活跃
如果没有这两层,所谓“共享”很快就会滑向“混用”。
和 OpenClaw 官方记忆系统怎样分工更现实
我很认同这个项目文档里那种修正后的定位:
不是重新造一个完全替代 OpenClaw 的记忆系统,而是把它当成共享层和接入层的补充。
一个更现实的分工是:
OpenClaw 官方记忆负责
- 本地记忆主能力
- 内建索引和搜索
- Dreaming 等已有记忆机制
- 本地工作空间记忆组织
Agent Memory System 负责
- 跨 Agent 共享层
- Gateway API
- 外部 Agent 适配
- 共享经验编码、治理和访问控制
这个分工的好处是明显的:
- 不和已有能力硬碰硬
- 复用 OpenClaw 已经做好的部分
- 把精力放在“跨 Agent”这个真正新的问题上
从架构角度看,最合理的模块边界
按这个项目的文档,我会把它理解成下面几个核心模块:
-
Shared Experience Store负责沉淀共享经验和元数据。 -
Local Memory Store负责保存本地或作用域内记忆。 -
Gateway API负责统一外部读写入口。 -
Agent Adapter Layer负责让 OpenClaw、Claude Code、Codex 用各自可接受的方式接入。 -
ACL / Registry负责谁能访问什么,以及系统里有哪些 Agent。
这几个模块一旦拆清楚,后续无论是加新 Agent,还是加新检索方式,成本都会小很多。
一个更像工程实现的伪代码
type Visibility = "private" | "shared" | "global";
type SharedMemoryRecord = {
id: string;
content: string;
summary?: string;
visibility: Visibility;
sourceAgent: string;
projectPath?: string;
tags: string[];
importance: number;
};
function storeSharedMemory(input: SharedMemoryRecord, caller: AgentIdentity) {
assertAgentRegistered(caller);
assertWritePermission(caller, input.visibility, input.projectPath);
const normalized = normalizeRecord(input);
const embedding = buildEmbedding(normalized.content);
saveToMemoryStore(normalized, embedding);
updateSearchIndex(normalized);
writeAuditLog(caller, "store", normalized.id);
return normalized.id;
}
function searchSharedMemory(query: string, caller: AgentIdentity) {
assertAgentRegistered(caller);
const scope = buildVisibleScope(caller);
const vectorHits = vectorSearch(query, scope);
const keywordHits = keywordSearch(query, scope);
return rerankMergedHits(vectorHits, keywordHits);
}
这段逻辑里最重要的不是技术选型,而是顺序:
- 先识别调用者
- 再检查可见范围
- 再处理存储和检索
- 最后写审计
这类设计最容易做错的地方
最常见的三个偏差是:
- 只做存储,不做接入边界
- 只做检索,不做可见范围和治理
- 只考虑 OpenClaw,不考虑其它 Agent 以后怎么接进来
短期看这些都不一定立刻出问题。
但只要系统真的开始承载协作,它们都会变成结构性障碍。
如果你要继续往下推进,下一步最该补什么
设计想清楚之后,最合理的下一步不是继续堆概念,而是验证:
- MySQL 初始化和环境变量配置是否顺畅
- CLI / SDK 是否足够稳定
- 第一个接入场景选得对不对
- 从 OpenClaw 到其他 Agent 的接入链是否最小可跑
这也是为什么部署实战篇会比继续谈抽象架构更重要。
延伸阅读
Continue exploring
Use a tool first
If you need to format JSON, XML, YAML, or prompts, start with the online tools.
See implementation projects
If you want to see how these methods enter real builds and experiments, continue with projects.
Get checklists and templates
If you need checklists, resource entries, or SOP starter packs, continue with resources.
Download reusable skills
If you want repeatable judgment, search, and cleanup actions, continue with the skill market.
要点总结
- - 共享层、本地层和适配层不拆开,后续一定会混乱
- - 统一 API 层的意义是让不同 Agent 以同一种方式访问记忆
- - 这类系统必须把可见范围、来源和治理考虑进去
常见问题
为什么不用单个向量库直接解决全部问题?
因为跨 Agent 共享不仅是检索问题,还涉及经验来源、可见范围、版本、适配方式和治理边界。单个向量库很难自然承载这些约束。
Gateway API 的意义是什么?
它让 OpenClaw、Claude Code、Codex 这类不同 Agent 可以用统一入口读写记忆,也把权限、格式和日志控制集中到了同一层。