Milvus
Zilliz
  • Home
  • Blog
  • 使用輕量級 memsearch 外掛為 Claude 程式碼加入持久記憶體

使用輕量級 memsearch 外掛為 Claude 程式碼加入持久記憶體

  • Engineering
February 13, 2026
Cheney Zhang

我們最近建立並開源了memsearch,這是一個獨立、隨插即用的長期記憶體函式庫,可提供任何代理程式持久、透明且可由人類編輯的記憶體。它使用與 OpenClaw 相同的底層記憶體架構,只是沒有 OpenClaw 堆疊的其他部分。這表示您可以將它放入任何代理程式框架 (Claude、GPT、Llama、客製化代理程式、工作流程引擎),並立即新增持久、可查詢的記憶體。(如果您想要深入瞭解 memsearch 的運作方式,我們 在這裡另外 寫了一篇 文章)。

在大多數的代理程式工作流程中,memsearch 都能發揮預期的功能。但代理程式編碼卻是另一回事。編碼工作會持續很長時間,上下文會不斷轉換,值得保留的資訊會累積數天或數週。這種龐大的數量和不穩定性暴露了典型代理程式記憶體系統的弱點,memsearch 也包括在內。在編碼情境中,檢索模式的差異足以讓我們無法原封不動地重複使用現有工具。

為了解決這個問題,我們建立了一個專為 Claude Code 設計的持久記憶體外掛程式。它位於 memsearch CLI 之上,我們稱之為memsearch ccplugin

有了輕量級的memsearch ccplugin在幕後管理記憶體,Claude Code 就有能力記住每一次對話、每一個決定、每一個風格偏好,以及每一個多天的線程 - 自動索引、完全可搜尋,以及跨會話的持久性。

為了清楚起見,本文章中的"ccplugin」是指上層,或 Claude Code 外掛程式本身。"memsearch" 指的是下層,也就是其下的獨立 CLI 工具。

那麼,為什麼編碼需要自己的外掛程式?歸根究柢,你幾乎一定會碰到兩個問題:Claude Code 缺乏持久記憶體,以及 claude-mem 等現有解決方案的笨拙與複雜。

那麼,為什麼要建立一個專用的外掛程式呢?因為編碼代理程式會遇到兩個痛點,您幾乎一定親身體驗過:

  • Claude 程式碼沒有持久性記憶體。

  • 許多現有的社群解決方案 (例如claude-mem),雖然功能強大,但對於日常的編碼工作而言,卻顯得笨重、笨拙或過於複雜。

ccplugin 的目標是在 memsearch 的基礎上,以最小、透明、開發者友善的層級來解決這兩個問題。

Claude 程式碼的記憶體問題:會話結束時會忘記所有事情

讓我們從 Claude Code 使用者最常遇到的情況開始。

您在早上打開 Claude Code。您輸入:「繼續昨天的 auth 重構」。Claude 回覆:"我不確定你昨天在做什麼。於是你花了十分鐘複製貼上昨天的記錄。這不是個大問題,但因為出現得太頻繁,所以很快就變得很煩人。

儘管 Claude Code 有自己的記憶體機制,但還是差強人意。CLAUDE.md 檔案可以儲存專案指令和偏好設定,但它更適合靜態規則和簡短指令,不適合長期累積知識。

Claude Code 提供resumefork 指令,但對使用者來說並不友善。對於 fork 指令,您需要記住 session ID、手動輸入指令,以及管理一棵樹狀的分支會話歷史。當您執行/resume 時,您會得到一堵會話標題牆。如果您只記得幾個關於您所做的事的細節,而且是幾天前的事,那麼祝您好運,能找到正確的會話。

對於長期的、跨專案的知識累積,這整個方法是不可能的。

為了實現這個想法,claude-mem 使用三層記憶系統。第一層會搜尋高層摘要。第二層會深入時間線尋找更多細節。第三層會抽取原始對話的完整觀察。除此之外,還有隱私標籤、成本追蹤和網路可視化介面。

以下是它的工作原理:

  • 執行層。Node.js Worker 服務在連接埠 37777 上執行。會話元資料存放在輕量級 SQLite 資料庫中。向量資料庫處理記憶體內容的精確語意檢索。

  • 互動層。基於 React 的 Web UI 可讓您即時檢視擷取的記憶:摘要、時間線和原始記錄。

  • 介面層。MCP (Model Context Protocol,模型上下文協定) 伺服器提供標準化的工具介面。Claude 可以呼叫search (查詢高階摘要)、timeline (檢視詳細時間線) 和get_observations (擷取原始互動記錄) 來直接擷取和使用記憶體。

