课题三:分层记忆系统与长期记忆管理

Agent 记忆系统

优先级:P1 — 所有 Agent 能力的底层基础设施,直接延续课题二的索引层

当前情况

  • 课题二已完成跨 channel 上下文共享的理论设计,其倒排索引层可作为记忆系统的基础设施
  • 社区方案(MemGPT/Letta)验证了分层记忆的有效性,但实现与现有项目架构差异大
  • GenericAgent memory/ 目录有 keychain.py、ocr_utils.py 等模块,但以工具辅助为主,非统一记忆系统
  • 无向量存储,语义检索依赖 LLM 自身上下文
  • 无实体提取/关系存储,信息以原始文本形式存在
  • ✅ 2026-06-07:在 Hermes Agent 上完成了记忆系统重构——7 区设计、生命周期标记、自动维护机制。纯文本+结构化分区方案已落地,详见下方实践验证。

实践验证:Hermes Agent 记忆重构(2026-06-07)

背景

Hermes Agent(王大锤)的 Memory 系统长期处于无结构状态:62 条混杂条目,7,879 字,占比 98.5% 限额。User Profile 同样超限(4,457/2,750)。需要一次结构性迁移。

设计方案

7 区模型:

IDENTITY → PROJECTS → RULES → QUICKREF → PENDING → LESSONS → GROWTH
  • IDENTITY — 角色定义、Agent 分工一句话
  • PROJECTS — 当前活跃项目上下文
  • RULES — 核心行为规则(含边界四档、用户偏好、维护规则)
  • QUICKREF — 工具设施一句话速查 + “详见 XX skill” 引用
  • PENDING — 待推进事项,带 [DUE:日期] 标记,会话结束自动检查
  • LESSONS — 近期教训(按日期倒序),超 5 条自动合并最旧到 RULES
  • GROWTH — 自我认知(known_gaps / growth_edges / open_questions)

生命周期标记: 每条标记 [PERMANENT|LONG|CONTEXTUAL|LOG|TEMP],TEMP 条带 [EXPIRY:日期],过期后自动清理。

落地成果

指标重构前重构后变化
Memory 条目数62 条7 区90% 减少
Memory 字数7,8792,059-74%
User Profile 字数4,457670-85%
总注入12,3362,534-79%

🆕 2026-06-08 延展:语义缓存作为记忆系统的外延

🆕 2026-06-14 新增参考:Memory Caching — RNNs with Growing Memory

论文: Memory Caching: RNNs with Growing Memory(arXiv:2602.24281)

核心思想: 将序列分段,缓存每段结束时的记忆状态,让 RNN 的有效记忆随序列长度增长。 四种聚合策略:Residual Memory(简单求和)、Gated Residual Memory(按相关性加权)、 Memory Soup(参数融合)、Sparse Selective Caching(MoE top-k 选择)。 复杂度 O(NL),介于 RNN O(L) 和 Transformer O(L²) 之间,可控可调。

关联课题: 课题三(核心)、课题二(跨 session 连续性)、课题十三(成本可控)、 课题十五(SSC 的 top-k 路由 ≈ 快思考筛选)、课题一(记忆架构演进)

对我们 Hermes 的启发:

  • 当前 MEMORY.md 拆分多文件(MEMORY/PENDING/LESSONS)+ 需要时读取, 与 SSC(稀疏选择性缓存)的思路一致
  • MC 的 O(NL) 复杂度模型可作为未来记忆系统设计的理论参考
  • 分段缓存的 checkpoint 思想可以用于长 session 的中间状态缓存

Compound AI 插件中的① 语义缓存层与课题三的记忆系统存在天然继承关系:

记忆系统(课题三):               语义缓存(Compound AI):
- 长期:IDENTITY / PROJECTS / RULES   →  无(不可缓存)
- 短期:PENDING / LESSONS            →  无(任务特定)
- 瞬时:会话上下文                    →  语义缓存(相似问题复用)

核心差异:记忆是被动注入的(agent 每次读 MEMORY.md),缓存是主动查询的(agent 来问之前先查是否见过类似问题)。两者互补而非替代。

可能的融合方向

  1. 缓存层复用记忆系统的 embedding 基础设施(本地 bge-m3)
  2. 记忆系统中的 LESSONS 区(教训)可跨 session 预热缓存
  3. 缓存命中率可作为”这个问题有多常见”的信号,辅助记忆系统的 PENDING 优先级排序

详见 Compound AI 插件设计(待创建)。

自动维护体系

机制说明
会话内RULES 维护规则每次操作按分区 add/replace,同一话题用 replace 而非 add
定时cron memory-auto-maintenance每周一 3:00 自动巡检过期条目、LESSONS 压缩、容量预警
兜底memory-maintenance skill可手动调用执行清理或健康检查

关键决策记录

  1. 不用向量存储 — Hermes 的 Memory 是轻量系统 prompt 注入,不是数据库。轻量结构化分区 + 生命周期标记 比向量检索更适合场景
  2. PENDING 区不设硬上限 — 实际很少超过 5 条,到 8 条时提醒即可
  3. 过期条目标 [OVERDUE] 而非直接删 — 连续两轮 OVERDUE 才自动删除,留一次观察期
  4. 不设 [P1/P2/P3] 优先级[DUE:日期] 就是天然优先级

