🧠 Hermes 分层记忆架构速记笔记
1. 核心理念:分层与协作
- 核心隐喻:上下文窗口是“工作台”,不是“仓库”。将信息按特性分流至不同层级,才能实现高效、低成本的长期记忆。
- 四层架构概览:
- 工作记忆:当前会话的上下文窗口,容量有限,会话结束即清空。
- 持久记忆:精炼的“笔记本”,存储跨会话不变的事实与偏好(
MEMORY.md/USER.md)。 - 情景记忆:海量的“日记”,记录所有对话历史,通过检索按需召回(SQLite FTS5)。
- 技能记忆:可复用的“肌肉记忆”,将成功经验固化为可调用的技能(
SKILL.md)。
2. 关键实现与工程亮点
-
工作记忆:三层 Prompt 设计
- 结构:
Stable(不变的核心指令/工具指导) +Context(项目相关文件) +Volatile(会话变量/记忆快照)。 - 目的:最大化 Prefix Cache(前缀缓存) 命中率。将变化频繁的部分置于末尾,确保前面的稳定部分可被缓存复用,显著降低 Token 成本。
- 结构:
-
持久记忆:冻结快照模式
- 机制:会话启动时,从磁盘加载记忆并冻结快照注入 Prompt。会话中对记忆的修改会实时落盘,但不会更新当前会话的 Prompt。
- 价值:保证了整个会话期间 Prefix Cache 的绝对稳定,修改的记忆将在下一次会话中生效。
-
情景记忆:按需检索与摘要
- 流程:
FTS5 全文检索→聚合 Top N→Auxiliary LLM 生成摘要。 - 原则:按需触发,而非自动检索。由 Agent 判断是否需要历史上下文并调用
session_search工具,避免不必要的延迟和上下文膨胀。
- 流程:
-
技能记忆:经验结晶化
- 来源:通过 Background Review(后台异步反思) 机制,在对话结束后提炼高价值行为。
- 管理:由 Curator 管理技能生命周期(
pending→active→archived/merged),确保技能库的精简与高效。
3. 四层协作时序
- T0 (启动):加载持久记忆快照,构建三层 System Prompt。
- T1 (预取):根据用户输入,预取相关记忆注入
<memory-context>块。 - T2 (对话):Agent 在会话中可主动调用
session_search(情景) 或memory工具 (持久)。 - T3 (异步):对话结束,持久化记录,Background Review 异步运行,可能生成新技能。
4. 避坑指南:五大常见误区
- Context 满了 = 记忆失效:错。触发的是压缩(保留头尾,中间摘要),而非丢弃。但重要信息仍需主动写入持久记忆。
- 混淆情景与持久记忆:
USER.md存稳定特征(如“喜欢简洁代码”),而非事件记录。事件应由情景记忆存储和检索。 - 以为技能会自动触发:技能不会自动执行,必须通过
skill_manage工具注册,并在 Prompt 中可见,由 Agent 自主决策调用。 - 注册多个外部记忆 Provider:
MemoryManager仅支持一个外部 Provider,注册多个会被静默拒绝。 - 绕过内容安全扫描:所有写入记忆的内容都会经过
_scan_memory_content()扫描,防止 Prompt Injection 等安全风险,不可绕过。