三只貓
Rich Mindset Zone
richmindsetzone.com
← All posts

AI Agent 長期記憶終極指南:cocoindex vs 主流記憶框架實戰比較

AI Agent 長期記憶終極指南:cocoindex vs 主流記憶框架實戰比較

context window 爆了,agent 就失憶。這不只是個技術限制,而是讓你的 production agent 變成玩具的根本原因。本文從一個大部分人忽略的角度切入——增量計算引擎——重新審視 2026 年 AI agent 記憶選型。


為什麼記憶問題比你想象的更複雜

先說一個很多開發者都踩過的坑。

你做了一個 coding agent,讓它幫你維護 codebase。第一天,它對整個 repo 做了 embedding,存進 Qdrant,運行順暢。一個禮拜後,你的同事 merge 了幾十個 PR,但 agent 的知識庫還是舊的。它對著已經刪除的函數寫文檔,對著已經重構的 API 給建議——因為它的「記憶」過期了。

你的選擇:定期跑 full re-index(費時費 token),或者接受 agent 跑在陳舊的 context 上(危險)。

這個問題被大多數記憶框架忽略了。主流方案專注於「如何儲存對話歷史」和「如何召回相關記憶」,但沒有解決底層知識源持續變化的問題。cocoindex 出現之前,這個層面基本是空白。


主流五大框架:各有所長,各有盲點

在談 cocoindex 之前,先把現有選項理清楚。

mem0 — 最成熟的 Universal Memory Layer

⭐ 52.8K stars | YC S24 | Python + Node.js | Apache 2.0

mem0 是目前社區採用最廣的方案,原因很簡單:上手快、效果不錯、有商業托管選項。它的架構圍繞 Multi-Level Memory 展開:

  • User Memory:跨 session 的用戶偏好、長期信息
  • Session Memory:當前 context 的臨時記憶
  • Agent Memory:agent 自身積累的知識狀態

根據 LOCOMO benchmark,mem0 比 full-context 方案快 91%,token 用量低 90%,準確度比 OpenAI Memory 高 26%。數字確實漂亮。

但有一個根本取捨你需要清楚:mem0 靠 LLM 從輸入中抽取事實,這個過程本質上是有損的。你喂進去一段對話,LLM 提取出「用戶偏好 Python」「工作在香港」這類事實,原始對話內容就丟了。對話要點保留了,細節和語境就不見了。

對話型 assistant 場景完全夠用;需要精確召回原始信息的場景要小心。

Letta — 有自主意識的 Stateful Agent 平台

⭐ 22K stars | 前身 MemGPT | Apache 2.0

Letta 是學術項目 MemGPT 的商業化版本,研究背景讓它在記憶架構上比其他框架思考得更深。最大特色是 agent 可以自主管理自己的記憶

通過 memory_blocks,你在創建 agent 時定義持久記憶單元:

agent_state = client.agents.create(
    model="claude-opus-4-6",
    memory_blocks=[
        {"label": "human", "value": "用戶:Vincent,偏好 Python"},
        {"label": "persona", "value": "我是 AgentOS"},
    ],
)

Agent 在運行過程中可以自己決定什麼值得更新、如何重組記憶——這是真正的 continual learning,而不只是被動存儲。

代價是架構複雜度。你需要跑一個 Letta server,self-hosted 設置需要時間,整個系統比 mem0 重得多。但如果你需要的是一個能夠真正「成長」的 agent,這個代價值得。

memU — 主動感知的 File System Memory

⭐ 13.3K stars | 24/7 Proactive | Apache 2.0

memU 的設計哲學是把記憶比做文件系統:有目錄結構、有分類、有交叉引用。但它最獨特的不是存儲結構,而是 Proactive Memory

大部分記憶框架是被動的——你問,它才從記憶庫裡查。memU 的 agent 24/7 在後台運行,持續捕捉用戶行為,主動預測下一步意圖,在你開口之前就準備好。

它聲稱把 token 成本降到可比方案的 1/10,靠的是 caching insights 避免重複 LLM call。主動性是亮點,代價是 24/7 後台帶來的工程複雜度和維護成本。

ReMe — Benchmark 最高分,但最低調

⭐ 2.7K stars | SOTA on LoCoMo + HaluMem | Apache 2.0

ReMe 是這個比較裡最被低估的選手。它在 LoCoMo 和 HaluMem 兩個 benchmark 上都達到 SOTA,但 star 數最少——大概是因為沒有商業推廣。

它提供兩個系統:ReMeLight(純文件,Markdown 存儲)和 Vector-based Memory(語意搜索)。

