Reed's News
← 返回精选

Agent记忆的文件格式

AI 69 ingve 2026/8/31 2153 字 原文 ↗

Memoryfields:大幅简化智能体记忆管理的方案

《黑客帝国》中尼奥学习功夫的画面

许多模型基准测试都从空白上下文窗口开始https://simonwillison.net/tags/pelican-riding-a-bicycle/,就像人工智能的"白板状态"。从保证测试公平性的角度看,这种设定有一定道理。

但真实场景中的智能体绝不应从零开始。它们启动时,应尽可能获取所有相关信息——你的AI智能体,理应带着记忆登场。

现有智能体记忆系统为何失效

问题在于,当前多数智能体记忆系统的表现都不尽如人意。目前主流的记忆系统大致分为三类,每一类都有各自的缺陷:

第一类是绑定特定框架的系统,通常由框架开发方推出。这些机构迫切希望从竞争激烈的"API业务"转向利润更高的"平台业务"。这类系统主要从对话历史中挖掘信息,导致记忆内容大多围绕用户展开,而对智能体更有用的外部世界信息却被忽略。

第二类系统设计过于复杂。我了解到某知名系统,仅为判断信息是否值得存储,就需要pgvector、Neo4j图数据库,甚至单独部署一个大语言模型(LLM)。这种复杂度不仅增加了运维难度,还会让智能体陷入困惑——我稍后会解释原因。此外,这类"大型系统"无法跟上前沿模型的迭代速度。

第三类是"高度现代主义"风格的系统,试图构建一种理想化、理性的记忆模式。这类系统往往依赖图谱,有时还会加入逻辑命题,但会系统性地剥离信息的上下文,导致记忆变得孤立无意义。毕竟,一份简单的"提炼事实清单"能有多大用处呢?

这些系统的共性在于,都将记忆视为一个流程。但对模型而言,记忆更适合被定义为数据。

记忆应是一种数据格式,而非多阶段流水线

布鲁克斯https://martinfowler.com/bliki/MythicalManMonth.html曾说:

给我看流程图却藏起数据表,我依然会一头雾水;给我看数据表,流程图往往不言自明。

基于此,我们设计了"memoryfield"可移植记忆文件格式:

my-memories.memoryfield.zip
├── carbon-fibre-woks.md
├── finnish-bureaucracy-tips.md
├── [... 更多md文件...]
├── wec-2026-season-notes.md
└── nomic-embed-text-v1.5.sqlite3

一个memoryfield包含:

  • Markdown格式的"记忆页"
  • (可选)YAML头部元信息
  • (可选)用于语义搜索的SQLite向量索引

智能体与文件交互的效率最高,具体原因如下:

设计决策1:使用完整文本,而非片段或"事实条目"

检索增强生成(RAG)流水线往往复杂,核心原因是要让AI智能体读懂大量人类撰写的既有文档——比如那些难以直接解析的大型PDF。

但智能体的记忆并非复杂的遗留文档。记忆形成时,智能体可以直接用自己擅长的格式(即Markdown)完整记录内容,无需进行拆分、增强、二次总结等机械处理。

一份memoryfield记忆页的示例如下:

---
title: Carbon Fibre Woks
created: '2026-03-01T09:00:00Z'
updated: '2026-08-22T14:30:00Z'
uuid: 6aa615f0-486f-48a7-a210-ba4f5ff18c8b
summary: 碳纤维厨具的热性能
---
碳纤维炒锅导热均匀,但……

需要说明的是,记忆页的长度需适配向量嵌入模型,因此有一个软限制:约8KB(约2000token)。

但这一限制实际是有益的:8000字符约等于1300个汉字,相当于一篇中等长度的杂志文章。即便没有技术限制,这也应是合理的篇幅管控——若需补充更多细节,只需新增记忆页即可,智能体对此完全胜任。

设计决策2:语义跳转,而非图谱遍历

