课题三:分层记忆系统与长期记忆管理
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,879 | 2,059 | -74% |
| User Profile 字数 | 4,457 | 670 | -85% |
| 总注入 | 12,336 | 2,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 来问之前先查是否见过类似问题)。两者互补而非替代。
可能的融合方向:
- 缓存层复用记忆系统的 embedding 基础设施(本地 bge-m3)
- 记忆系统中的 LESSONS 区(教训)可跨 session 预热缓存
- 缓存命中率可作为”这个问题有多常见”的信号,辅助记忆系统的 PENDING 优先级排序
详见 Compound AI 插件设计(待创建)。
自动维护体系
| 层 | 机制 | 说明 |
|---|---|---|
| 会话内 | RULES 维护规则 | 每次操作按分区 add/replace,同一话题用 replace 而非 add |
| 定时 | cron memory-auto-maintenance | 每周一 3:00 自动巡检过期条目、LESSONS 压缩、容量预警 |
| 兜底 | memory-maintenance skill | 可手动调用执行清理或健康检查 |
关键决策记录
- 不用向量存储 — Hermes 的 Memory 是轻量系统 prompt 注入,不是数据库。轻量结构化分区 + 生命周期标记 比向量检索更适合场景
- PENDING 区不设硬上限 — 实际很少超过 5 条,到 8 条时提醒即可
- 过期条目标 [OVERDUE] 而非直接删 — 连续两轮 OVERDUE 才自动删除,留一次观察期
- 不设 [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 映射
- 最小侵入改造:逐步替换而非重写
关联课题
- agent-cross-context — 课题二的索引层作为记忆检索的基础设施
- agent-evolution-history — 了解记忆系统在 Agent 演进史中的位置
- agent-evaluation-framework — 记忆系统的效果需要评测框架验证
参考资料
- 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。白天积累的上下文中,哪些是值得保留的经验,哪些是一次性的噪音,只有在”睡眠”中整体审视才能区分。