mem0 团队详解了 ByteDance 开源的 DeerFlow(GitHub trending #1,49.2k stars)的记忆系统设计。核心思路:不存储对话历史,而是用异步 LLM 提取器把对话「蒸馏」成结构化 Facts。

记忆写入流程

  1. 用户发消息 → Agent 响应
  2. MemoryMiddleware 过滤,只保留用户输入和最终 AI 响应
  3. 30 秒防抖计时器——新消息到达时重置,避免每轮对话都触发提取
  4. 防抖结束后,LLM 提取器输出 diff:newFacts / factsToRemove / shouldUpdate
  5. 原子写入 memory.json

30 秒防抖是个聪明的设计:用户连续发多条消息时不会反复触发提取,但又不会丢失时效性。

记忆注入方式

提取出的 Facts 以置信度评分 + 2000 token 预算的方式注入每个新 prompt 的 system prompt。存储用本地 JSON,结构大致包含:

  • userfacts:用户偏好、背景、项目状态
  • sessionfacts:当前 session 的 Facts
  • lastUpdate:最后更新时间

和传统 RAG 的对比

DeerFlow传统 RAG
存储内容结构化 Facts原始文档块
注入方式直接进 system prompt检索后拼入 context
更新粒度异步 diff,不累加通常累加
存储成本低(JSON 结构化)高(向量数据库)

DeerFlow 的方案回避了向量检索的工程复杂度,用「对话蒸馏」替代 Embedding + Vector DB。对于 Agent 场景,记忆的核心需求是"记住关键事实"而非"检索相似文档",这个取舍很合理。