📄 文档管理系统

← 返回列表

TencentDB Agent Memory 突然火了:让 Agent 记住该记的,让人把注意力留给判断、创造和真正有价值的工作

技术文章 #Agent #AI #记忆系统 #OpenClaw #Hermes #腾讯开源 📅 创建:2026-05-18 02:40:15 🔄 更新:2026-05-17 19:12:10
👁️ 预览 & 复制到公众号 ✏️ 编辑

TencentDB Agent Memory 突然火了:让 Agent 记住该记的,让人把注意力留给判断、创造和真正有价值的工作。

作者:小创


上个月给它跑的 SOP,这周又忘得一干二净;让它处理个多步骤任务,每步都得把项目背景重新交代一遍;20 轮对话跑下来,Token 账单直接爆表——这不是你调教得不够,是 Agent 天然的痛:上下文越来越长,记忆越来越糊,模型读的全是不相干的噪音。

这不是个例。这是目前所有长程 Agent 的通病:上下文越来越长,记忆越来越糊,Token 越烧越多。

最近腾讯放出了一个开源方案,叫 TAgent Memory(TencentDB Agent Memory),直接把这个问题的解决思路拉高了一个层次——不是简单地往向量数据库里塞历史记录,而是搞了一套"分层 + 符号化"的记忆系统。

实测数据挺吓人的:WideSearch 场景 Token 消耗直接降了 61.38%,任务通过率相对提升 51.52%(数据来源:项目官方 README,第三方验证暂无)。

今天把核心设计掰开说说,以及怎么接进你的 Agent。

平铺向量为什么不够用

大多数 Agent 的记忆方案,说白了就是:把对话切片 → 灌进向量数据库 → 召回时做语义相似度匹配。

听着合理,但实际跑长程任务就知道疼了。

第一,平铺的向量没有层次。你让 Agent"记住我喜欢用中文回复",结果召回出来的可能是七八条零散对话碎片,Agent 得自己拼凑上下文,召回精度全靠玄学。

第二,历史堆砌不可逆。对话一多就开始做摘要,但摘要完了原始信息就没了——一旦 Agent 对某条记忆的理解有偏差,你连追证据的地方都没有。

第三,Token 爆炸。工具调用日志、搜索结果、代码片段,这些厚重的内容全往上下文里塞,模型读的都是"噪音"而不是"信号"。

TAgent Memory 的思路很直接:记忆要有层次,压缩要有路径,召回要有结构。

分层记忆:L0 到 L3,层层提炼但条条可溯

这是 TAgent Memory 最核心的设计。

它把记忆拆成了四层,每一层都有自己的使命:

层级 名称 存什么 文件形式
L0 Conversation 原始对话记录,最完整的证据 refs/*.md
L1 Atom 结构化事实片段,提取关键事实 *.jsonl
L2 Scenario 场景块,多个 L1 的归纳 Markdown(可直接读)
L3 Persona 用户画像,偏好和习惯总结 persona.md

这个设计最妙的地方在于:每层都可完整溯源。

什么意思?你在 L3 看到一条"用户偏好用中文输出",这不是一条凭空生成的摘要——它是从 L2 的 Scenario 归纳来的,Scenario 又是从 L1 的多个 Atom 提炼的,Atom 则对应 L0 的原始对话。

也就是说,记忆不是压缩,是蒸馏。你可以沿着 Persona → Scenario → Atom → Conversation 这条链路一层层往下追,还原出完整的推理过程。

这一点太重要了。很多记忆系统出问题,你只能看到一串向量分数,不知道哪里错了。TAgent Memory 让你像查档案一样,沿着链路定位到底是哪一层出了问题。

符号化记忆:上下文只塞 Mermaid,细节按需下钻

说完分层,再来说另一个核心创新——符号化记忆

长程任务最费 Token 的是什么?是工具调用日志。搜索结果、代码片段、报错信息,这些东西既厚重又没营养,但模型必须读完才能继续。

TAgent Memory 的做法是:

完整工具日志 → 卸载到外部文件系统(refs/*.md)→ 只在上下文里留一张轻量级的 Mermaid 任务地图(带 node_id)。

graph LR
    Log["繁杂冗长的过程日志<br/>(几十万 Token)"] -->|"1. 卸载完整原文"| FS[("外部文件系统<br/>(refs/*.md)")]
    Log -->|"2. 提取关系"| MMD["Mermaid 符号图谱<br/>(带 node_id)"]

    MMD -->|"3. 轻量级注入"| Agent(("Agent 上下文<br/>(几百 Token)"))
    Agent -. "4. 随时按 node_id 下钻恢复原文" .-> FS

    style Log fill:#f1f5f9,stroke:#94a3b8,stroke-dasharray: 5 5
    style FS fill:#f8fafc,stroke:#cbd5e1
    style MMD fill:#eff6ff,stroke:#3b82f6,stroke-width:2px
    style Agent fill:#fffbeb,stroke:#f59e0b,stroke-width:2px

Agent 看到的是一张拓扑清晰的任务图,每个节点带一个 node_id。它可以沿着图的逻辑往下推理,如果需要查某个步骤的完整细节,grep 一下对应的 node_id,秒级找回原文。

这样一来,上下文只保留几百 Token 的"地图",原始日志全部卸载到文件系统,需要时再下钻。官方数据显示 WideSearch 场景 Token 消耗降低了 61.38%,任务通过率从 33% 提升到 50%。

接入方式:OpenClaw 插件,零配置跑起来

TAgent Memory 目前官方支持 OpenClawHermes 两个框架。先说 OpenClaw,零配置门槛极低。

第一步:安装插件

openclaw plugins install @tencentdb-agent-memory/memory-tencentdb
openclaw gateway restart

第二步:启用

// ~/.openclaw/openclaw.json
{
  "memory-tencentdb": {
    "enabled": true
  }
}

默认使用本地 SQLite + sqlite-vec 后端,不需要任何 API key。

装完之后,插件会自动完成:对话录制 → 记忆提取 → 场景归纳 → 用户画像生成 → 下一轮对话前召回。全程不需要你写一行代码。

第三步(可选):开启短期记忆压缩

这个功能需要版本 ≥ 0.3.4,而且要手动注册一个 slot 并跑一个 patch 脚本:

//  openclaw.json  plugins.slots 里加一行
{
  "plugins": {
    "slots": {
      "contextEngine": "openclaw-context-offload"
    }
  }
}

然后执行 patch:

bash scripts/openclaw-after-tool-call-messages.patch.sh

patch 每个 OpenClaw 安装只需跑一次,升级后建议重新跑。

⚠️ 注意:这个 patch 注入了一个 after-tool-call 消息钩子,让工具调用结果能被正确卸载与回溯。不跑的话,短期记忆压缩功能不会生效,但长期记忆(L0→L3)不受影响。

Hermes 模式:Docker 一条命令

如果你用的是 Hermes,也有官方适配,通过 Docker 跑:

# 构建
docker build -f Dockerfile.hermes -t hermes-memory .

# 运行(腾讯云 DeepSeek-V3.2 默认值,只需要传 API_KEY)
docker run -d \
  --name hermes-memory \
  --restart unless-stopped \
  -p 8420:8420 \
  -e MODEL_API_KEY="你的KEY" \
  -v hermes_data:/opt/data \
  hermes-memory

# 验证 Gateway
curl http://localhost:8420/health

# 进入对话
docker exec -it hermes-memory hermes

镜像内置了腾讯云 DeepSeek-V3.2 的默认值,如果你用这个模型,MODEL_BASE_URLMODEL_NAMEMODEL_PROVIDER 都可以省略。

白盒调试:记忆不是黑盒,出了问题是能查的

这是我觉得最值得强调的一点。

很多记忆系统,召回错了你就只能干瞪眼——分数在那儿摆着,但不知道为什么召回了这条。

TAgent Memory 所有中间产物都存在 ~/.openclaw/memory-tdai/ 目录下,可以直接打开查看

~/.openclaw/memory-tdai/
├── refs/           # L0 原始对话 Markdown
├── L1/             # L1 结构化事实 JSONL
├── L2/             # L2 场景归纳 Markdown(可直接读!)
│   └── *.md
├── L3/             # L3 用户画像
│   └── persona.md
└── vector.db       # sqlite-vec 向量索引

L2 是 Markdown,L3 是 Markdown,连 Mermaid 任务画布都是人能看懂的格式。调试记忆系统不再是翻数据库,而是读文档。

出了问题,你打开 persona.md 看看 Agent 总结的用户偏好对不对;再顺着 node_id 追溯到 refs/ 里的原始日志,完整还原推理链路。

实测数据怎么看(重要)

项目官方 README 放出了一组 Benchmark 数据,我整理如下(来源:项目官方 README,非第三方验证):

记忆类型 测试集 原始通过率 加插件后 相对提升 Token 降幅
短期记忆 WideSearch 33% 50% +51.52% −61.38%
短期记忆 SWE-bench 58.4% 64.2% +9.93% −33.09%
短期记忆 AA-LCR 44.0% 47.5% +7.95% −30.98%
长期记忆 PersonaMem 48% 76% +59%

WideSearch 场景数据最漂亮,51.52% 的通过率提升和 61.38% 的 Token 降幅主要来自短期记忆压缩(Context Offload)。这个功能开启后,Mermaid 图谱替换了原始工具日志,上下文体积大幅缩水。

SWE-bench 和 AA-LCR 的提升相对温和,但 Token 降幅依然可观。

⚠️ 提醒:以上数据均来自项目官方 README。TAgent Memory 目前的版本是 v0.3.5(npm,2026-05-16),GitHub tag 显示的是 v0.3.4,npm 包比源码新。尚未找到第三方独立评测,建议谨慎参考。

和向量数据库平铺方案的本质区别

说完技术,再从直觉上理一下区别。

传统方案:对话 → 向量 → 召回(扁平的,丢了证据,不可逆)

TAgent Memory:对话 → 分层蒸馏 → 结构化召回(带层次,可溯源,可展开)

最核心的差异是信息没有被压缩消失,而是被结构化了。每一条记忆都有明确的层级和出处,Agent 既可以读高层画像做快速判断,也可以在需要时展开到底层查证。

写在最后

TAgent Memory 解决的不是"Agent 记不住"的问题,而是"Agent 记住的到底是啥、能不能信"的问题。

分层记忆解决了经验沉淀的结构性,符号化上下文解决了长程任务的 Token 爆炸,白盒调试解决了线上问题的定位难题。三件事本来是互相牵制的,它硬是给拧到一块去了。

当然,目前 v0.3.5 能力还在快速迭代中,Roadmap 上还有"记忆可迁移""Skill 自动生成""可视化调试面板"没上线。但对于 OpenClaw 和 Hermes 用户来说,现在装上已经能拿到实实在在的收益了。

你在用 Agent 时被"记性差"折磨过吗?评论区说说你的场景。


💬 评论区

加载中...