ReMeLight 的目錄結構尤其值得參考:

working_dir/
├── MEMORY.md              # 長期記憶:持久知識索引
├── memory/
│   └── YYYY-MM-DD.md      # 每日日誌:自動寫入
├── dialog/
│   └── YYYY-MM-DD.jsonl   # 原始對話記錄
└── tool_result/
    └── <uuid>.txt         # 工具輸出緩存

這個結構和很多成熟 agent 系統(包括 AgentOS)不謀而合——說明它確實是從工程實踐中提煉出來的。對注重透明度和可移植性的團隊,ReMe 是被嚴重低估的選項。

claude-mem — Claude Code 缺失的記憶插件

⭐ 53K+ stars | 社區驅動 | ChromaDB + RAG

claude-mem 不是通用框架,是一個針對 Claude Code 缺失跨 session 記憶的補丁。工作流程簡單粗暴:自動捕捉 session → LLM 壓縮 → ChromaDB 向量存儲 → 下次 session 注入相關記憶。

53K stars 說明這個痛點到底有多普遍。更重要的是,這個項目揭示了一個信號:開發者需要的不只是「記住對話」,而是跨 session 的知識連續性——即使官方沒有支援,社區也會自己搭。


cocoindex:從增量計算引擎重新定義記憶新鮮度

GitHub: cocoindex-io/cocoindex | Rust + Python | Apache 2.0 | 2026年5月 GitHub trending

cocoindex 的自我定位是 Incremental Engine for Long Horizon Agents。這個定位和上面五個框架都不在同一個維度——它切入的是記憶系統的另一層問題:底層知識源的持續變化

核心洞察:記憶過期才是 production 最大威脅

傳統做法面對動態知識庫只有一個選擇:full re-index。

想象一個真實場景:你的 coding agent 需要了解整個 codebase。初始化時 embed 了所有代碼,存進向量庫。接下來兩週,開發持續進行,每天都有 PR merge。你的 agent 正在用兩週前的舊索引回答問題。

Full re-index 解決不了這個問題,因為代價太高——重新 embed 一個大型 codebase 可能要幾十分鐘加幾百美元。你最後的選擇是接受「記憶陳舊」,或者把更新頻率壓縮到每天一次——這在快速迭代的場景裡根本不夠用。

cocoindex 的答案是:只重新處理有改動的部分(Δ)

技術架構:Rust 核心 + Python 介面

cocoindex 的代碼庫由五個 Rust crate 組成:

  • core:主引擎,追蹤 pipeline 狀態,管理增量計算
  • py:Python bindings(通過 PyO3)
  • py_utils:Python-Rust 工具橋接
  • utils:通用工具
  • ops_text:文本處理(分割、語言檢測等)

Python 負責定義業務邏輯,Rust 負責高並發執行和狀態持久化。並發處理通過 Tokio 運行,不受 Python GIL 限制;PyO3 橋接 Python asyncio 和 Tokio runtime。

增量計算的核心邏輯:

  1. 用 PostgreSQL 追蹤整個 pipeline 的狀態
  2. 當 source 有變動,識別受影響的 records
  3. 跨 join 和 lookup 傳播改動
  4. 更新 target,退役過時行
  5. 其他未改動的部分完全不動

結果:source 改動後,向量數據庫在一秒內更新(sub-second freshness)。

用法示例:給 codebase 做實時索引

import cocoindex

@cocoindex.flow_def(name="CodebaseIndex")
def code_flow(flow_builder, data_scope):
    # 定義 source:本地代碼目錄
    data_scope["files"] = flow_builder.add_source(
        cocoindex.sources.LocalFile(path="./src", included_patterns=["*.py"])
    )
    
    # Transform:只有 changed files 才會重新處理
    code_embeddings = data_scope["files"].transform(
        cocoindex.functions.SentenceTransformerEmbed(
            model="all-MiniLM-L6-v2"
        )
    )
    
    # Export:同步到 Qdrant
    code_embeddings.export(
        "code_store",
        cocoindex.storages.Qdrant(collection_name="codebase")
    )

# 啟動:持續監控文件變化,自動增量更新
cocoindex.utils.start_live_indexing(code_flow)

這個 pipeline 一旦啟動,就會持續監控 ./src 目錄。任何文件改動都只觸發該文件的重新 embed,整個 codebase 的其餘部分不動。

cocoindex 的適用場景

官方定位的核心場景:

Coding agent with live codebase index:最直接的 use case。codebase 有 commit → 自動更新代碼索引 → agent 永遠看到最新結構和 API。

