<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Agent记忆 on Kalend's Blog</title><link>https://blog.kalend.top/tags/agent%E8%AE%B0%E5%BF%86/</link><description>Recent content in Agent记忆 on Kalend's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Fri, 18 Sep 2026 08:45:00 +0800</lastBuildDate><atom:link href="https://blog.kalend.top/tags/agent%E8%AE%B0%E5%BF%86/index.xml" rel="self" type="application/rss+xml"/><item><title>别再用向量数据库存Agent记忆了：一个ZIP文件就够了</title><link>https://blog.kalend.top/2026/09/18/2026-09-18-wax-agent-memory-single-file.html/</link><pubDate>Fri, 18 Sep 2026 08:45:00 +0800</pubDate><guid>https://blog.kalend.top/2026/09/18/2026-09-18-wax-agent-memory-single-file.html/</guid><description>
 &lt;blockquote&gt;
 &lt;p&gt;给 AI Agent 配记忆，很多人的第一反应是：起一个向量数据库服务，再接一个 Embedding API。其实一个几百 KB 的本地文件就能干这件事，还快得多。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="先说结论"&gt;先说结论
&lt;/h2&gt;&lt;p&gt;Agent 记忆这个场景，托管向量数据库是杀鸡用牛刀。&lt;/p&gt;
&lt;p&gt;一个叫 &lt;a class="link" href="https://github.com/christopherkarani/Wax" target="_blank" rel="noopener"
 &gt;Wax&lt;/a&gt; 的开源项目证明：一个本地 &lt;code&gt;.wax&lt;/code&gt; 文件（标题里说的&amp;quot;ZIP 文件&amp;quot;就是这个意思，它实际上是个自定义格式的单文件），就能装下文本搜索 + 向量检索全套能力。&lt;/p&gt;
&lt;p&gt;实测数据：混合召回 p95 延迟 &lt;strong&gt;6.1 毫秒&lt;/strong&gt;。你调一次云端向量库 API，网络往返都不止这个数。&lt;/p&gt;
&lt;p&gt;Wax 目前 797 Star、Apache 2.0 协议、纯 Swift 写的，跑在 Apple Silicon 上。Claude Code、Codex、Cursor、Grok、OpenClaw 都能共用同一个记忆文件。&lt;/p&gt;
&lt;h2 id="agent-记忆是怎么被做复杂的"&gt;Agent 记忆是怎么被做复杂的
&lt;/h2&gt;&lt;p&gt;先看大多数人现在的做法：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;环节&lt;/th&gt;
					&lt;th&gt;典型方案&lt;/th&gt;
					&lt;th&gt;代价&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;存储&lt;/td&gt;
					&lt;td&gt;Pinecone / 托管 Qdrant&lt;/td&gt;
					&lt;td&gt;按量付费，数据在别人服务器上&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Embedding&lt;/td&gt;
					&lt;td&gt;OpenAI / 云厂商 API&lt;/td&gt;
					&lt;td&gt;每条记忆都要花钱、走网络&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;检索&lt;/td&gt;
					&lt;td&gt;REST API 调用&lt;/td&gt;
					&lt;td&gt;网络延迟几十到几百毫秒&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;记忆提取&lt;/td&gt;
					&lt;td&gt;LLM 总结再入库&lt;/td&gt;
					&lt;td&gt;又一层 API 调用和费用&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;写一条&amp;quot;用户喜欢深色模式&amp;quot;这种事实，要过两道网络、花两笔钱。&lt;/p&gt;
&lt;p&gt;更要命的是碎片化：Claude Code 的记忆在 CLAUDE.md，Codex 的在它自己的目录，Cursor 又是另一套。你换一个工具，之前的记忆全部作废。&lt;/p&gt;
&lt;h2 id="wax-的答案把整个记忆层压进一个文件"&gt;Wax 的答案：把整个记忆层压进一个文件
&lt;/h2&gt;&lt;p&gt;Wax 的核心思路一句话：&lt;strong&gt;记忆不需要服务，只需要一个文件&lt;/strong&gt;。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Claude Code ─┐
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Codex ───────┤
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Cursor ──────┼─ MCP ─→ 一个本地文件 ~/.wax/memory.wax
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Grok ────────┤
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;OpenClaw ────┘
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;一个 &lt;code&gt;.wax&lt;/code&gt; 文件里塞了这些东西：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;组件&lt;/th&gt;
					&lt;th&gt;干什么用&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;LZ4 压缩数据帧&lt;/td&gt;
					&lt;td&gt;存原始记忆文本和元数据&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;SQLite FTS5&lt;/td&gt;
					&lt;td&gt;全文文本检索（BM25 打分）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Metal 加速 HNSW&lt;/td&gt;
					&lt;td&gt;向量检索，1 万条以上自动启用&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;WAL + 双头页&lt;/td&gt;
					&lt;td&gt;写一半崩了也不丢数据&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;TOC 目录&lt;/td&gt;
					&lt;td&gt;索引所有帧和父子关系&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;文件本身一般就几 MB，装几千条记忆没问题。&lt;/p&gt;