此前有一项关键技术参考是Karpathy维基https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f,它基于Roam或Obsidian的超链接Markdown文件模式,让智能体通过"遍历知识图谱"查找相关页面。

但实际应用中,让AI智能体遍历知识图谱不仅速度慢、可靠性低,还会让智能体感到困惑。

Obsidian知识图谱截图

遍历速度慢,是因为模型需要频繁暂停,通过串行工具调用逐页读取内容。

智能体遍历知识图谱的大致流程:

  1. 读取维基首页【工具调用】——查找相关链接
  2. 读取链接页面【工具调用】——查找相关链接
  3. 判断是否已获取足够信息——若未获取,返回步骤2

如果目标信息位于图谱的第N层,就需要N+1次工具调用才能获取。这一过程十分缓慢:价值数十亿(甚至数万亿)美元的大语言模型,每次工具调用都要等待2-3秒。此外,这种模式对深度嵌套的知识图谱极不友好,完全违背了图谱设计的初衷。

知识图谱的可靠性也存疑。智能体只能通过链接文本或页面标题判断内容是否相关,这就要求智能体像1990年代的SEO优化那样,精心打磨页面元数据,确保标题、链接文本简洁准确。但这种做法会抑制内容的发散性,无法记录那些看似无关却十分有用的隐性信息。

实际使用中,Karpathy维基经常会遗漏相关信息,只因页面标题或链接文本不够"吸引"搜索的智能体。

此外,图谱遍历还会让智能体困惑:在遍历过程中,它们不得不浏览大量无关信息(首页往往是重灾区),这些冗余内容会占据模型的上下文窗口,降低输出质量,甚至让智能体执着于无关细节。

而通过语义搜索,这些问题都能解决:智能体可以直接跳转到所有相关页面(基于内容而非元数据),并并行读取所有相关内容——当前绝大多数模型都具备这种能力。在memoryfield中,最多只需2次工具调用(1. 语义搜索;2. 并行读取),既能精准找到相关内容,又能最大限度减少无关输入token。

设计决策3:更多模型能力,更少机械流程

"高机制"记忆系统(包含大量定制API或数据库)的问题在于,智能体必须在复杂的接口中导航才能完成任务。如果接口规模大,就需要将大量openapi.json加载到上下文窗口;如果接口规模小,又会限制功能。即便接口设计得恰到好处,也难免出现API无法满足需求的情况——想必你也曾有过使用他人开发的API,却发现对方完全没考虑到你的需求的经历,这种体验并不好。

memoryfield作为一种"低机制"系统(只是一种文件格式),给了智能体更大的自由,让它们可以自主探索访问模式。虽然我们提供了一些(希望有用的)工具https://github.com/calpaterson/memoryfield-tool/,但智能体完全可以采用任何适合自己的方式。比如用`perl`在整个记忆库中批量查找替换,或是在记忆中嵌入CSV文件并用SQLite查询——这些都是我亲眼见过的真实案例。

"低机制"还意味着memoryfield能跟上前沿模型的迭代速度。随着模型能力提升,智能体能想出更多创新用法。近期的一个突破是,模型意外地擅长处理bash命令,同时也精通Markdown和SQLite。memoryfield能在真实智能体中高效运行,原因之一就是智能体可以从训练数据中理解其逻辑(在读取记忆前,训练数据是它们唯一的知识来源),这是"记忆流水线"中孤立的大语言模型调用无法做到的。

模型越强大,就越能巧妙地撰写记忆。而那些"外挂式"记忆系统则做不到这一点——固定的API端点能玩出的花样终究有限。memoryfield会随模型能力的提升而进化。

设计决策4:开放格式、可交互、传输无关

随着记忆库不断积累,这些内容会变得愈发珍贵——它们是智能体通过学习和实践积累的宝贵经验与事实。你肯定不希望被绑定到特定框架、模型或智能体上。

我撰写了一份RFC风格的文件格式规范https://github.com/calpaterson/memoryfield-spec/blob/main/SPEC.md,主要是为了消除歧义,避免依赖特定的嵌入模型。

