AN-07 L2 符合性等级: Memory 概念簇: 知识
Agent Memory 智能体记忆
笔记是你能读能改的真相,索引只是可以丢弃的缓存。
Agent Memory(智能体记忆) = 你能读、能改的笔记 + 可以随时丢弃的索引。每条笔记都引用它的来源;索引(全文、向量、图、轮廓)只是笔记的派生物;后台维护作业只提议修改,绝不改写原始日志。
要解决的问题
记忆框架把记忆放进不透明的数据库:无法检查、对比、迁移、纠正,也难以可靠删除;索引和嵌入模型被绑死。而记忆本身就是攻击面:2026 年的一项研究里,持久记忆投毒在两个智能体上的平均攻击成功率达 50.46%;另一项研究用一封精心构造的邮件,在文件系统和向量两种记忆后端上都得了手。
同时,“哪种记忆架构最好”远没有定论:基准互相矛盾。一份不押注任何检索算法的设计,才扛得住三年的变化。
工作方式
- 笔记是真相。 Markdown 加 YAML frontmatter:
kind(情景、语义、程序、偏好)、subject、sources、confidence、valid_from、valid_to、supersedes、origin、reviewed。 - 更新而非覆盖。 新事实
supersedes旧事实;区分有效时间与记录时间,因为事实会变,而常见基准几乎不测这一点。 - 索引是缓存。 BM25(如 SQLite FTS5)、向量(可以多套并存)、可选的图;每个派生物带配方与输入。换嵌入模型就是后台重算,旧索引保留到新索引的黄金召回测试达标为止。
- 两类派生。 确定性的(切块、BM25、固定模型的嵌入)可复现;生成式的(LLM 摘要、抽取出的事实)只能“再生成并比对”,因此标记
generated: true,并且从不作为唯一副本。 - 写入路径。
nas_remember把笔记(含来源)写到当前分支;污点随之继承。来自external污点会话的笔记进入隔离区,标记为未审阅:可以被召回,但不自动加载,也不会进入MEMORY.md。 - 读取路径。
nas_recall= 搜索、候选、预算视图加证据指针,并显示笔记的来源与审阅状态。 - 维护作业(夜间或空闲时):去重、把情景整合成语义事实、标记矛盾、让过期的事实失效、重建索引。作业在分支上产出提案,由人或智能体审阅;绝不删除原始日志;度量“后悔率”(被回滚的提案比例)。
- 黄金召回测试。 每个 Home 一组“问题、期望笔记”,换模型或索引器时自动回归。
从小处开始
memory/notes/*.md加 frontmatter;用 SQLite FTS5 做检索。- 在 CI 里跑十条黄金问题。
- 向量索引和维护作业都可以以后再加;先把“来源”和“已审阅才自动加载”做对。
接口草图
仅作示意。字段名在规范 v0.3 之前可能调整。
---
id: mem_4kq2
kind: semantic
subject: customer/acme
valid_from: 2026-10-02
valid_to: null
confidence: 0.8
origin: agent
reviewed: true
sources:
- nas://home-box/agents/cleo/journal/2026-10-02.md@9f2c1de#L12-L18
supersedes: [mem_1xa9]
---
Acme renewed for 24 months; the champion moved from Dana to Luis. 规范的要求
- 笔记必须能脱离 Memory 层被读取(它们是 Store 里的普通文件)。
- 每个派生物必须带配方与输入;索引必须可丢弃并可重建。
- 由受污染会话写入的笔记,在被审阅之前不得自动加载。
- 新事实必须以
supersedes取代旧事实,而不是覆盖。 - 维护作业必须在分支上工作并只提议;不得删除原始日志。
- 每个 Home 应当带黄金召回测试,在模型或索引器变化时运行。
借鉴与区别
下面这些都是现成的思路,OpenClaw 的记忆架构已经做了来源标签、按层隔离和整合时的污点传播。真正新的部分: OpenClaw 在单个运行时内部做;我们提议在共享的存储里做,让任何运行时都受益;并把索引降为可丢弃的缓存,使检索算法可以更换而记忆不丢。
- Letta Context Repositories
- Letta: is a filesystem all you need?
- OpenClaw memory architecture
- Long-term memory security survey
- Graphiti
- MemGPT
坦诚的局限
- 生成式派生物不可能逐位重现。
- 维护作业可能把错误“固化”成事实,所以它只提议,不直接改。
- 哪种记忆架构最好,目前没有定论。
开放问题
- 何时由智能体自己写,何时交给维护作业?
- 跨模型版本的回归标准是什么?
常见问题
为什么用文件,不用向量数据库?
文件是你能读、能改、能 diff、能带走的真相;向量索引是它的派生缓存,可以并存多套、随时重建。Letta 的基准说明,只给智能体 grep 和文件工具就有竞争力,但各家基准互相矛盾,所以设计不押注某一种检索算法。
怎样防止记忆被投毒?
无法保证绝不被写入,但可以限制后果:外部来源的内容带着 external 标签;受污染会话写的笔记进入隔离区,不自动加载;合并要经过审阅;出了问题可以顺着来源链找到受影响的笔记并回滚。
换嵌入模型要迁移记忆吗?
不需要。笔记不变,只是在后台用新的配方重算索引;旧索引保留到新索引的黄金召回测试达标为止。
相关概念
- Budgeted Reads (预算化读取) 同一个文件可以用轮廓、章节、行范围或全文来读,按预算降级。
- Cascade Forget (级联遗忘) 沿血缘删除派生物,按保留类处理历史,并如实报告做不到的部分。
- Trust Labels (信任标签) 来源与敏感度两个小标签,加上会话污点,强制执行 Rule of Two。
引用本页
为读者、搜索引擎和智能体提供稳定的网址与建议的引用格式。
- 建议引用格式
- Agent NAS project. “Agent Memory (智能体记忆).” agentnas.com, 2026-11-11. https://agentnas.com/zh-cn/concepts/agent-memory/