&lt;p&gt;同步到另一台设备？iCloud、AirDrop、U 盘随便拷。备份就是复制文件，迁移就是移动文件。&lt;/p&gt;
&lt;h2 id="两个反直觉的设计"&gt;两个反直觉的设计
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;第一，remember 不调 LLM。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;大多数记忆产品会先让 LLM 从对话里&amp;quot;提取事实&amp;quot;再存。Wax 不来这套：你存什么句子，它就存什么句子，靠混合搜索找回来。&lt;/p&gt;
&lt;p&gt;好处是零 API 成本、零幻觉（提取环节最容易编造事实）。代价是记忆质量取决于你怎么写——这其实更可控。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二，向量检索是可选的，不是必须的。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;没跑 Embedding 模型时它就是纯文本搜索，照样能用。Apple Silicon 上自动加载内置 MiniLM 模型，语义检索无缝开启。&lt;/p&gt;
&lt;h2 id="性能到底怎么样"&gt;性能到底怎么样
&lt;/h2&gt;&lt;p&gt;官方在 Apple Silicon 上跑过基准（2026-03-06 数据）：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;指标&lt;/th&gt;
					&lt;th&gt;数值&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;混合召回 p95&lt;/td&gt;
					&lt;td&gt;6.1 ms&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;混合召回 p99&lt;/td&gt;
					&lt;td&gt;6.5 ms&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;冷启动打开 p95&lt;/td&gt;
					&lt;td&gt;9.2 ms&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;对比一下：一次云端向量库 API 调用，光网络往返通常 50-200ms，还没算排队和限流。&lt;/p&gt;
&lt;p&gt;6.1ms 意味着 Agent 每轮对话都能顺手查一遍记忆，几乎零成本。这也是&amp;quot;本地单文件&amp;quot;方案最实际的优势——不是省那点 API 钱，是延迟低到可以随便调。&lt;/p&gt;
&lt;h2 id="怎么接入"&gt;怎么接入
&lt;/h2&gt;&lt;p&gt;一条命令装好 MCP 服务：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx -y waxmcp@latest install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;各工具的接法：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;工具&lt;/th&gt;
					&lt;th&gt;接入方式&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Claude Code&lt;/td&gt;
					&lt;td&gt;stdio 直连 + 安装 wax skill&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Codex / Cursor / Grok / OpenClaw&lt;/td&gt;
					&lt;td&gt;配置 MCP 地址 &lt;code&gt;http://127.0.0.1:3000/mcp&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Hermes&lt;/td&gt;
					&lt;td&gt;原生 &lt;code&gt;wax-memory&lt;/code&gt; provider，无需 MCP&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;iOS / Mac 应用&lt;/td&gt;
					&lt;td&gt;Swift SDK， Foundation Models 直接挂 waxRemember / waxRecall 工具&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;有个细节值得说：&lt;strong&gt;多个工具共用记忆时，只能有一个写入进程&lt;/strong&gt;。两个 MCP 进程同时打开同一个 &lt;code&gt;.wax&lt;/code&gt; 文件会锁冲突，所以官方方案是起一个本地 HTTP 服务，所有工具都指向它。&lt;/p&gt;