平心而論,這是一個解決 Claude Code 記憶問題的可靠產品。但在日常工作中,它顯得笨拙而複雜。

層級技術
語言TypeScript (ES2022, ESNext 模組)
運行時間Node.js 18+
資料庫SQLite 3 與 bun:sqlite 驅動程式
向量儲存ChromaDB (可選,用於語意搜尋)
HTTP 伺服器Express.js 4.18
即時伺服器發送事件 (SSE)
UI 架構React + TypeScript
AI SDK@anthropic-ai/claude-agent-sdk
建置工具esbuild (bundles TypeScript)
流程管理員
測試Node.js 內建測試執行器

對於初學者來說,設定工作相當繁重。要讓 claude-mem 執行就必須先安裝 Node.js、Bun 和 MCP runtime,然後在上面架設 Worker 服務、Express 伺服器、React UI、SQLite 和向量儲存。這需要部署、維護和在出現問題時調試許多移動部件。

所有這些元件也會燒掉你沒有要求花費的代幣。MCP 工具定義會永久載入 Claude 的上下文視窗,而每次工具呼叫都會在請求與回應中消耗代幣。在長時間的會話中,這種開銷會快速增加,並可能使代幣成本失控。

記憶體回憶並不可靠,因為它完全取決於 Claude 是否選擇搜尋。Claude 必須自行決定呼叫search 等工具來啟動擷取。如果它沒有意識到自己需要記憶體,相關內容就永遠不會出現。而且三層記憶體中的每一層都需要自己明確的工具調用,所以如果 Claude 沒有想到要去找,就沒有後備。

最後,資料儲存是不透明的,這使得除錯和遷移變得不愉快。記憶體分為 SQLite 的會話元資料和 Chroma 的二進位向量資料,沒有開放格式將它們連結在一起。遷移意味著撰寫匯出腳本。要查看 AI 的實際記憶內容,必須透過 Web UI 或專用的查詢介面。沒辦法只看原始資料。

為什麼 Claude Code 的 memsearch 外掛程式更好?

我們想要一個真正輕量級的記憶體層級 - 沒有額外的服務、沒有糾結的架構、沒有運作開支。這就是我們建立memsearch ccplugin 的動機。其核心是一項實驗:以編碼為重點的記憶體系統能夠從根本上簡化嗎?

是的,而且我們證明了這一點。

整個 ccplugin 就是四個 shell 鉤子加上一個背景監視程序。沒有 Node.js、沒有 MCP 伺服器、沒有 Web UI。它只是呼叫 memsearch CLI 的 shell 腳本,大幅降低了設定與維護的難度。

ccplugin 之所以可以如此薄,是因為有嚴格的責任界限。它不處理記憶體儲存、向量檢索或文字嵌入。所有這些工作都交由下方的 memsearch CLI 處理。ccplugin 只有一個工作:將 Claude Code 的生命週期事件(會話開始、提示提交、回應停止、會話結束)橋接至相應的 memsearch CLI 函式。

此解耦設計讓系統的彈性超越 Claude Code。memsearch CLI 可獨立於其他 IDE、其他代理框架,甚至是單純的手動調用。它不會侷限於單一的使用情況。

實際上,這種設計提供了三個主要優點。

1.所有記憶體都位於純 Markdown 檔案中

ccplugin 創建的每個記憶體都以 Markdown 檔案的形式存在於.memsearch/memory/

.memsearch/memory/
├── 2026-02-09.md
├── 2026-02-10.md
└── 2026-02-11.md

每天一個檔案。每個檔案都以純文字包含當天的會話摘要,完全人類可讀。以下是 memsearch 專案本身的每日記憶體檔案截圖:

您可以馬上看到格式:時間戳記、會話 ID、回合 ID,以及會話摘要。沒有任何東西是隱藏的。

想知道 AI 記憶了什麼嗎?打開 Markdown 檔案。想要編輯記憶體?使用您的文字編輯器。想要遷移資料嗎?複製.memsearch/memory/ 資料夾。

Milvus向量索引是一個加速語意搜尋的快取記憶體。它可以隨時從 Markdown 重建。沒有不透明的資料庫,沒有二進位的黑盒子。所有資料都是可追蹤且完全可重建的。

