解决 AI Agent 记忆"不够用、存不下、查不到"三难问题的实践方案。

问题背景

AI Agent(如 Hermes)的持久记忆面临矛盾:

  1. 常驻记忆有容量上限(默认 2000 字符,可扩容)— 存不了多少事实
  2. 全部塞进上下文太贵——每轮对话都要重新发送,按 token 计费
  3. 低频信息不能丢——设备配置、排障细节、API 用法,几周后可能还要用

分层方案

┌─────────────────────────────────────────────┐
│  第一层:常驻记忆(memory)                     │
│  · 高频事实:IP/端口/凭据位置/用户偏好/关键配置 │
│  · 默认2000字符可扩容,每轮注入上下文          │
│  · 只放精简核心                               │
├─────────────────────────────────────────────┤
│  第二层:外部知识库(fact_store)               │
│  · 低频背景:设备配置/排障细节/软件特性/API用法 │
│  · 大容量、不衰减、不删除、不占 token          │
│  · 结构化存储,支持实体关联/组合查询            │
├─────────────────────────────────────────────┤
│  第三层:会话历史(session db)                 │
│  · 完整对话记录,可全文检索                    │
│  · 用于回溯"当时怎么做的"                     │
└─────────────────────────────────────────────┘

核心机制

1. 自动分层存储

  • 先扩容常驻记忆(默认 2000 → 8000 字符),容纳更多高频事实
  • 扩容后仍放不下的低频信息 → 外部库
  • Agent 判断信息频度:高频 → 常驻 memory,低频 → 外部库
  • 存储时自动打标签(tags),支持实体关联

2. 索引锚点(关键设计)

外部库内容不注入上下文(不占 token),但需要"知道有这回事"才能去查:

常驻 memory 里留一行:
"低频索引: 画图环境→外部库条目; dash改密码→外部库条目; uv缓存→外部库条目; ..."

→ 每轮注入的是索引(几十字符),真正内容在外部库,需要时按编号查

3. 容量自动管理

  • 常驻记忆写满时,自动评估最不常用条目 → 迁移到外部库 → 留索引 → 腾出空间
  • 避免"记忆满了写不进新东西"

4. 中文搜索的坑

外部库默认全文搜索(FTS5)对中文不友好(整句被当 1 个 token,搜不到)——用 ASCII 锚点(如 memory-anchor:画图环境)作为标签解决,中文关键词也能定位。

效果

指标结果
常驻记忆精简高效,只放高频核心
低频信息不丢失,按索引可查
token 成本只花索引的几十字符,外部库 0 成本
查询支持实体探针(probe)/组合推理(reason)

适用场景

  • AI Agent / 聊天机器人需要长期记忆
  • 大量低频配置信息不想占上下文
  • 多会话、跨天使用的场景

参考

  • Hermes Agent 记忆机制:https://hermes-agent.nousresearch.com/docs
  • SQLite FTS5 中文检索限制:https://sqlite.org/fts5.html