&lt;p&gt;这其实是 SQLite 单文件方案的经典取舍——简单换来的并发限制，但对个人 Agent 记忆场景完全够用。&lt;/p&gt;
&lt;h2 id="它替代不了什么"&gt;它替代不了什么
&lt;/h2&gt;&lt;p&gt;Wax 官方很克制，没吹自己是万能方案：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;时序知识图谱&lt;/strong&gt;：需要 Neo4j/Postgres 那种多实体关系推理，Wax 不干这个&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多人共享记忆&lt;/strong&gt;：它就是给本机单用户设计的&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;跨机器实时同步&lt;/strong&gt;：拷文件是快照式的，不是实时&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;另外注意平台限制：Metal 向量加速和 npm 安装器针对 Apple Silicon，Intel Mac 要自己源码编译，Linux 可跑引擎（README 平台徽章包含 Linux）。&lt;/p&gt;
&lt;h2 id="同类方案横向对比"&gt;同类方案横向对比
&lt;/h2&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;方案类型&lt;/th&gt;
					&lt;th&gt;代表&lt;/th&gt;
					&lt;th&gt;存储&lt;/th&gt;
					&lt;th&gt;是否要服务&lt;/th&gt;
					&lt;th&gt;记忆提取&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;托管记忆 API&lt;/td&gt;
					&lt;td&gt;Mem0 / SuperMemory&lt;/td&gt;
					&lt;td&gt;云端&lt;/td&gt;
					&lt;td&gt;要&lt;/td&gt;
					&lt;td&gt;LLM 提取&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Markdown 记忆 MCP&lt;/td&gt;
					&lt;td&gt;Basic Memory 等&lt;/td&gt;
					&lt;td&gt;Markdown 文件&lt;/td&gt;
					&lt;td&gt;不要&lt;/td&gt;
					&lt;td&gt;手写/半自动&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Markdown+索引&lt;/td&gt;
					&lt;td&gt;agent-memory&lt;/td&gt;
					&lt;td&gt;Markdown 为真相源+SQLite 索引&lt;/td&gt;
					&lt;td&gt;不要&lt;/td&gt;
					&lt;td&gt;本地排序检索&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;单文件 RAG&lt;/td&gt;
					&lt;td&gt;Memvid（.mv2）&lt;/td&gt;
					&lt;td&gt;单文件&lt;/td&gt;
					&lt;td&gt;不要&lt;/td&gt;
					&lt;td&gt;无&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;单文件记忆层&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;Wax（.wax）&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;单文件&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;不要&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;不提取，直接存&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;顺带一提 agent-memory（926 Star）这个思路也很有意思：Markdown 文件当唯一真相源，SQLite 只做检索索引。文件永远可读可编辑，索引坏了重建就行。&lt;/p&gt;
&lt;h2 id="国内环境怎么用"&gt;国内环境怎么用
&lt;/h2&gt;&lt;p&gt;Wax 本体完全本地运行，不依赖任何境外服务，装好后离线可用。只有首次 &lt;code&gt;npm install&lt;/code&gt; 拉二进制需要网络。&lt;/p&gt;
&lt;p&gt;如果想要国内成熟度更高的方案，这几个可以对照看：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;方案&lt;/th&gt;
					&lt;th&gt;定位&lt;/th&gt;
					&lt;th&gt;数据&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a class="link" href="https://github.com/MemTensor/MemOS" target="_blank" rel="noopener"
 &gt;MemOS&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;记忆操作系统，混合检索+跨任务技能复用，宣称省 35% token&lt;/td&gt;
					&lt;td&gt;11.4k Star，Apache 2.0&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a class="link" href="https://github.com/NevaMind-AI/memU" target="_blank" rel="noopener"
 &gt;memU&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;多 Agent 共享个人记忆&lt;/td&gt;
					&lt;td&gt;14.4k Star，自定义协议&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;自建 SQLite FTS5&lt;/td&gt;
					&lt;td&gt;最朴素：一张 FTS5 虚拟表 + sqlite3 命令行就够&lt;/td&gt;
					&lt;td&gt;零依赖&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;认真说一句：如果你的记忆量在一万条以下，&lt;strong&gt;自建 SQLite FTS5&lt;/strong&gt; 的投入产出比可能最高。建一张表、写两段 SQL，半小时搞定，没有任何外部依赖。&lt;/p&gt;
&lt;p&gt;Wax 的价值在于它把这套东西产品化了：MCP 协议、多工具共享、崩溃恢复、向量扩展全都处理好了，开箱即用。&lt;/p&gt;
&lt;h2 id="我的看法"&gt;我的看法
&lt;/h2&gt;&lt;p&gt;Agent 记忆这个领域，2026 年有个明显的风向转变：从&amp;quot;云端服务&amp;quot;往&amp;quot;本地文件&amp;quot;回涌。&lt;/p&gt;
&lt;p&gt;原因不复杂——记忆是高度个人化的数据，用户凭什么要把它传到别人服务器上？而且 Agent 记忆的检索模式很固定：存进去、按相关度找出来。这个场景真的不需要一个分布式向量数据库。&lt;/p&gt;
&lt;p&gt;Wax 的 6.1ms 给了一个参照系：&lt;strong&gt;记忆检索应该快到 Agent 意识不到它的存在&lt;/strong&gt;。达不到这个标准的方案，都值得重新想想架构。&lt;/p&gt;
&lt;p&gt;下次给 Agent 配记忆，先问问自己：我真的需要一个服务吗？还是一个文件就够了？&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;参考资料：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Wax 仓库：https://github.com/christopherkarani/Wax&lt;/li&gt;
&lt;li&gt;性能基准报告：Resources/docs/benchmarks/2026-03-06-performance-results.md&lt;/li&gt;
&lt;li&gt;agent-memory：https://github.com/tigerless-labs/agent-memory&lt;/li&gt;
&lt;li&gt;MemOS：https://github.com/MemTensor/MemOS&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>