HexaMind 六层记忆体系:从 L5 到 L6 的架构进化

五层记忆管的是"记住什么",第六层多管一件:"提前做什么"。这篇讲主动性层的加入,也顺带把整套编号从"由细到粗"重构成"由底到顶"。

记忆系列三篇:五层记忆体系 讲分层设计,本篇讲 L6 主动性层的加入,HexaMind 搭建攻略 是能照着复现的操作手册。

一、回顾:五层记忆做了什么

《Hermes 五层记忆体系》 那篇按"抽象精度从细到粗"编号:第1层是按天写的原始日志,往上依次是向量、知识图谱、模式热度,最顶上的第5层才是 agent-memory 这个语义库。

从这篇起我把编号倒过来,改成"从底层存储到顶层行动"的 L1→L6,更符合直觉:地基在 L1,越往上越靠近决策。同一套系统,只是换了个数数的方向。对照关系是这样:

HexaMind L1–L6 职责 对应五层那篇
L1 结构化存储 SQLite + FTS5 存事实和偏好(agent-memory) 原第 5 层
L2 向量编码 文本转 1536 维向量 原第 2 层
L3 语义检索 向量相似度搜索,"基金回撤" ≈ "组合亏损" 原第 5 层的向量搜索
L4 自我进化 从错误中学习,避免重复踩坑(self-improving) 原第 4 层
L5 知识图谱 实体关系推理(ontology) 原第 3 层

原来的"第1层 日层日志"并进了 L1 的原始记录,不再单列;原来当附属缓冲区的 proactivity,这篇里升成独立的一层 L6。

不管怎么编号,五层的核心价值都是层次化检索:先精确匹配,未命中走语义召回,再补全关联实体、注入已知陷阱。但它有一个结构性问题:

所有五层都是被动的。 它们在等用户提问,然后检索。没有人提前准备。

二、L6 的加入:从"检索"到"预判"

HexaMind 在五层之上增加了第六层,主动性(Proactivity)

┌─────────────────────────────────────────────────┐
│  L6  主动性    │  预判需求、提前行动               │  ← 新增
├─────────────────────────────────────────────────┤
│  L5  知识图谱  │  实体关系推理 (ontology)           │
├─────────────────────────────────────────────────┤
│  L4  自我进化  │  从错误中学习 (self-improving)      │
├─────────────────────────────────────────────────┤
│  L3  语义检索  │  LanceDB 向量相似度搜索            │  ← 升级
├─────────────────────────────────────────────────┤
│  L2  向量编码  │  文本→向量 (embedding)             │
├─────────────────────────────────────────────────┤
│  L1  结构化存储 │  SQLite + FTS5 (agent-memory)     │
└─────────────────────────────────────────────────┘

L6 回答的问题是:"用户现在需要什么?下一步是什么?"

它读取 L1(事实)、L4(错误经验)、L5(关系图谱),在用户开口前就做好准备。

五层 vs 六层的行为对比

场景 五层(被动) 六层(主动)
用户打开终端 等指令 自动注入持仓快照 + 上次未完成任务
用户问"部署" 检索部署步骤 已提前加载当前模板状态 + 上次部署时间 + 已知陷阱
cron 运行失败 等用户发现 主动检查上次输出,发现 FAILED 状态自动告警
切换基金页面 按需查询数据 已预先注入当前交易日的净值日期 + 假期日历

五层记忆:"你要什么,我给你找什么。" 六层记忆:"我知道你要来,东西已经备好了。"

三、L3 的升级:LanceDB 替代基础向量检索

除了新增 L6,L3 也从基础向量检索升级为 LanceDB:

旧 L3 新 L3
存储引擎 基础向量存储 LanceDB 向量索引
检索精度 余弦相似度 余弦相似度 + 索引优化
可扩展性 受限于内存 磁盘索引,支持更大规模
与 L1 的关系 L1 和 L3 可能存储重复内容 L1 是唯一真源,L3 只存向量 + L1 引用

L1 是唯一真源原则:L3 不再存储原始文本副本,只存向量索引和 L1 的引用指针。避免"改了 L1,L3 还是旧数据"的同步问题。

四、六层协作规则

HexaMind 定义了严格的层间协作规则,这是五层时代没有的:

规则 1: L1 是唯一真源 — 所有结构化事实存储在 L1,L3 持有向量索引副本
规则 2: L2 是桥 — 任何写入 L1 的记忆,自动经 L2 编码后写入 L3
规则 3: L3 负责模糊召回 — 不存储原始文本,只存向量 + 指向 L1 的引用
规则 4: L4 从错误中进化 — 用户纠正触发 L4 更新,同时修改 L1 旧事实
规则 5: L5 构建关联 — 知识图谱独立维护,跨层消费
规则 6: L6 预判行动 — 读取 L1+L4+L5,在用户开口前做好准备

五、检索工作流

六层检索不再是简单的逐层递进,而是有明确的分流逻辑:

用户查询
    │
    ├── L1 (FTS5) ──────→ 精确关键词匹配
    │                        ┌─ 命中 → 直接返回事实
    │                        └─ 未命中 → 继续
    │
    ├── L3 (LanceDB) ───→ 语义向量检索
    │                        ┌─ 命中 → 与 L1 结果合并去重
    │                        └─ 未命中 → 继续
    │
    ├── L5 (ontology) ──→ 实体关系推理
    │                        关联实体补全
    │
    ├── L4 (self-improving) ──→ 检查是否有相关错误经验
    │                              └─ 注入"已知陷阱"警告
    │
    └── L6 (proactivity) ──→ 基于当前上下文预判下一步
                                └─ 注入建议行动

关键改进:L6 在检索流程的最后运行。它消费 L1/L3/L4/L5 的全部输出,综合判断下一步该做什么。

六、存储工作流

新信息到达时按类型分流存储:

新信息
    │
    ├─ 精确事实/偏好/常量?
    │   └→ L1 存储 → L2 编码 → L3 写向量
    │
    ├─ 错误纠正?
    │   └→ L4 记录 + L1 更新旧事实
    │
    ├─ 包含实体关系?
    │   └→ L5 建边
    │
    └─ 用户行为模式?
        └→ L6 更新预判规则

一条信息可以同时触发多层。比如用户纠正了部署命令,会同步触发 L1(更新事实)、L4(记录纠正)、L6(更新预判:下次部署场景自动使用新命令)。

七、五层→六层的核心收益

维度 五层 六层
检索模式 被动等待 主动预判
L3 引擎 基础向量存储 LanceDB 生产级索引
L1-L3 关系 可能重复存储 L1 唯一真源,L3 只存引用
层间规则 隐含约定 6 条铁律显式定义
防重复 靠记忆 L1/L3 防重复原则 + L1-First 写入
错误处理 L4 事后记录 L4 实时纠正 + L6 预判避坑

核心一句话:五层让记忆"不遗忘",六层让记忆"有预见"。

八、铁律

HexaMind 定义了五层时代没有的禁止规则:

❌ 禁止用 FTS5 替代 L3 语义检索
❌ 禁止跳过 L2 编码直接写入 L3
❌ 禁止 L3 成为"第二个 L1" — L3 存储的是向量,不是原文副本
❌ 禁止静默覆盖 L1 事实而不更新 L3 索引
✅ 每次检索必须同时走 L1 + L3 双通道
✅ 每次纠正必须触发 L4 记录
✅ 新实体必须立即在 L5 中建节点

这些铁律确保六层不会退化成"看起来六层,实际只用一两层"。