如果你看看大多数生产 AI 智能体记忆系统的架构,你会发现一个熟悉的模式:用于语义搜索的向量数据库(如 Pinecone 或 Weaviate),用于关键词搜索的 Elasticsearch 或 OpenSearch,用于缓存热记忆的 Redis,以及用于结构化数据的 Postgres。四个需要部署的服务,四个需要监控的服务,四个可能失败的服务,月底四张账单。
这种复杂性被视为不可避免的——你为有能力的记忆付出的代价。但它不是不可避免的。它是用分布式系统工具解决不需要它们的问题的结果。
ZeroClaw 的记忆是单个 SQLite 文件。下面解释为什么这不是妥协。
基础设施陷阱
向量数据库是真正强大的工具。对于数百万文档的 RAG 系统,或大型语料库上的搜索引擎,它们是正确的选择。但 AI 智能体记忆是一个不同的问题。
大多数智能体存储数千条记忆,而不是数百万条。一年的日常对话可能产生 50,000 个对话轮次。这不是大数据问题——这是一个被当作大数据问题处理的小数据问题,因为工具是为其他东西设计的。
这种不匹配的代价是真实的。Pinecone 生产使用起价 $70/月。Weaviate 需要一个运行中的服务器。每次记忆查找都是一次网络往返——通常 10-50 毫秒——给每次响应增加延迟。你的记忆存储在专有格式中,使迁移变得痛苦。你还给你的运营面增加了另一个服务:另一个需要监控的东西,另一个需要更新的东西,另一个可能在凌晨 3 点宕机的东西。
对于在树莓派或 $5 VPS 上运行的 AI 智能体,这种架构根本不可行。但即使对于资源充足的部署,这种复杂性也没有给你带来更简单方法无法提供的任何东西。
为什么 SQLite 是正确的基础
SQLite 是世界上部署最广泛的数据库。它运行在每部智能手机、每个浏览器、每个嵌入式设备上。它自 2000 年以来一直在持续开发,有详尽的测试套件,被处理数十亿笔交易的公司在生产中使用。它绝对不是玩具。
使它特别适合智能体记忆的是它提供的属性组合:WAL 模式下的 ACID 合规性用于并发读取,零配置(没有服务器,没有凭据,没有设置),包含你整个记忆的单个可移植文件,以及对智能体实际使用的访问模式难以超越的性能特征。
ZeroClaw 一起使用两个 SQLite 扩展来构建一个处理智能体需要的两件事的记忆系统:精确召回和语义理解。
FTS5:全文搜索
SQLite 的 FTS5 扩展提供带 BM25 排名的快速关键词搜索:
```sql CREATE VIRTUAL TABLE memory_fts USING fts5(content, tokenize='porter');
-- 搜索关于"Rust deployment"的记忆 SELECT * FROM memory_fts WHERE memory_fts MATCH 'rust deployment' ORDER BY rank; ```
FTS5 自动处理分词、词干提取和排名。它很快——对于典型的智能体记忆大小是亚毫秒级——并且擅长精确召回。当你需要找到特定事实、特定名称或特定技术术语时,关键词搜索可靠地找到它。
向量搜索:语义相似性
ZeroClaw 将嵌入向量与文本一起存储,并直接在 SQLite 中执行余弦相似度搜索。这处理关键词搜索不足的情况:找到概念上相关的记忆,即使它们不共享确切的词语。
"我的树莓派设置"匹配"在 ARM 硬件上部署",即使它们没有共享关键词。"项目截止日期"匹配"什么时候到期",即使措辞完全不同。向量搜索理解含义,而不只是词语。
混合搜索:两者都做对
单独任何一种方法都不够。关键词搜索会错过语义连接——"car"不会找到"automobile"。向量搜索会错过精确匹配——搜索"CVE-2026-25253"可能返回模糊相关的安全内容,而不是你正在寻找的特定 CVE。
ZeroClaw 并行运行两种搜索,并使用倒数排名融合合并结果:
``` score(doc) = 1/(k + rank_fts) + 1/(k + rank_vector) ```
其中 `k` 是一个常数(通常是 60),控制多少权重给顶部排名的结果。在两种搜索中排名都高的文档浮到顶部。只匹配一种方法的文档仍然出现,但排名更低。结果是记忆检索正确处理"我对 X 说了什么"和"我说了什么与 X 相关"两种情况。
性能数字
在树莓派 Zero 2 W 上——ZeroClaw 通常运行的最受限硬件——记忆检索总共需要不到 3 毫秒:FTS5 搜索约 0.3 毫秒,向量搜索 2 毫秒,合并结果 0.1 毫秒。在 x86 硬件上,这些数字是亚毫秒级的。
相比之下,到 Pinecone 或 Weaviate 的网络往返通常需要 10-50 毫秒。ZeroClaw 的记忆检索比单个网络数据包穿越一座城市还要快。
你的记忆只是一个文件
SQLite 记忆的实际结果是你的整个对话历史、你的智能体学到的所有关于你的上下文、它知道的一切——都存在于一个叫做 `memory.db` 的单个文件中。
备份它是 `cp memory.db memory.db.bak`。将它移到新机器是复制文件。检查它是用任何 SQLite 客户端打开它。没有导出工具,没有迁移脚本,没有 API 调用。它是一个文件,文件是存在的最可移植、最被理解、最持久的数据格式。
这比看起来更重要。当你的记忆在 Pinecone 中时,它在 Pinecone 的格式中,在 Pinecone 的服务器上,通过 Pinecone 的 API 可访问。当 Pinecone 改变他们的定价、他们的 API 或宕机时,你的记忆受到影响。当你的记忆在你机器上的 SQLite 文件中时,这些都不适用。
零基础设施,零成本,零复杂性,以及外部数据库无法匹敌的性能,因为中间没有网络。对于 AI 智能体记忆,这不是妥协——这是正确的设计。