llm-wiki wiki · analysis 2026-06-09

这页把当前已摄入的 memory 相关项目横向整理。核心结论:这些项目不是在做同一件事,而是在同一个问题空间里选择了不同的事实源、宿主入口、压缩成本、检索治理边界和上下文注入策略。

从工程架构看,Agent Memory 不是一个“向量库 + top-k 搜索”的问题,而是一条完整的数据管线:

Agent runtime event / explicit memory call / app SDK call
        ↓
capture boundary: hook / MCP tool / REST / SDK / Markdown append
        ↓
write policy: dedup / scope / privacy / conflict / budget / queue
        ↓
compression: none / heuristic / LLM facts / scene/persona hierarchy
        ↓
truth store: SQLite / Markdown / JSONL / OceanBase / KV bus
        ↓
shadow index: FTS / BM25 / dense vector / sparse vector / graph
        ↓
recall: auto injection / search tool / briefing / progressive drill-down
        ↓
context governance: token budget / prompt cache / evidence trace / scope

真正的架构分歧主要发生在三个地方:

一句话分层

项目 一句话定位 最适合的问题
claude-mem Claude Code 专用长期记忆插件,hook 采集 + worker 异步压缩 + SQLite/Chroma 双索引 给 Claude Code 单机用户加跨会话记忆
agent-recall 本地优先的 MCP-native 结构化记忆库,SQLite + scope hierarchy + AI briefing 多项目/多客户场景下保存实体、关系、决策和 scoped facts
agentmemory 跨 Agent 本地记忆服务,REST/MCP/hooks + iii-engine + BM25/vector/graph 三流检索 多个 coding agent 共用一个本地 memory worker 和 viewer
powermem 应用级记忆中间件,SDK/CLI/API/MCP/Dashboard 多入口 + OceanBase/SeekDB 后端 把 LLM app / agent framework 的记忆做成可部署服务
memsearch 跨平台 coding agent 语义记忆,Markdown source-of-truth + Milvus shadow index 让 Codex/Claude/OpenCode/OpenClaw 从历史会话 Markdown 里渐进式回溯
tencentdb-agent-memory OpenClaw/Hermes 记忆插件,L0→L3 分层长期记忆 + context offload 同时处理长期 persona/scene memory 和短期工具日志压缩

横向对比

