Agent 记忆

记忆金字塔:为什么 Agent 需要四层记忆

本期回答一个根本问题:既然记忆就是一堆事实,为什么不直接存成一个列表?

记忆金字塔:L0–L3 四层渐进式记忆 全屏查看 ↗

最近一直在阅读TencenDB-Agent-Memory,想整理下TDAM的实现思路,加深对于agent memory功能的理解。

一、问题的起点

OpenClaw出现之后,出现了Hermes Agent,最重要的功能就是关于记忆的能力,让agent能够记住用户输入的内容,不需要反复的向用户提及一些固定的内容。那么memory功能又是如何实现的呢?

我们从项目官方 README 的一个问题出发:

我们从一个很实际的问题出发:怎样减少使用 Agent 时的重复工作?

项目背景讲过了,不该换个 Session 再讲。文档读过了,不该每个 Agent 从第一页重读。一套做法已经跑通,不该下次再摸索一遍。

所以这里的 Memory 不只是"记住对话"。凡是能让下一个 Agent 少走弯路的信息,都应该被保存、组织并复用。

这句话拆开看,包含三个诉求:保存(留证据)、组织(找得到)、复用(用得上)。

而记忆天然有个矛盾:你想要证据完整,就得把原话一字不改地存下来;你想省 Token,就得把它们压缩成精简摘要。同一份数据没法既是原文又是摘要。

于是官方给出的解法是——分层:从底到顶越来越精简,官方把四层结构称为记忆金字塔

二、记忆金字塔:L0 → L3

官方 README 给出了一张非常凝练的分层表:

层级保存什么主要用途
L0 Conversation原始对话与完整上下文核对原话、时间和来源
L1 Atom从对话提取的事实、偏好、约束与事件精确召回可执行信息
L2 Scenario围绕项目或场景组织的知识块快速恢复一个工作场景
L3 Core / Persona长期画像、稳定模式与高层认知让 Agent 迅速进入用户和团队语境

——《README_CN.md · 技术实现 · 1. 记忆不是平铺记录,而是逐层生长》

一句话概括四层的分工:

  • L0 留证据:流水账,每次对话结束把原话写进本地文件,一字不改、不做任何提炼。
  • L1 保精度:记忆卡片,相当于"会议纪要",每张卡片只记一件事,带类型与优先级。
  • L2 保情境:场景档案,把同一情境下的卡片打包成一份文件,按情境组织、不按日期。
  • L3 保效率:人格摘要,描述"这个用户是谁",是四层里唯一每次新会话无条件注入的。

引用自官方社区解读(《拆解 TencentDB Agent Memory 源码》):“L0 是流水账……L1 是记忆卡片……L2 是场景档案……L3 是人格摘要。”

三、为什么底层是数据库、高层是 Markdown?

这是官方实现里一个非常有意思的取舍,体现在存储方式上:

存储介质谁在读
L0l0_conversations 表 + JSONL 文件程序检索(向量 / FTS)
L1l1_records 表 + vec0 向量表 + FTS5程序检索
L2scene_blocks/*.md 场景文件 + scene_index人可以直接读、直接改
L3persona.md 全实例一份人可以直接读、直接改

官方架构文档的原话是:

关键点:L2/L3 的"存储"是文件优先(md 文件是权威,store 里的 profiles 表是同步副本,供 TCVDB 等远端后端拉取);L0/L1 的存储由 IMemoryStore 抽象接管

这背后的逻辑很清晰:机器要的是可检索,人要的是可理解。 L0/L1 面向程序,天然进数据库和索引;L2/L3 面向人(用户和团队要审阅、修正记忆),所以是 Markdown 文件——你在面板上看到的每一份场景档案、每一份画像,本质上就是磁盘上的一个 .md

四、四层还能串起来:下钻溯源

四层不是四座孤岛,而是一条证据链

L3 人格摘要 ──下钻──▶ L2 场景档案 ──下钻──▶ L1 记忆卡片 ──下钻──▶ L0 原始对话
(是谁)              (什么情境)            (哪条事实)          (原话 + 时间)
  • L1 卡片带 source_message_ids,能一路追到 L0 的某条原始消息;
  • L2 场景文件由 L1 卡片(scene_name 字段)分组而来;
  • L3 画像由 L2 场景内容归纳而来。

官方 README 对分层召回策略的总结是:

生成和召回都分层:平时用 L2 / L3 快速进入语境,需要具体事实时通过 BM25、向量检索与 RRF 回到 L1 / L0。结果还会经过条数、字符预算和超时限制,避免记忆反过来占满上下文。

平时给你高密度摘要,纠错时给你完整证据链——这就是"分层"带来的核心价值。

五、与「聊天历史」「普通 RAG」的对比

官方用一张表说明了 TDAM 的定位差异:

聊天历史普通 RAGTencentDB Agent Memory
跨会话理解用户✅ Chat Memory
沉淀可执行经验✅ Skill
文档结构与关系△ 切片检索✅ Wiki + Link Graph
代码调用与影响范围△ 文本命中✅ CodeGraph
Owner / 版本 / 状态
团队分享与 Agent 配装
私有 / 团队 / ACL

RAG 解决"能查到什么";Team Memory 还要解决"谁可以用、哪个版本有效、应该给哪个 Agent"。L0–L3 是这套资产体系在 Chat Memory 这一资产类型上的落地形态。

六、本期小结

  • 记忆无法既是原文又是摘要 → 用四层金字塔拆解矛盾:L0 留证据、L1 保精度、L2 保情境、L3 保效率。

  • 底层(L0/L1)进数据库、可全量检索;高层(L2/L3)写成 Markdown、人可直接读改。

  • 四层串成证据链:平时自上而下取摘要,纠错时自下而上查原文。

  • 参考来源:https://github.com/TencentCloud/tencentdb-agent-memory

Agent Memory记忆分层TencentDB Agent Memory

← 返回AI 笔记