2.自動內文注入零額外代號成本

透明儲存是本系統的基礎。真正的回報來自於這些記憶體的使用方式,在 ccplugin 中,記憶體的調用是完全自動的。

每次提交提示時,UserPromptSubmit 鉤子就會啟動語意搜尋,並將前三名的相關記憶體注入上下文。Claude 不會決定是否搜尋。它只是取得上下文。

在此過程中,Claude 永遠不會看到 MCP 工具定義,因此上下文視窗中沒有任何額外內容。鉤子在 CLI 層執行,並注入純文字搜尋結果。沒有 IPC 開銷,也沒有工具呼叫代幣成本。MCP 工具定義帶來的上下文視窗臃腫現象完全消失。

對於自動 top-3 還不夠的情況,我們也建立了三層漸進式擷取。這三個層級都是 CLI 指令,而非 MCP 工具。

  • L1 (自動):每次提示都會返回前三名的語意搜尋結果,並提供chunk_hash 和 200 個字元的預覽。這涵蓋了大部分的日常使用。

  • L2 (隨選):當需要完整的上下文時,memsearch expand <chunk_hash> 會傳回完整的 Markdown 章節以及元資料。

  • L3 (深入):當需要原始對話時,memsearch transcript <jsonl_path> --turn <uuid> 從 Claude Code 取得原始 JSONL 記錄。

3.會話摘要以接近零的成本在背景中產生

擷取涵蓋記憶體的使用方式。但記憶體必須先寫入。所有這些 Markdown 檔案是如何產生的?

ccplugin 透過背景管道來產生它們,該管道以異步方式執行,幾乎不花費任何成本。每次您停止 Claude 回應時,Stop 鉤子就會啟動:它會解析對話記錄,呼叫 Claude Haiku (claude -p --model haiku) 來產生摘要,並將摘要附加到當天的 Markdown 檔案。Haiku API 調用非常便宜,每次調用幾乎可以忽略不计。

之後,觀察程序會偵測檔案變更,並自動將新內容編入 Milvus 索引,以便立即檢索。整個流程在背景中執行,不會中斷您的工作,而且成本可控。

使用 Claude Code 快速啟動 memsearch 外掛程式

首先,從 Claude Code 外掛程式市場安裝:


bash
# Run in Claude Code terminal
/plugin marketplace add zilliztech/memsearch
/plugin install memsearch

其次,重新啟動 Claude Code。

外掛程式會自動初始化其設定。

第三,在對話之後,檢查當天的記憶體檔案:

bash
cat .memsearch/memory/$(date +%Y-%m-%d).md

第四,享受。

下次 Claude Code 啟動時,系統會自動檢索並注入相關記憶。不需要額外的步驟。

結論

讓我們回到最初的問題:如何賦予 AI 持續記憶體? claude-mem 和 memsearch ccplugin 採取了不同的方法,各有優點。我們總結了一份快速選擇指南:

類別記憶體搜尋claude-mem
架構4 個 shell 鉤子 + 1 個監視程序Node.js Worker + Express + React UI
整合方式原生掛鉤 + CLIMCP 伺服器 (stdio)
召回自動 (鉤子注入)代理驅動 (需要調用工具)
內容消耗零(僅注入結果文字)MCP 工具定義持續存在
會話摘要一次異步 Haiku CLI 呼叫多次 API 呼叫 + 觀察壓縮
儲存格式純 Markdown 檔案SQLite + Chroma 嵌入
資料遷移純 Markdown 檔案SQLite + Chroma 嵌入
遷移方法複製 .md 檔案從資料庫匯出
運行時間Python + Claude CLINode.js + Bun + MCP 運行時

claude-mem 提供更豐富的功能、精緻的使用者介面以及更細緻的控制。對於需要協同合作、網路可視化或詳細記憶體管理的團隊來說,這是一個強大的選擇。

memsearch ccplugin 提供極簡的設計、零上下文視窗開銷以及完全透明的儲存。對於需要輕量級記憶體層而不需要額外複雜性的工程師來說,它是更適合的選擇。哪一個更好,取決於您的需求。

想要深入瞭解或獲得使用 memsearch 或 Milvus 建置的協助嗎?

資源

    Try Managed Milvus for Free

    Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

    Get Started

    Like the article? Spread the word

    繼續閱讀