TencentDB-Agent-Memory 深度解读
“零依赖的四层语义金字塔——用 SQLite 一个文件装下整套 Agent 记忆”
一句话定位
腾讯开源的 Agent 记忆引擎,用四层语义金字塔(L0 原始对话 → L1 原子事实 → L2 场景块 → L3 用户画像)逐层提炼对话,同时做到零外部 API 依赖——只需 Node.js + SQLite + sqlite-vec。
设计哲学上最精彩的地方
DB-Agent-Memory 的核心洞察是:记忆不是”存了什么”,而是”提炼到什么程度”。想象一个秘书记录老板开会:L0 是逐字速记,L1 是提取”下周三去上海”这样的原子事实,L2 是把多个事实归纳成”Q3 出差计划”场景块,L3 是提炼出”偏好高铁出行、住五星酒店”这种画像级认知。这种四层逐步蒸馏在 7 个项目中独一无二——mem0 只做到 L1,Letta 只分 core/archival 两层,Graphiti 把事实放在图里但没有显式层级。
第二个精彩设计是 MMD(Memory Meta Description)注入。它把记忆分成两个区域塞进 prompt:前部放变化慢的 L3 画像和 L2 场景块(稳定区),后部放变化快的 L1 事实和 L0 近期对话(动态区)。因为 LLM 的 KV Cache 是前缀匹配的,稳定区不变 = Cache Hit,直接省掉一大段重计算的推理成本。在其他 6 个项目中,没有任何一个在”记忆怎么注入 prompt”这个层面做过优化。
Host-Adapter 架构——记忆与 Agent 框架解耦
DB-Agent-Memory 把系统拆成 Host(管记忆生命周期)和 Adapter(对接不同 Agent 框架)两个角色。同一套记忆可以同时被 OpenClaw、Hermes、MCP Server 调用,记忆数据不锁死在任何一个 Agent 框架上。这在 7 个项目中是独一无二的设计——mem0 和 Letta 的记忆都和自身框架深度耦合,换框架就要重新导入数据。
零外部依赖的取舍
只依赖 SQLite + sqlite-vec 意味着一个 npm install 就能跑,备份就是复制一个 .db 文件。但代价也明确:向量检索性能上限受限于 sqlite-vec(和 FAISS/Milvus 不在一个量级),没有图数据库就做不了复杂关系推理,L2/L3 的提炼完全靠 LLM 而非图遍历——LLM 提取质量就是记忆质量的天花板。这是一个有意识的取舍,不是能力缺失。
竞争位置
7 个项目中代码量最小(~90 个 TypeScript 文件),通读成本最低,学习曲线最友好。和 mem0 形成最鲜明对比:mem0 追求”接最多的后端”,DB-Agent-Memory 追求”不接任何外部后端”。在犀牛鸟参与视角下,创新空间明确——每一层的实现都有优化余地,MMD 的 token 预算分配可以写论文。
本地代码结构
TencentDB-Agent-Memory/
src/
host/
memory-host.ts # Host 核心,管理记忆生命周期
layers/
l0-conversation.ts # L0 原始对话存储
l1-atomic-fact.ts # L1 原子事实提取
l2-scenario.ts # L2 场景块聚合
l3-profile.ts # L3 用户画像提炼
adapter/
openclaw-adapter.ts # OpenClaw Agent 适配器
hermes-adapter.ts # Hermes Agent 适配器
mcp-adapter.ts # MCP Server 适配器
retrieval/
mmd-builder.ts # MMD 注入构建(稳定区/动态区)
hybrid-search.ts # BM25 + 向量混合检索
storage/
sqlite-store.ts # SQLite + sqlite-vec 存储层
tests/
package.json
本地关键文件
| 文件 | 用途 |
|---|---|
src/host/memory-host.ts |
Host 核心,协调 L0→L3 四层生命周期 |
src/host/layers/l1-atomic-fact.ts |
LLM 驱动的原子事实提取逻辑 |
src/retrieval/mmd-builder.ts |
MMD 构建器,稳定区/动态区分区 + KV Cache 优化 |
src/retrieval/hybrid-search.ts |
BM25 + sqlite-vec 向量的混合检索 |
src/adapter/mcp-adapter.ts |
MCP Server 适配器,暴露记忆能力给外部 AI 工具 |
src/storage/sqlite-store.ts |
零外部依赖的 SQLite 存储层 |