与研究方向的关系

  • 研究方向 1(记忆分层模型)→ 7 区模型是 Hermes 场景下的实际分层
  • 研究方向 4(检索策略)→ 按需注入 + QUICKREF 引用,非全部注入
  • 研究方向 5(压缩遗忘)→ [PERMANENT|LONG|CONTEXTUAL|LOG|TEMP] 实现了五级遗忘策略
  • 研究方向 6(记忆生命周期)→ [EXPIRY] + [OVERDUE] 机制部分验证了过期清理
  • 可探索方向(过期验证/刷新)→ [OVERDUE] + cron 自动巡检 提供了实操方案

可探索方向

  • 工作记忆、短期、长期的分界阈值如何确定
  • 向量存储选型:ChromaDB vs SQLite+vss vs LanceDB 在 Agent 场景下的性能实测
  • 实体提取的准确率对下游检索的影响
  • 记忆写入的去重策略:同名实体信息如何合并
  • 固定知识 vs 动态信息的区分存储与刷新策略——Agent 如何知道”当时的信息现在是否还成立”
  • Agent 时间观念的实现:时间戳、时效性标记、过期自动验证/刷新机制
  • 检索时上下文窗口的分配——记忆占多少,当前对话占多少
  • 不同压缩策略(抽取式、生成式、混合式)的效果对比
  • 渐进式迁移方案:边用边建索引,还是停机重建

背景

课题二解决了跨 channel 上下文共享,但未深入回答:Agent 在极长对话(数万轮)中如何保持高质量响应?关键在于分层的记忆系统设计。GenericAgent 已有 memory/ 目录雏形,但偏简单——需要一个系统化、可伸缩的记忆系统,支撑长对话、跨 session、多模式交互。

研究方向

1. 记忆分层模型

  • 工作记忆 — 当前对话窗口内的活跃上下文,约 4K-16K tokens
  • 短期记忆 — 最近数轮对话的摘要,可压缩后保留
  • 长期记忆 — 用户画像、关键事实、历史决策,持久化存储
  • 记忆重要性评分 — 哪些信息值得保留,哪些可以遗忘

2. 存储层设计

  • 向量化存储(ChromaDB / SQLite + 向量插件 / Lancedb)
  • 结构化存储(SQLite 存储实体关系、事实三元组)
  • 混合存储:向量用于语义检索 + 结构化用于精确查询
  • 与课题二倒排索引的集成

3. 记忆写入策略

  • 对话中自动提取关键信息(实体、关系、用户偏好)
  • 写入时机:实时 vs 批处理 vs 事件触发
  • 去重与更新:同一实体的新信息如何合并到已有记录

4. 记忆检索策略

  • 主动预取(即将讨论的话题相关记忆)
  • 按需懒加载(模糊引用时触发检索)
  • 检索排序:时间衰减 + 相关性 + 重要性加权
  • 检索量控制:避免无关记忆污染上下文

5. 摘要压缩与遗忘

  • 固定窗口滚动摘要 vs 事件驱动的关键帧式摘要
  • 层级摘要(每 N 轮生成摘要 → 每 M 个摘要生成更高级摘要)
  • 基于时间衰减的自动遗忘
  • 基于重要性阈值的筛选
  • 用户显式标记”记住/忘记”
  • 与间隔重复(Spaced Repetition)的结合

6. 记忆生命周期

  • 短期 → 长期 → 冷备的分层转移
  • 用户显式管理接口(查看/编辑/删除记忆)
  • 记忆过期与清理策略

7. 与现有架构集成

  • 与 agent_loop.py 的 9 个原子工具的衔接
  • 与 llmcore.py 多模型支持的适配
  • 与 bot 接口(Telegram/微信等)的 session 映射
  • 最小侵入改造:逐步替换而非重写

关联课题

参考资料

  • MemGPT / Letta 的层级记忆设计
  • Human-like memory systems (Atkinson-Shiffrin model)
  • 间隔重复算法 (SM-2, FSRS)
  • ChromaDB / LanceDB 的向量存储方案对比
  • GenericAgent 现有 memory/ 目录的代码
  • mem0ai/mem0 — 通用 Agent 记忆层(55K stars)
  • RAGFlow — 开源 RAG 引擎(75K stars)
  • Memvid — serverless 单文件记忆系统,简化 RAG pipeline

经典理论映射

互补学习系统(CLS)(McClelland, McNaughton & O’Reilly, 1995)—— 这是脑科学对记忆系统最重要的贡献之一。海马体和新皮层构成互补的两套学习系统:海马体快速编码新经验(一次经历就能学会),新皮层通过重复暴露慢慢将模式整合为结构化知识。海马体容量有限但速度快,新皮层容量巨大但速度慢。这正是”热路径→增量索引→冷备压缩”架构的生物原型:

  • 海马体 = 增量倒排索引:快速索引新对话,不存储完整内容
  • 新皮层 = 冷备压缩存储:慢速整合,长期保存
  • 睡眠(记忆重放)= 离线批量压缩和索引优化

CLS 的一个关键发现是模式分离 vs 模式完成:海马体的齿状回负责模式分离(区分相似经历避免干扰),海马体的 CA3 区负责模式完成(从部分线索重建完整记忆)。对应到记忆系统:索引应该能区分相似的对话片段(避免检索混淆),同时在模糊查询时能通过部分关键词重建完整上下文。两个功能在同一个系统中协同而非互斥。

睡眠记忆巩固 — 睡眠中被激活的海马体神经元以 5-10 倍速重放白天的经历,逐步将记忆转移到新皮层。这对 Agent 的离线处理有直接启发:Agent 需要”睡眠”周期——在低负载时段对当天积累的上下文进行批量压缩、索引优化、跨 session 关联发现。不是 bug,是 feature。白天积累的上下文中,哪些是值得保留的经验,哪些是一次性的噪音,只有在”睡眠”中整体审视才能区分。