engineering deep-dive

ZeroClaw 的混合記憶體如何運作:SQLite Vector + FTS5 詳解

ZeroClaws.io

ZeroClaws.io

@zeroclaws

February 25, 2026

9 分鐘

ZeroClaw 的混合記憶體如何運作:SQLite Vector + FTS5 詳解

如果你看看大多數生產 AI 代理記憶體系統的架構,你會發現一個熟悉的模式:用於語義搜尋的向量資料庫如 Pinecone 或 Weaviate、用於關鍵字搜尋的 Elasticsearch 或 OpenSearch、用於快取熱門記憶的 Redis,以及用於結構化資料的 Postgres。四個需要部署的服務,四個需要監控的服務,四個可能失敗的服務,月底四張帳單。

這種複雜性被視為不可避免——你為有能力的記憶體付出的代價。但它並不是不可避免的。它是用分散式系統工具解決不需要它們的問題的結果。

ZeroClaw 的記憶體是一個單一的 SQLite 檔案。以下說明為什麼這不是妥協。

基礎設施陷阱

向量資料庫是真正強大的工具。對於數百萬份文件的 RAG 系統,或大型語料庫的搜尋引擎,它們是正確的選擇。但 AI 代理記憶體是一個不同的問題。

大多數代理儲存數千條記憶,而不是數百萬條。一年的日常對話可能產生 50,000 個對話輪次。這不是大資料問題——它是一個被當作大資料問題處理的小資料問題,因為工具是為其他東西設計的。

這種不匹配的成本是真實的。Pinecone 的生產使用起價 70 美元/月。Weaviate 需要一個執行中的伺服器。每次記憶查詢都是一次網路往返——通常 10-50 毫秒——為每個回應增加延遲。你的記憶以專有格式儲存,使遷移變得痛苦。而且你已經在你的營運面增加了另一個服務:另一個需要監控的東西,另一個需要更新的東西,另一個可能在凌晨 3 點宕機的東西。

對於在 Raspberry Pi 或 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 中執行餘弦相似度搜尋。這處理了關鍵字搜尋不足的情況:找到概念上相關的記憶,即使它們不共享確切的詞語。

「我的 Raspberry Pi 設置」匹配「在 ARM 硬體上部署」,即使它們沒有共享關鍵字。「專案截止日期」匹配「什麼時候到期」,即使措辭完全不同。向量搜尋理解含義,而不只是詞語。

混合搜尋:兩者都做對

單獨的任何一種方法都不夠。關鍵字搜尋會錯過語義連接——「car」不會找到「automobile」。向量搜尋會錯過精確匹配——搜尋「CVE-2026-25253」可能返回模糊相關的安全內容,而不是你正在尋找的特定 CVE。

ZeroClaw 並行執行兩種搜尋,並使用倒數排名融合合併結果:

``` score(doc) = 1/(k + rank_fts) + 1/(k + rank_vector) ```

其中 `k` 是一個常數(通常為 60),控制頂部排名結果的權重。在兩種搜尋中排名都高的文件浮到頂部。只匹配一種方法的文件仍然出現,但排名較低。結果是記憶體檢索,可以正確處理「我對 X 說了什麼」和「我說了什麼與 X 相關的內容」。

效能數字

在 Raspberry Pi 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 代理記憶體,這不是妥協——這是正確的設計。

保持關注

獲取新版本、整合和 Rust 驅動的 Agent 基礎設施更新。不發垃圾郵件,隨時退訂。