跳转到内容

记忆蒸馏:LLM 驱动的记忆整理与提炼

记忆蒸馏:LLM 驱动的记忆整理与提炼

概述

记忆蒸馏(Memory Distillation)是一种使用 LLM 对 Agent 散落的短期/中期记忆进行定期整理的技术。它的核心思想是:记忆随时间积累会变得越来越分散和冗余,需要定期提炼为高密度、可检索的长期记忆

这一过程类比人类的”睡眠记忆巩固”——大脑在睡眠期间将白天的经历整理为长期记忆。在 Agent 系统中,这被称为 Deep Dream 机制。

蒸馏触发时机

触发方式时机目的
定时触发每日固定时间(如 23:55),带随机抖动常规记忆整理
手动触发用户通过 /memory dream 等命令触发按需整理
上下文截断后对话轮次超限被裁剪时保留被裁剪内容的摘要

蒸馏流程

输入材料

  1. 当前长期记忆(MEMORY.md):已有的核心信息、偏好、决策
  2. 近期每日记忆:最近 N 天的 memory/YYYY-MM-DD.md 文件

LLM 蒸馏任务

LLM 需要完成两个任务:

Part 1: 更新长期记忆([MEMORY] 标记)

  • 合并提炼:将含义相近的多条合并为高密度表述
  • 新增萃取:从每日记忆中提取值得永久记住的信息(偏好、决策、人物、规则)
  • 冲突更新:新信息与旧条目矛盾时以新为准
  • 清理无效:删除临时性记录、空白条目、重复内容
  • 删除冗余:已被更精炼表述涵盖的旧条目应删除

Part 2: 梦境日记([DREAM] 标记)

用叙事风格记录整理过程中的发现:

  • 发现了哪些重复或矛盾
  • 从日记中提取了什么新洞察
  • 做了哪些清理和优化
  • 整体感受和观察

输出格式(严格遵守)

[MEMORY]
- 记忆条目1
- 记忆条目2
...
[DREAM]
梦境日记内容...

关键设计决策

去重机制

蒸馏操作使用输入哈希去重:对每日记忆内容计算 MD5,结的当前日期构成 dedup_key = "{date}:{daily_hash}"。同一日内相同输入不重复蒸馏,避免资源浪费。

异步执行

蒸馏操作在后台线程中执行,不阻塞 Agent 的主回复流:

flush_from_messages() → 同步去重 → 启动后台线程 → LLM 摘要 → 写入文件

上下文注入

蒸馏产生的每日摘要可以通过回调函数注入到 Agent 的实时消息列表中,实现一次 LLM 调用同时服务磁盘持久化和上下文连续性

降级策略

当 LLM 不可用时,系统回退到规则摘要

  • 提取每条用户消息的前 500 字符
  • 提取助手回复的第一条有意义的内容
  • 格式化为 "- 用户: X → 回复: Y" 的紧凑格式

与记忆系统的关系

记忆蒸馏是 记忆系统设计 中的高级功能,建立在三层记忆架构之上:

对话上下文(agent.messages)
↓ 触发截断
每日记忆(memory/YYYY-MM-DD.md)
↓ 触发蒸馏
长期记忆(MEMORY.md)—— 精炼后注入系统提示

陷阱与对策

陷阱对策
LLM 编造不存在的记忆蒸馏 prompt 中严格约束”只能基于提供的材料,严禁编造”
蒸馏后 MEMORY.md 膨胀设定条数上限(如 50 条),优先合并而非追加
重复蒸馏浪费 token输入哈希去重,同一日相同输入只执行一次
蒸馏延迟导致记忆丢失先写入每日记忆文件(同步),蒸馏异步执行
MEMORY.md 被写坏先解析 LLM 输出,[MEMORY] 部分为空则跳过写入

设计权衡

优势

  • 定期自动整理,无需人工干预
  • 梦境日记提供可审计的整理记录
  • 异步执行不阻塞用户交互

代价

  • 每次蒸馏消耗一次 LLM 调用(通常 2000-8000 tokens)
  • 需要足够的每日记忆积累才能产出有价值的蒸馏结果

替代方案

  • 仅用规则摘要(无需 LLM,但质量较低)
  • 用户手动整理(质量可控但不自动)
  • 纯向量检索(无需蒸馏,但缺乏主动提炼)