分层生成与分层召回 + 召回预算控制 本节摘要:前四节讲了 L0-L3 各层「是什么」,本节把它们收束成完整机制:生成方向是「自底向上逐层提炼」,召回方向是「自顶向下逐层回退」,两者之间还有三道召回预算闸门(条数/字符/超时)防止记忆占满上下文。这一节是第 4 章的总收束,也是第 6 章源码精读的概念前置——读完本节你会理解「平时快、需要时准、还不撑爆上下文」这套设计是如何由生成、召回、预算三个机制协同实现的。
本节摘要:前四节讲了 L0-L3 各层「是什么」,本节把它们收束成完整机制:生成方向是「自底向上逐层提炼」,召回方向是「自顶向下逐层回退」,两者之间还有三道召回预算闸门(条数/字符/超时)防止记忆占满上下文。这一节是第 4 章的总收束,也是第 6 章源码精读的概念前置——读完本节你会理解「平时快、需要时准、还不撑爆上下文」这套设计是如何由生成、召回、预算三个机制协同实现的。
记忆的「生长」是一个自底向上的过程,每一层从下层提炼,节奏由快到慢:
生成方向(自底向上,节奏由快到慢) 对话发生 │ (即时) ▼ L0 录制 ─────────── 最快,原封不动保存 │ (异步,秒~分钟级) ▼ L1 抽取 + 去重 ──── 从 L0 抽原子 │ (异步,项目周期级) ▼ L2 场景聚合 ─────── 围绕场景聚合 L1 │ (异步,长期周期性) ▼ L3 画像提炼 ─────── 从大量历史提炼稳定模式 → 越往上越慢、越抽象、越稳定
| 层 | 节奏 | 依赖 |
|---|---|---|
| L0 | 即时 | 对话本身 |
| L1 | 秒~分钟级 | L0 |
| L2 | 项目周期级 | L1 积累 + 场景检测 |
| L3 | 长期周期性 | 大量 L1/L2 历史 |
关键概念:生成是「提炼」不是「替换」——每层提炼出后,下层仍保留(第 1 节讲过)。所以四层是「叠加生长」的关系,时间越久,四层都越丰富。这是「经验复利」在数据结构上的体现。
召回的方向与生成相反——自顶向下,优先用高层快速进入语境,不够时再回退到底层取细节:
召回方向(自顶向下,优先高层、回退底层) 问题来了 │ ├─ 优先级1: L3 画像 + L2 场景 │ (快速进入语境,平时最常用) │ 够用? → 直接答 │ ├─ 优先级2: L1 原子(回退) │ (需要具体事实时) │ 够用? → 答 │ └─ 优先级3: L0 原话(再回退) (需要核对原话/时间/来源时) → 答
| 召回优先级 | 层 | 何时用 |
|---|---|---|
| 1(最高) | L3 + L2 | 平时,快速进入语境 |
| 2 | L1 | 需要具体事实 |
| 3(最低) | L0 | 需要核对原话 |
这种「优先高层、回退底层」的策略,实现了「平时快(高层秒进)、需要时准(底层核对)」的平衡。值得注意的是,「回退」不是每次都走到底——大多数问题在 L2/L3 层就够用了,只有需要精确细节或核对原话时才回退到 L1/L0。
召回结果不能无限制地塞进上下文——上下文窗口有限,记忆太多会挤掉真正重要的内容。所以所有召回结果要过三道预算闸门:
| 闸门 | 防的问题 | 怎么限 |
|---|---|---|
| 条数上限 | 条数过多稀释重点 | 召回结果最多 N 条 |
| 字符上限 | 单条过长挤占窗口 | 总字符数不超阈值 |
| 超时上限 | 召回拖慢响应 | 召回耗时超阈值则截断 |
三道闸门的执行顺序 召回原始结果 │ ├─ 闸门1: 条数上限 │ └─ 超过 N 条? 按相关度排序,只取前 N 条 │ ├─ 闸门2: 字符上限 │ └─ 累计字符超阈值? 从末尾裁剪 │ └─ 闸门3: 超时上限 └─ 召回耗时超阈值? 立即返回已收集的结果 ▼ 最终注入上下文的记忆(受控的量)
⚠️ 注意:三道闸门的优先级是「超时 > 字符 > 条数」——超时是最硬的(用户在等,必须及时返回),其次是字符(防撑爆窗口),最后是条数(防稀释)。这个优先级体现了「响应优先于完整」的工程取舍。
把生成、召回、预算三者合起来,就看到了整套设计的完整意图:
协同效果 ① 生成逐层提炼 → 四层都有,各有粒度(提供「快与准」的选项) ② 召回优先高层 → 平时用 L2/L3 秒进语境(实现「快」) ③ 回退到底层 → 需要时取 L1/L0 核对细节(实现「准」) ④ 预算三闸门 → 记忆不撑爆上下文(实现「不喧宾夺主」) → 四者协同 = 平时快 + 需要时准 + 不撑爆
这就是「记忆不是平铺记录,而是逐层生长」这条命题的完整工程含义——「逐层生长」不只是把记忆分四层,而是配合「分层召回」和「召回预算」,形成一个能在有限上下文窗口里高效工作的记忆系统。
本节讲清了「分层生成 + 分层召回 + 召回预算」的机制,但故意没讲「具体怎么抽取、怎么检索、怎么裁剪」——那是第 6 章 MemoryCore 抽取 Pipeline 精读的内容。两章的分工是:
| 本节(第 4 章) | 第 6 章 |
|---|---|
| 讲「机制是什么」 | 讲「机制怎么实现」 |
| 四层各自存什么 | Pipeline 怎么从 L0 抽 L1/L2/L3 |
| 召回优先高层回退底层 | BM25+向量+RRF 怎么混合检索 |
| 三道预算闸门 | 闸门的具体阈值与裁剪顺序 |
💡 技巧:读完第 4 章,你应该能向别人解释清楚「四层是什么、为什么分层、怎么召回、怎么控量」;读完第 6 章,你应该能动手排查「为什么这次召回不准/太慢/漏了」。第 4 章是概念地图,第 6 章是施工图纸,两者配套。
第 4 章到此完成,四层记忆架构的概念全貌已清。下一章换视角——从「记忆内部」转到「人怎么操作」,看 MemoryHub 控制台如何让人治理这套系统。