你完全可以根据规范自行开发所需工具,不过我也提供了配套的技能组件https://github.com/calpaterson/memoryfield-skill和优化过的命令行工具https://github.com/calpaterson/memoryfield-tool。

memoryfield的标准归档格式是Zip压缩包,这是为了让数据交换尽可能简单。但规范也支持多种传输方式:本地文件、Amazon S3、GitHub或HTTP服务——任何支持文件存储的系统都可以。我个人混合使用多种方式:用Syncthing管理个人记忆库,用S3存储与他人共享的内容。

快速上手

你可以让智能体下载SPEC.md并自行实现,但最简单的方式是使用我提供的工具:

# 依赖:ollama、uv和npx(随npm安装)
#
# 1. 拉取嵌入模型:
ollama pull nomic-embed-text
# 2. 安装CLI工具:
uv tool install git+https://github.com/calpaterson/memoryfield-tool
# 3. 安装技能组件:
npx skills add calpaterson/memoryfield-skill -g -y

后续步骤你的智能体将协助完成。

如果你想试用演示用的记忆库,可以下载soapstones.memoryfield.zip。Soapstones是我之前开发的一个智能体记忆项目,这份精选导出的记忆库包含大量实用内容,比如智能体如何访问Reddit、使用Jina Reader、通过MediaWiki API高效读取维基百科等。

常见疑问解答

这不就是某种RAG吗?

如今"RAG"的定义极其宽泛——只要智能体检索数据,就会被称为"RAG"。从这个角度看,memoryfield确实属于RAG的一种。

但几乎所有智能体都会检索数据,比如网页搜索。而且memoryfield没有采用通常与"RAG系统"相关的大多数技术:无需内容拆分、无需重排序、无需混合搜索。

更重要的是,memoryfield支持智能体写入记忆,而传统RAG系统往往只关注读取。

nomic-embed-text-v1.5已经两年多了,没有更新更好的模型吗?

嵌入模型的规模和迭代速度都远不及前沿大语言模型。nomic-embed-text-v1.5在轻量化与性能之间达到了很好的平衡:体积仅270MB,无需GPU即可快速运行,是目前广泛使用且备受推荐的默认嵌入模型。

当然,规范也支持使用其他嵌入模型。

如何判断哪些内容值得存入记忆?怎样避免记忆库被无用信息填满?

这是记忆系统常见的顾虑,但对memoryfield来说并不成立。无关内容根本不会被语义搜索检索到。虽然无用记忆会占用存储空间,你可能需要定期清理,但它们不会对智能体的运行造成任何影响。

建议:大胆添加记忆内容。不过有一个小技巧:最好在记忆中包含引用,尤其是URL链接。这有助于后续强化记忆内容,也方便智能体对过时或存疑的信息进行事实核查。

安全性如何?遇到"忽略以上指令"这类攻击怎么办?

绝对不要与不信任的方共享你的上下文窗口,包括通过记忆共享。

规范采用静态Zip格式的原因之一,就是方便你手动审查并通过sha256sum校验从他人处获取的记忆库。

目前仍没有办法让智能体区分"良性提示"与"恶意提示"。

数据优先

既然流程已经不言自明,我不妨明确列出:

  1. 用Markdown撰写记忆
  2. 生成向量嵌入并保存到SQLite
  3. 通过语义搜索找回记忆

memoryfield作为记忆系统的独特之处在于,它定义的是数据结构而非流程。没有提取流水线、没有后台处理服务、没有可插拔组件——向量索引只是可删除的缓存,而非系统核心。

记忆就是数据!智能体与数据之间的固定机制越少,智能体的表现就越好。

联系方式等

说明

如果你有时间,不妨查看一下规范文档。任何来自人类的反馈都十分宝贵。

我的安装步骤中用到了四种不同的包管理器(Ollama、uv、NPM、Vercel Skills),想必有更优的解决方案。欢迎将你的想法寄到常规联系方式。