Meeting notes → knowledge graph:每次新會議記錄加入,知識圖譜增量更新,歷史節點不重新計算。

External feeds:HN、Slack、郵件等持續流入的信息,實時 index 進 agent 的知識庫。

Document management:企業內部 wiki、文檔庫持續更新,agent 知識隨之保持同步。


框架選型對照表

框架核心範式主要優勢主要限制最適場景
mem0LLM 抽取事實最易上手,有托管服務有損壓縮,丟失原始細節對話型 assistant
LettaAgent 自主管理記憶真正的 continual learning架構複雜,部署門檻高長週期推理 agent
memUProactive file system主動感知用戶意圖24/7 後台的工程成本主動助理、陪伴應用
ReMeFile + Vector 雙系統Benchmark SOTA,透明可審計社區小,文檔有限注重透明度的 agent
claude-memSession → ChromaDB最快解決 Claude Code 記憶僅限 Claude Code 生態Claude Code 用戶
cocoindex增量計算引擎Sub-second freshness,高效率需自行定義記憶提取邏輯動態知識庫 + coding agent

真實選型的決策框架

第一步:釐清「記憶」的來源類型

記憶問題本質上分兩類:

對話記憶:用戶說過什麼、喜歡什麼、歷史交互。這是 mem0、Letta、ReMe 的主場。

知識庫記憶:代碼、文檔、外部 feed——這些東西本身在持續變化。這是 cocoindex 解決的問題。

搞清楚自己主要面對哪類問題,是選型第一步。

第二步:評估數據動態性

問自己:你的知識源每天改動幾多?

  • 幾乎不變(靜態文檔庫):任何框架的 one-time ingest 都夠用
  • 每天有更新(公司 wiki、代碼庫):需要定期 re-index,或考慮 cocoindex
  • 實時流入(Slack、郵件、news feed):必須有增量引擎,否則永遠追不上

第三步:考慮工程複雜度

mem0 是起點:pip install,幾行代碼,適合快速原型。

cocoindex 需要多一點設置:定義 dataflow、選 vector store backend、配置 PostgreSQL 做狀態追蹤。但一旦跑起來,你從此不需要管「何時重新 index」的問題——引擎自己處理。

Letta 適合把記憶系統作為核心競爭力的產品,它的複雜度帶來的是 agent 自主進化的能力。

組合使用:不是非此即彼

cocoindex 和其他框架解決的是不同層次的問題,完全可以疊加。

一個 production coding agent 的可能架構:

  • cocoindex 負責把最新 codebase 保持 indexed 在 Qdrant
  • mem0 負責記住用戶的偏好和歷史對話
  • Agent retrieval 層同時查詢兩個來源

cocoindex 保證代碼知識永遠最新,mem0 保證用戶 context 有延續性。兩個問題,兩個工具,各司其職。


cocoindex 現況與成熟度

作為 2026 年 5 月才開始受廣泛關注的工具,cocoindex 有幾點需要誠實說清楚:

優點:

  • 開源,Apache 2.0,不被 vendor lock-in
  • Rust 核心帶來的性能優勢是真實的
  • 增量計算的思路在 data engineering 領域已被充分驗證(類似 Flink、Kafka Streams 的增量處理思想)
  • 有活躍的 GitHub 更新記錄

需要留意:

  • 相比 mem0(52.8K stars)生態還小
  • 文檔和社區支援不如成熟框架豐富
  • PostgreSQL 作為狀態存儲的要求增加了部署依賴

整體而言,現在採用是合理時機——核心概念和 API 已穩定,但不像 mem0 那樣有大量 production case 可以參考。


Actionable Takeaway

根據你的場景,對號入座:

場景 A:做對話型 AI 助理 → 直接用 mem0,最快落地,社區資源最多

場景 B:做 Claude Code 的跨 session 記憶 → claude-mem 是最快的起點,不需要額外架構

場景 C:需要 agent 能夠自主進化、長期學習 → Letta,接受較高的前期工程投入

場景 D:有動態知識庫(codebase、文檔、外部 feed) → cocoindex 作為 indexing layer,搭配任意 vector store(Qdrant、Pinecone、pgvector 均可)

場景 E:同時需要對話記憶和知識庫記憶 → cocoindex + mem0 組合,不互斥,分別處理不同問題

最後一點:選擇框架之前,先把「記憶問題」分層——是對話歷史、是知識庫新鮮度、還是 agent 自主學習?不同層次的問題有不同的工具。混淆層次,才是選型最常見的坑。


參考資源:cocoindex GitHub | cocoindex 官網 | mem0 | Letta | ReMe | memU