维度 claude-mem agent-recall agentmemory powermem memsearch tencentdb-agent-memory
主宿主 Claude Code MCP clients / CLI / Claude hooks Claude Code / Codex / Cursor / MCP clients SDK / CLI / API / MCP / IDE 插件 Claude Code / Codex / OpenCode / OpenClaw OpenClaw / Hermes / Gateway
主形态 宿主插件 + 本地 worker MCP-native 结构化记忆库 本地常驻服务 + MCP/REST/viewer 应用中间件 / 服务化 memory layer CLI/plugin + Markdown 记忆库 插件/sidecar + 分层 pipeline
写入口 lifecycle hooks MCP memory tools / CLI hooks / REST / MCP Memory.add() / HTTP / MCP / plugin hook 平台 hook append Markdown before/after hook + tool/offload
写入语义 捕获 tool event,再由后台判断 Agent 主动声明 entity/fact/relation 观察事件 + remember/save API 应用显式提交 memory item 追加可审计会话摘要 捕获 L0,再抽 L1/L2/L3
事实源 SQLite observations SQLite entities/slots/relations iii-engine SQLite KV OceanBase / SeekDB / pgvector / SQLite .memsearch/*.md Markdown JSONL records + scene/persona files
索引层 SQLite FTS5 + Chroma SQLite FTS5/LIKE in-process BM25 + vector + graph vector + FTS + sparse + graph Milvus dense + BM25 sparse SQLite FTS/vector 或 TCVDB hybrid
压缩策略 后台 LLM 压成 structured observations raw graph → AI briefing cache 默认零 LLM 启发式,可选 LLM LLM fact extraction + importance eval daily/PROJECT/USER maintenance L0→L1→L2→L3 多级 LLM 管线
权限/隔离 profile/env/path 隔离为主 MCPBridge scope enforcement API/MCP 暴露面 + privacy filter 多租户 scope/permission/privacy controllers 项目目录 + collection 隔离 host config + store backend + pipeline scope
注入方式 SessionStart auto context + mem-search skill SessionStart AI briefing context injection 可配置 + MCP tools API/search 返回给应用或插件注入 启动提示 + $memory-recall 下钻 prepend L1 + append L2/L3 + tools
恢复模型 outbox / SQLite / Chroma watermark SQLite truth + cache 可重建 KV truth + index persistence/rebuild 后端 DB truth + optimizer metadata Markdown truth,Milvus 可重建 JSONL/files truth,store 可重建
主要强项 Claude Code 集成自然,模式清晰 scope hierarchy 和 bitemporal facts 多入口、多工具、viewer、零 LLM 默认 后端/provider/部署形态最完整 Markdown 可审计,可重建索引 分层记忆 + context offload 合一
主要代价 生态偏 Claude Code 向量/语义能力较轻 iii-engine 依赖和工具面较大 部署/配置复杂度更高 依赖 Milvus 路径和索引维护 管线复杂、宿主偏 OpenClaw/Hermes

架构交叉矩阵

这些项目经常“看起来不同,底层同构”。真正可复用的是工程模式,而不是某个具体后端。

交叉模式 采用项目 工程含义
Hook → worker → store claude-mem, agentmemory, memsearch, tencentdb-agent-memory, powermem Claude 插件 Hook 只做捕获和转发,AI 压缩、embedding、索引重建都放到后台;关键是失败不能阻塞 Agent 主流程
MCP memory tools agent-recall, agentmemory, powermem, tencentdb-agent-memory 把“记住/查询/删除/展开”变成 Agent 可调用协议;写入质量取决于 tool instructions 和模型是否愿意主动保存
SQLite 本地事实层 claude-mem, agent-recall, agentmemory, tencentdb-agent-memory SQLite 模式 单机部署简单,事务/WAL/FTS 成熟;难点是多进程锁、索引重建和 scope enforcement
Markdown / JSONL 可审计真相 memsearch, tencentdb-agent-memory 人类可读、可 diff、可备份,索引可重建;代价是需要额外处理 chunk ID、行号 anchor、文件一致性
Hybrid + RRF agentmemory, powermem, memsearch, tencentdb-agent-memory BM25/FTS 抓字面,vector 抓语义,graph/scope/time 做约束;RRF 比单一相似度更稳
三层/渐进式召回 claude-mem, memsearch, tencentdb-agent-memory, agent-recall 先给摘要/片段,再按需展开原文,避免 top-k 原文直接撑爆 prompt
AI 压缩层与真相层分离 claude-mem, agent-recall, powermem, tencentdb-agent-memory LLM 输出是压缩视图,不应该成为唯一证据;否则 hallucinated memory 会永久化
显式成本控制 agentmemory, agent-recall, memsearch, tencentdb-agent-memory 默认不自动塞大量上下文,或者只注入轻量 hint/briefing;用户需要时再 search/expand

交叉 1:Hook 插件和后台服务的边界

claude-memagentmemorytencentdb-agent-memory 都把 hook 设计得很薄:

hook receives stdin JSON
        ↓
normalize minimal payload
        ↓
HTTP/process handoff with timeout
        ↓
swallow errors or return lightweight context

这条边界的关键不是“怎么调用 HTTP”,而是 hook 不能把 Agent 运行时变成 memory 系统的人质。工具执行后的 hook 如果同步做 LLM 压缩或 embedding,一次 provider 慢请求就会把用户的 coding agent 卡住。所以这些项目都倾向于:

差异在于后台服务形态:claude-mem 内置 worker + BullMQ/SQLite/Chroma;agentmemory 外置 iii-engine 作为函数总线;tencentdb-agent-memory 把核心封装成 TdaiCore,在 OpenClaw in-process 和 Hermes sidecar 之间复用。

交叉 2:MCP 是工具入口,不等于存储模型

agent-recallagentmemorypowermem 都支持 MCP,但 MCP 在三个项目里的角色不同:

所以“是否支持 MCP”不是关键问题;关键问题是 MCP tool call 是否承载写入语义、权限边界和行为引导agent-recall 的工程亮点就在这里:它把主动记忆策略嵌进 MCP server instructions,并把权限 enforcement 放在 bridge,而不是底层 store。

交叉 3:Source-of-truth 和 shadow index 的分离

Agent Memory 系统迟早会遇到索引损坏、embedding model 更换、chunk 切分规则变化、vector dimension mismatch、LLM 压缩失败等问题。因此成熟设计都会区分:

memsearch 把这个边界做得最清楚:Markdown 是 truth,Milvus 是 shadow index;chunk ID 绑定 source/line/content/model,模型切换不会污染旧索引。tencentdb-agent-memory 也类似:JSONL/scene/persona 是恢复材料,SQLite/TCVDB 是检索引擎。agentmemory 的难点在 index persistence:BM25/vector 会周期性落回 KV,维度不匹配时拒绝启动,防止静默错误。

交叉 4:混合检索不是“加一个向量库”

这六个项目里,纯向量 top-k 基本不是最终形态。原因很实际:

powermem 是最企业化的检索栈:vector + FTS + sparse + graph,再做 RRF、衰减加权、rerank。agentmemory 是本地轻量版本:in-process BM25 + Float32Array vector + graph BFS。memsearch 把 dense 和 BM25 都放进 Milvus。tencentdb-agent-memory 在 SQLite 路径用 FTS/vector/RRF,在 TCVDB 路径用 native hybridSearch。

Memory 写入方式的区别

写入方式决定了 memory 的质量上限。检索再强,也救不了错误写入、噪声写入和越权写入。

写入类型 代表项目 写入动作 优点 主要风险
被动事件捕获 claude-mem, agentmemory, tencentdb-agent-memory hook 捕获 prompt/tool/session event 用户无感,覆盖率高 噪声多、需要强 dedup/压缩
主动工具写入 agent-recall, agentmemory Agent 调 MCP tools 保存实体/事实/关系 语义清楚,结构化强 依赖模型自觉,容易漏记
应用 SDK 写入 powermem app 调 Memory.add() 产品可控,能结合业务 schema 对 coding agent 无法完全无侵入
Markdown append memsearch hook/skill 追加 daily/PROJECT/USER Markdown 可审计、可手改、可重建 需要维护 chunk/anchor/index 一致性
分层管线写入 tencentdb-agent-memory L0 捕获 → L1 atom → L2 scenario → L3 persona 长短期结构清楚,注入层次自然 pipeline 调度、冲突、半写入复杂
Briefing/cache 写入 agent-recall raw context → AI briefing cache 启动快,scope-aware cache 不是 truth,staleness 要治理
Context offload 写入 tencentdb-agent-memory 工具日志写 refs,MMD 节点进上下文 解决短期上下文爆炸 node_id、原文、摘要必须能互相追踪

1. 被动事件捕获:覆盖率高,治理成本也高

claude-mem 的写路径是典型模式:

PostToolUse / UserPromptSubmit / Stop
        ↓
bun-runner lightweight handoff
        ↓
worker outbox / queue
        ↓
LLM observation generation
        ↓
SQLite transaction + Chroma sync

这类系统的优势是用户不用记得“保存记忆”。coding agent 的重要事实往往来自工具执行:读了哪个文件、改了哪个模块、发现了什么失败路径、最后怎么修复。被动捕获能把这些都送进候选集。

代价是治理困难:

agentmemory 对这个问题的取舍更激进:默认不调用 LLM,而是 buildSyntheticCompression() 做启发式压缩,保护用户 API token;LLM 自动压缩要显式打开。它牺牲一部分语义质量,换来默认成本可控。

2. 主动工具写入:结构清楚,但依赖 Agent 行为

agent-recall 的主路径不是“抓所有工具日志”,而是让 Agent 主动调用 MCP memory tools:

create_entities / add_observations / add_relations
        ↓
MCPBridge input limits + scope filtering
        ↓
MemoryStore SQLite entities / slots / observations / relations
        ↓
context_gen generates scoped AI briefing

这个模式适合 people、organizations、project decisions、customer-specific facts 这类结构化长期知识。它的关键设计是把语义边界前移:写入时就知道这是 entity、slot、relation 还是 observation。

但它有两个工程难点:

3. 应用 SDK 写入:适合产品,不一定适合 terminal agent

powermem 的写路径更像一个 LLM app memory middleware:

Memory.add(prompt, user_id, agent_id, run_id)
        ↓
LLM fact extraction
        ↓
ImportanceEvaluator + Ebbinghaus metadata
        ↓
embedding / sparse embedding
        ↓
StorageAdapter route to OceanBase / SeekDB / pgvector / SQLite

它的优势是应用拥有调用点,可以在业务语义最清楚的地方写入。比如客服、教育、CRM、个人助手可以把 user_id、agent_id、run_id、scope、permission 都作为一等参数传入。

它不一定适合纯 coding agent 插件的原因是:terminal agent 的事实来源经常分散在工具调用和文件读写里,应用层没有一个干净的 add() 边界。因此 PowerMem 也提供 Claude Code plugin / MCP / IDE 扩展,但它的架构核心仍是服务化 memory layer。

4. Markdown append:可审计性优先

memsearch 的写入不是直接进 DB,而是先写 Markdown:

platform hook parses transcript
        ↓
append .memsearch/memory/YYYY-MM-DD.md
        ↓
scanner/chunker computes stable chunk_id
        ↓
Milvus dense + BM25 sparse index

这个模式的工程价值很大:memory 可以被人类 review、diff、迁移、手改;Milvus 坏了可以重建;embedding model 切换可以重新生成 collection。

代价也很明确:

5. 分层写入:把“记忆”拆成证据、事实、场景、画像

tencentdb-agent-memory 是这组里写入管线最复杂的:

L0 Conversation JSONL
        ↓
L1 Atom records: persona / episodic / instruction memory
        ↓
L2 Scenario scene_blocks/*.md
        ↓
L3 Persona persona.md + scene navigation

这不是单纯“多摘要几次”,而是在解决不同注入层的稳定性问题:

这条路的难点是 pipeline consistency:L1 有 threshold/idle/flush 三种触发,L2 用 downward-only timer,L3 要全局串行避免并发改 persona。LLM 还会被允许改写 scene_blocks/,因此必须有沙箱、备份和恢复逻辑,防止半写入破坏状态。

项目工程剖面

claude-mem:最标准的事件驱动闭环

claude-mem 的价值在于把 Claude Code 插件 memory 的最小闭环打穿:

Lifecycle hooks
  → worker queue
  → LLM observation generation
  → SQLite/FTS + Chroma
  → SessionStart injection + mem-search skill

它的工程核心是 边缘轻、后台重。Hook 负责接力,worker 负责 AI 压缩、解析、事务写入和 Chroma 同步。MemoryItem schema 把自然语言 narrative、facts、concepts、filesRead、filesModified 拆开,说明它不是把 transcript 原文塞进向量库,而是先变成可索引观察。

适合借鉴的点:

主要风险:

agent-recall:结构化事实和 scope governance 优先

agent-recall 更像“给 Agent 的本地知识图谱”,而不是“会话日志搜索”。它把 people、decisions、facts、context 作为主动写入对象,底层 SQLite 维护 entities、slots、observations、relations。

它最重要的工程边界是:

MCP client
  → MCPBridge: limits + scope read/write filter
  → MemoryStore: trusted SQLite operations
  → context/briefing: scoped context assembly

MemoryStore 不做 scope enforcement 不是缺陷,而是明确把底层 store 定义成可信 API;面向多 Agent 的 MCP 入口才是权限边界。这个设计比“每层都检查一点权限”更容易审计。

适合借鉴的点:

主要风险:

agentmemory:跨 Agent worker 和成本可见性

agentmemory 的架构很宽:hooks、REST、MCP、viewer、iii-engine、50+ functions、32+ KV scopes。它的核心取舍不是“最简单”,而是让多个 Agent 共用一个本地记忆服务。

写路径和检索路径都体现了成本控制:

它的检索是本地轻量混合检索:

BM25 inverted index
  + VectorIndex Float32Array cosine
  + GraphRetrieval BFS
  → RRF + optional rerank

适合借鉴的点:

主要风险:

powermem:把 memory 做成中间件

powermem 的工程目标和 coding-agent 插件不同。它不是只服务某个 terminal agent,而是把 memory layer 做成 SDK/CLI/API/MCP/Dashboard/IDE plugin 共用的基础设施。

核心路径是:

Memory.add()
  → LLM fact extraction
  → importance / retention metadata
  → dense + sparse embedding
  → StorageAdapter
  → OceanBase / SeekDB / pgvector / SQLite

它的关键抽象是 StorageAdapter 和 provider factories。Core 不直接绑 OceanBase SDK,LLM/embedder/reranker 也通过 factory 切换。这让 PowerMem 可以走“本地 SQLite/SeekDB”到“企业 OceanBase”的连续部署路径。

适合借鉴的点:

主要风险:

memsearch:Markdown truth + Milvus shadow index

memsearch 的架构重点是可审计和可重建。它不把 Milvus 当 truth,而是把 .memsearch/*.md 作为事实源。

hook summary
  → Markdown append
  → scanner/chunker
  → chunk_id(source,line,content,model)
  → Milvus dense + BM25
  → search / expand / transcript

这特别适合 coding agent 记忆,因为很多记忆需要人类能看见和修正:之前的设计讨论、踩坑记录、项目约束、用户偏好。Markdown 让 memory 变成 repo-local artifact,而不是黑盒数据库。

适合借鉴的点:

主要风险:

tencentdb-agent-memory:长期记忆和短期 offload 合并

tencentdb-agent-memory 最有辨识度的是同时处理两类“记忆”:

它把召回分成不同注入位置:

before_prompt_build
  → L1 dynamic recall as prependContext
  → L2 scene navigation / L3 persona as appendSystemContext
  → memory tools for active drill-down

这个设计很工程化:动态 L1 经常变,如果放进 system 前缀容易击穿 prompt cache;L2/L3 更稳定,适合系统上下文。Context offload 则把大工具日志从 prompt 里挪到 refs/*.md,只注入 MMD 节点和摘要,让 Agent 需要时按 node_id 下钻。

适合借鉴的点:

主要风险:

核心难点

1. 写入质量:不是所有上下文都值得记住

Agent 的原始上下文充满噪声:命令输出、临时错误、重复尝试、token 统计、日志片段、无效搜索结果。如果系统把这些都写入长期 memory,检索层会被污染。

工程上常见解法:

核心判断:memory write 应该是一个 filtering boundary,不是日志落盘。

2. 延迟隔离:记忆系统不能阻塞 Agent

所有成熟设计都在保护 Agent 主路径:

如果 memory 系统把每次 tool call 都变成同步 LLM 请求,用户会把它关掉。这也是 agentmemory 默认零 LLM、context injection 默认关的根本原因。

3. 真相与索引一致性:索引必须可丢弃

Memory 系统经常要面对:

比较稳的设计是:truth store 明确、index 可重建。memsearch 的 Markdown truth、tencentdb-agent-memory 的 JSONL/files truth、agent-recall 的 SQLite truth 都是这个方向。claude-mem 的双索引则需要 watermark 和同步状态治理。

4. 冲突和时间:长期事实会变

Agent memory 里最危险的是“曾经正确的事实”。例如客户偏好、项目架构、API 版本、负责人、部署路径都会变化。

不同项目的处理方式:

纯向量库很难表达“旧事实已被新事实覆盖”。这就是结构化 metadata、时间字段、scope 和 conflict handling 必须进入核心模型的原因。

5. Scope 和权限:多 Agent 不是多一个 user_id

多项目、多客户、多 Agent 的 memory 不能只靠 user_id 分库。真实问题包括:

agent-recallMCPBridge 是最清晰的参考:底层 store 不做权限,MCP 边界做读写过滤。powermem 则把 scope/permission/privacy/collaboration 做成组件级控制器,更适合企业服务。

6. 上下文注入:召回成功不等于应该自动塞进 prompt

自动注入最容易引发三个问题:

项目里的几种策略:

工程判断:默认注入应该短、稳定、可解释;深层证据应该工具化。

7. 检索融合:RRF 权重和过滤比模型更难调

Hybrid search 的难点不是“同时跑两路”,而是结果融合后的质量治理:

powermem 的 adaptive weight normalization 是值得注意的细节:按实际命中路径重新归一化权重,避免多路都有结果的文档天然占优。agentmemory 的 BM25/vector/graph RRF 更轻量,适合本地规模。memsearch 把 dense/BM25 放到 Milvus hybrid_search,适合把检索复杂度外包给向量数据库。

8. 可观测和可恢复:memory 系统需要自己的运维面

一旦 memory 常驻后台,就会出现普通插件没有的问题:

agentmemory 的 viewer、metrics、index persistence,powermem 的 Dashboard/audit/telemetry,claude-mem 的 worker service/viewer,都是在补这个运维面。Agent Memory 如果没有可观测性,很快会变成“模型偶尔想起一些不知道哪里来的东西”。

设计分型

分型 代表项目 架构重心 适合场景
宿主插件型 claude-mem, tencentdb-agent-memory OpenClaw 插件 hook 生命周期、自动注入、宿主协议 给单个 agent runtime 加强记忆
MCP 结构化记忆型 agent-recall tool semantics、scope、entity graph 多项目/多客户知识保存
本地常驻 worker 型 agentmemory 多入口、统一服务、viewer、低成本默认 多个 coding agent 共享记忆
应用中间件型 powermem SDK/API、多后端、多租户、provider matrix 产品化 LLM app / 企业 memory service
Markdown truth 型 memsearch 可审计 source-of-truth、可重建索引 coding agent 历史会话回溯
分层语义金字塔型 tencentdb-agent-memory L0 证据 → L1 事实 → L2 场景 → L3 画像 长期 persona + 短期 offload 合一

这些分型可以组合。例如一个理想的 coding agent memory 可能采用:

但不要一开始就把所有能力塞进一个系统。memory 架构最怕的是“写入太宽、检索太黑、注入太猛”。更稳的落地顺序是:

  1. 明确 truth store。
  2. 做轻量写入和可审计日志。
  3. 加 BM25/FTS 搜索。
  4. 再加 vector/hybrid。
  5. 最后做自动注入和 LLM 压缩。

选型建议

你的目标 优先看 工程关注点
只想给 Claude Code 加个人长期记忆 claude-mem hook-worker 边界、SQLite/Chroma 同步、SessionStart 注入
想要最清晰的本地 SQLite + MCP 结构化记忆 agent-recall scope hierarchy、MCPBridge、bitemporal slots
想让多个 Agent 共用本地服务,并有 REST/MCP/viewer agentmemory iii-engine 总线、默认零 LLM、三流 RRF、index persistence
想把 memory 做成应用中间件或企业服务 powermem StorageAdapter、provider matrix、多租户 controller、hybrid/RRF
想保留 Markdown 事实源,并用 Milvus 做可重建索引 memsearch chunk ID、Markdown anchor、Milvus dense/BM25、expand
想研究 OpenClaw/Hermes 的分层记忆和 context offload tencentdb-agent-memory L0-L3 pipeline、offload refs/MMD、prompt cache 分层注入

当前知识库缺口