Pipeline 全景:L0 录制到异步提炼


文档摘要

Pipeline 全景:L0 录制到异步提炼 本节摘要:第 6 章是源码精读章,本节先立全景——记忆核心服务内部跑的这条抽取 Pipeline,从 L0 Recorder 完整录制对话,到异步提炼出 L1/L2/L3,整条数据流是什么样。本节讲清三个关键设计:为什么 L0 录制是同步即时的(不能丢原话)、为什么抽取是异步的(不阻塞对话)、为什么各层之间是「提炼」而非「替换」(四层叠加)。读完本节你会有一张可在后续四节里反复对照的 Pipeline 全景图。

Pipeline 全景:L0 录制到异步提炼

本节摘要:第 6 章是源码精读章,本节先立全景——记忆核心服务内部跑的这条抽取 Pipeline,从 L0 Recorder 完整录制对话,到异步提炼出 L1/L2/L3,整条数据流是什么样。本节讲清三个关键设计:为什么 L0 录制是同步即时的(不能丢原话)、为什么抽取是异步的(不阻塞对话)、为什么各层之间是「提炼」而非「替换」(四层叠加)。读完本节你会有一张可在后续四节里反复对照的 Pipeline 全景图。

一、Pipeline 的两端:同步录制与异步提炼

整条 Pipeline 天然分两段,节奏完全不同:

Pipeline 全景 ┌─── 同步段(即时,对话进行中)───┐ │ 对话发生 → L0 Recorder 完整录制 │ ← 不能丢原话,必须即时 └──────────────┬──────────────────┘ │ (触发异步) ┌──────────────▼──────────────────┐ │ 异步段(后台,用户已走) │ │ L0 → L1 抽取 + 去重 │ ← 耗时,不阻塞用户 │ L1 → L2 场景聚合 │ ← 更慢 │ L1/L2 → L3 画像提炼 │ ← 最慢 └──────────────────────────────────┘
节奏 为什么这样
同步录制(L0) 即时 原话不可丢,必须当场存
异步提炼(L1/L2/L3) 后台慢跑 抽取要动用 LLM、耗时,不能让用户等

关键概念:这种「同步录、异步炼」的分工,是整套 Pipeline 的节奏基础。同步段保证「原话不丢」,异步段保证「提炼不拖慢对话」。理解了这个分工,就理解了为什么第 1 章验收时「刚说完查不到 L1」是正常的——异步段还没跑完。

二、L0 Recorder:为什么必须同步完整录制

L0 Recorder 是 Pipeline 的起点,它做的事看起来简单——把对话原封不动存下来——但「同步完整」是硬要求:

L0 Recorder 的设计约束 ① 同步:对话发生时立即录制,不等 → 原因:若异步,中途崩溃就丢原话,不可恢复 ② 完整:消息/工具调用/上下文/时间/来源全存 → 原因:任何字段缺失都让后续提炼失真 ③ 不阻塞:录制不能拖慢对话响应 → 原因:用户在等答复

这三条约束决定了 L0 Recorder 的实现风格:快速写入(通常落本地存储或队列)、宁全勿缺、写完即返回不等待后续处理。

⚠️ 注意:L0 Recorder 的「不阻塞」意味着它写完就返回,不等抽取。抽取是另一个异步任务从 L0 队列里取数据来跑。这种「录制与抽取解耦」让对话响应不被抽取拖累——即使抽取很慢,对话仍然流畅。

三、异步抽取:为什么不能同步

抽取(L0→L1/L2/L3)之所以必须异步,根因是它要动用 LLM,而 LLM 调用慢且贵:

同步抽取的反面(为什么不行) 对话结束 → 同步调 LLM 抽 L1 → 用户等几十秒 → 体验差 │ └─ 若抽取失败 → 对话也失败?不可接受 异步抽取的正解 对话结束 → L0 已存(对话完成,用户拿到答复) → 异步任务慢慢调 LLM 抽 L1/L2/L3 → 抽取失败可重试,不影响对话

异步还带来一个红利:可重试。抽取失败(如 LLM 超时)可以重跑,因为 L0 已存,数据没丢。同步就没这个余地——失败了对话也砸了。

维度 同步抽取 异步抽取
用户等待 要等 不等
失败恢复 难(影响对话) 易(可重试)
资源利用 峰值高(随对话并发) 可削峰填谷

四、各层之间:提炼而非替换

Pipeline 的另一关键设计是「各层叠加,提炼不替换」——这在第 4 章概念层讲过,这里从 Pipeline 视角再看:

Pipeline 的数据流(叠加关系) L0 ──(完整保留)──▶ L0 池 │ └─ 抽取 ──▶ L1 池(L0 仍在) │ └─ 聚合 ──▶ L2 池(L0、L1 都在) │ └─ 提炼 ──▶ L3 池(四层全在)

为什么必须叠加?因为召回要分层回退(第 4 章),缺了任何一层都有盲区。Pipeline 的实现要保证「提炼产出新层,但不删下层」——这看似浪费空间,实则是召回质量的保障。

💡 技巧:排查「记忆不准」时,一个常见原因是某层缺失或滞后。比如 L3 画像还没提炼出来(L3 最慢),Agent 冷启动就没「基础人设」。查 Pipeline 各层的产出时间,能定位是哪层卡了。本节后续四节会逐层讲实现,届时你会知道每层卡住怎么看。

五、Pipeline 的触发与编排

异步抽取不是「随时都在跑」,它有触发与编排机制:

Pipeline 的触发与编排(概念) L0 录制完成 → 投递到抽取队列 → worker 取任务,跑 L1 抽取 → L1 完成,触发 L2 聚合(若场景检测命中) → 周期性任务跑 L3 提炼(需积累足够历史)
触发方式 编排
L0 对话发生即触发 同步,Recorder 直接写
L1 L0 完成触发 异步队列 + worker
L2 L1 积累 + 场景检测触发 异步,较慢
L3 周期性触发(需大量历史) 定时任务,最慢

这种「事件触发 + 周期触发」的混合编排,让快变量(L1)及时处理、慢变量(L2/L3)按节奏提炼。具体的队列与 worker 实现细节,会在第 7 章 Auto-Sync(类似机制)和后续节里进一步涉及。

本节要点回顾

  1. 两段节奏:同步录制 L0(不丢原话)+ 异步提炼 L1/L2/L3(不阻塞对话),是 Pipeline 的节奏基础。
  2. L0 三约束:同步、完整、不阻塞——快速写入、宁全勿缺、写完即返回。
  3. 异步的根因:抽取要调 LLM,慢且贵;异步让用户不等、失败可重试、资源可削峰。
  4. 提炼非替换:各层叠加产出,L0 永不删——召回分层回退的保障。
  5. 触发编排:L0 事件触发、L1 队列 worker、L2 场景检测、L3 周期任务——快变量及时、慢变量按节奏。

全景已立,下一节深入第一段异步处理——L1 抽取与去重的实现细节,看原话如何变成可精确召回的原子。


发布者: 作者: 灏天文库 转发
评论区 (0)
U