记忆蒸馏器是面向 AI Agent 日志的智能压缩系统,针对"日志日均膨胀 2500 词、压缩后关键信息丢失、压缩结果难以回溯细节、不同内容需不同压缩策略"四大高频痛点而设计。它借鉴古文压缩哲学(去重复、留转折、去过程、留白),把冗长的原始日志蒸馏为高密度结构化摘要,实现 4-8 倍压缩比且零关键事件损失。 核心...
---
slug: memory-distiller-v2
name: memory-distiller
version: "1.0.0"
displayName: 记忆蒸馏器
summary: 解决日志膨胀、关键信息丢失、压缩后难回溯的分层记忆蒸馏器
license: MIT
description: |-
记忆蒸馏器是面向 AI Agent 日志的智能压缩系统,针对"日志日均膨胀 2500 词、压缩后关键信息丢失、压缩结果难以回溯细节、不同内容需不同压缩策略"四大高频痛点而设计。它借鉴古文压缩哲学(去重复、留转折、去过程、留白),把冗长的原始日志蒸馏为高密度结构化摘要,实现 4-8 倍压缩比且零关键事件损失。
核心能力:三层记忆架构(身份层/精选层/原始层)、混合提取引擎(关键词匹配+兜底提取+混合模式)、40+ 中英文关键词模式识别、分类型差异化压缩策略、批量压缩与心跳集成、压缩溯源链(摘要可回溯到原始段落)、多语言混合日志处理。
适用场景:Agent 每日日志归档、长会话上下文压缩、项目复盘提炼、决策推理蒸馏、多日日志批量归档、记忆维护心跳任务。
差异化:相比仅做"摘要变短"的浅层压缩,本技能新增 (1) 分类型差异化压缩策略,针对事件/教训/待办/成长四类内容采用不同压缩粒度;(2) 压缩溯源链,每个摘要条目保留原始段落定位标记,可一键回溯;(3) 智能兜底提取,当关键词不匹配时自动提取各章节顶部条目,确保零数据丢失;(4) 多语言混合处理,中英文混杂日志按段落自动识别语言并应用对应压缩规则;(5) 压缩质量评估器,量化压缩比、信息保留率、可读性三维度。
触发关键词:日志压缩、记忆压缩、记忆蒸馏、日志归档、上下文压缩、memory compress、log distillation、memory distiller
tags:
- 记忆压缩
- 日志归档
- 上下文优化
- 信息蒸馏
tools:
- read
- exec
---
# 记忆蒸馏器(Memory Distiller)
面向 AI Agent 日志的**智能压缩系统**,借鉴古文压缩哲学,把冗长原始日志蒸馏为高密度结构化摘要,4-8 倍压缩比且零关键事件损失。
## 设计动机:四大高频痛点
| 痛点 | 典型表现 | 本技能对策 |
|------|----------|------------|
| 日志膨胀快 | 日均 2500 词,MEMORY.md 一周破万字 | 定期蒸馏,4-8 倍压缩比 |
| 关键信息丢失 | 压缩后忘了"为什么做这个决策" | 分类型差异化压缩,事件/教训/待办分别处理 |
| 压缩后难回溯 | 想看细节但原始日志已删 | 溯源链:摘要保留原始段落定位标记 |
| 不同内容需不同策略 | 待办和教训用同一压缩逻辑,要么过细要么过粗 | 四类内容四套压缩规则 |
## 压缩哲学:古文压缩四原则
源自古典中文写作的压缩智慧:
| 原则 | 含义 | 示例 |
|------|------|------|
| 去重复 | 提过一次就够 | 不在 3 个章节重复"WebSocket 重连" |
| 留转折 | 只记变化点 | "从 nginx 切到 Node.js WSS" 优于 5 段调试过程 |
| 去过程 | 结果优于过程 | "失败 3 次后用 X 解决" 优于 3 段失败描述 |
| 留白 | 让读者推断 | 层级列表暗示关系,无需连接词 |
**压缩效果示例**:
```text
压缩前:2,500 词原始日志
压缩后:400 词结构化洞察
压缩比:6.25 倍
```
## 三层记忆架构
```text
┌────────────────────────────────────────────────┐
│ 三层记忆系统 │
├────────────────────────────────────────────────┤
│ │
│ 第一层:身份层(SOUL.md) │
│ 超压缩、稳定不变 │
│ "你是谁、什么重要" │
│ │
│ 第二层:精选记忆(MEMORY.md) ◄──┐ │
│ 4:1 压缩摘要 │ │
│ 关键事件+教训+待办 │ │
│ │ │
│ 第三层:原始日志(memory/YYYY-MM-DD.md) │
│ 完整细节、全部内容 ───┘ │
│ 约 2,500 词/天 │
│ │
│ 记忆蒸馏器:第三层 ──► 第二层 │
└────────────────────────────────────────────────┘
```
## 快速开始(< 60 秒)
### 单文件压缩
```bash
node scripts/memory-compress.js memory/2026-07-18.md
# 指定输出文件
node scripts/memory-compress.js memory/2026-07-18.md /tmp/compressed.md
# 压缩后追加到精选记忆
node scripts/memory-compress.js memory/2026-07-18.md /tmp/today.md
cat /tmp/today.md >> MEMORY.md
```
### 批量压缩多日
```bash
for file in memory/2026-07-{11..18}.md; do
[ -f "$file" ] && node scripts/memory-compress.js "$file" "/tmp/$(basename $file)"
done
```
## 混合提取引擎
### 步骤 1:关键词匹配
扫描标题与内容,识别 40+ 中英文模式:
| 类别 | 中文模式 | 英文模式 |
|------|----------|----------|
| 事件 | 重大进展、突破、里程碑、决策 | breakthrough、milestone、decision |
| 教训 | 教训、反思、启示、经验 | insight、takeaway、lesson |
| 成长 | 进化、提升、改进、优化 | evolution、improvement |
| 待办 | 待办、🔴、🟡、下一步 | todo、next step、action item |
### 步骤 2:兜底提取(零数据丢失)
当关键词不匹配时(如基于时间的标题 `## 08:44 站会`),自动提取每个章节的顶部条目。**确保永不丢数据**。
### 步骤 3:混合模式
多日合并文件时,匹配章节用关键词提取,未匹配章节用兜底提取,两者共存。
## 分类型差异化压缩策略
针对四类内容采用不同压缩粒度:
| 内容类型 | 压缩策略 | 保留要素 | 示例 |
|----------|----------|----------|------|
| 事件 | 中度压缩 | 时间、地点、参与者、结果 | "07-18 与客户 A 确认需求范围,含 3 个模块" |
| 教训 | 轻度压缩 | 教训、触发条件、规避方法 | "WebSocket 重连间隔应指数退避,固定间隔会触发限流" |
| 待办 | 高度压缩 | 任务、优先级、截止时间 | "🔴 07-20 前完成 API 联调" |
| 成长 | 中度压缩 | 改进点、前后对比、效果 | "把构建从 webpack 换成 vite,构建时间 60s→8s" |
**压缩优先级**:待办 > 事件 > 成长 > 教训(待办压缩最狠,教训保留最细)
## 输出格式
```markdown
## 2026-07-18 关键经验
### 关键事件
- **事件标题**
- 细节 1
- 细节 2
- [溯源: memory/2026-07-18.md#事件标题]
### 核心教训
- 教训内容
- [溯源: memory/2026-07-18.md#教训段落]
### 待办/未完成
- 🔴 紧急项
- 🟡 重要项
### 成长记录
- 改进点与效果
```
## 压缩溯源链
每个摘要条目保留原始段落定位标记,支持回溯:
```text
摘要条目:
"WebSocket 重连间隔应指数退避"
溯源标记:
[溯源: memory/2026-07-18.md#教训段落-L42]
回溯流程:
1. 读取摘要中的溯源标记
2. 定位到原始文件 memory/2026-07-18.md
3. 跳转到第 42 行附近
4. 读取完整上下文
```
**溯源标记格式**:`[溯源: {文件路径}#{章节标题}-L{行号}]`
## 压缩质量评估器
每次压缩后输出质量报告:
| 指标 | 计算方法 | 及格线 |
|------|----------|--------|
| 压缩比 | 原始词数 / 压缩后词数 | >= 4 倍 |
| 信息保留率 | 关键事件保留数 / 总关键事件数 | >= 95% |
| 可读性评分 | 结构化程度(标题/列表/层级) | >= 0.8 |
| 溯源覆盖率 | 含溯源标记的条目 / 总条目 | = 100% |
**质量不达标处理**:
- 压缩比 < 4:检查是否有大段重复未去除
- 保留率 < 95%:检查兜底提取是否生效
- 可读性 < 0.8:增加层级与标题结构
## 边界情况处理
| 场景 | 行为 |
|------|------|
| 空文件 | 优雅跳过,输出空摘要 |
| BOM 编码 | 自动检测并剥离 |
| 非 UTF-8 | 警告并继续处理可识别部分 |
| 输出目录缺失 | 自动创建 |
| 无 Markdown 结构 | 友好提示,尝试按段落提取 |
| 多日合并文件 | 混合策略,所有日期均保留 |
| 中英文混合 | 按段落识别语言,应用对应关键词集 |
| 超长单段落 | 按句子切分,提取关键句 |
## 心跳集成
集成到 Agent 维护周期:
```markdown
## 记忆维护(每 2-3 天)
1. 运行:node scripts/memory-compress.js memory/YYYY-MM-DD.md /tmp/compressed.md
2. 审查压缩结果准确性
3. 追加:cat /tmp/compressed.md >> MEMORY.md
4. 标记维护时间:date +%s > .last-memory-maintenance
5. (可选)归档原始日志:mv memory/YYYY-MM-DD.md memory/archive/
```
## CLI 用法
```text
node scripts/memory-compress.js <日志文件> [输出文件]
node scripts/memory-compress.js --help
node scripts/memory-compress.js --batch memory/2026-07-{11..18}.md
node scripts/memory-compress.js --quality-report # 输出质量评估
```
## 典型工作流(3 个真实场景)
### 场景一:每日日志归档
```text
用户:"今天的日志太长了,帮我压缩归档"
流程:
1. 运行 memory-compress.js 处理今日日志
2. 输出压缩摘要(含溯源链)
3. 审查摘要准确性
4. 追加到 MEMORY.md
5. 原始日志移到 memory/archive/
```
### 场景二:周度批量压缩
```text
用户:"把这周的日志都压缩了"
流程:
1. 批量处理 7 天日志
2. 每天单独压缩(保留日期维度)
3. 生成周度汇总(跨日事件关联)
4. 输出质量报告
5. 追加到 MEMORY.md,原始日志归档
```
### 场景三:长会话上下文压缩
```text
用户:"这个会话聊了 50 轮,上下文快爆了"
流程:
1. 提取会话历史为日志格式
2. 运行蒸馏器压缩
3. 保留最近 5 轮原文 + 早期轮次摘要
4. 重新加载压缩后上下文
5. 继续会话
```
## 多语言混合处理
中英文混杂日志的处理策略:
```text
检测:按段落识别主要语言
- 中文段落:应用中文关键词集(重大进展、教训、待办...)
- 英文段落:应用英文关键词集(breakthrough、lesson、todo...)
- 混合段落:两套关键词集都尝试
压缩:
- 中文内容:古文压缩四原则
- 英文内容:标准摘要 + 关键句提取
- 输出语言:与原始段落语言一致
```
## FAQ
**Q1:压缩后想看原始细节怎么办?**
A:每个摘要条目都含溯源标记 `[溯源: 文件路径#章节-L行号]`,按标记回溯到原始日志即可。原始日志建议归档而非删除。
**Q2:压缩会不会丢掉重要信息?**
A:混合提取引擎有三重保障:(1) 关键词匹配提取;(2) 未匹配时兜底提取章节顶部条目;(3) 质量评估器检查信息保留率 >= 95%。达不到会告警。
**Q3:压缩比能到多少?**
A:典型 4-8 倍,取决于原始日志的冗余度。重复内容多则压缩比高,结构化日志压缩比相对低。
**Q4:支持哪些日志格式?**
A:Markdown 格式最佳。纯文本也能处理(按段落切分)。不支持二进制格式。
**Q5:压缩后 MEMORY.md 越来越大怎么办?**
A:MEMORY.md 也需要定期治理。建议:(1) 超过 5000 词时把早期内容二次压缩到 SOUL.md;(2) 按月归档 MEMORY.md 到 memory/archive/;(3) 仅保留近 30 天摘要在 MEMORY.md。
## 故障排查
| 症状 | 可能原因 | 解决方案 |
|------|----------|----------|
| 压缩比为 1(没压缩) | 日志本身已高度结构化 | 正常现象,或调整压缩策略为激进模式 |
| 摘要缺关键事件 | 关键词未覆盖 | 检查兜底提取是否生效,补充关键词模式 |
| 溯源标记丢失 | 输出格式被修改 | 严格按输出格式模板生成 |
| 多日合并处理出错 | 日期分隔符不统一 | 标准化日期分隔符为 `## YYYY-MM-DD` |
| 中文日志压缩效果差 | 未识别中文关键词 | 确认中文关键词集已加载 |
## 依赖说明
### 运行环境
- **Agent 平台**:支持 SKILL.md 的任意 AI Agent(Claude Code / Cursor / Codex / Gemini CLI 等)
- **操作系统**:Windows / macOS / Linux
- **运行时**:Node.js(运行压缩脚本)
### 第三方依赖
| 依赖项 | 类型 | 是否必需 | 获取方式 |
|:-------|:-----|:---------|:---------|
| Node.js | 运行时 | 必需 | https://nodejs.org 安装 |
| memory-compress.js | 脚本 | 必需 | 随技能提供 |
### API Key 配置
- 本技能基于本地脚本处理,**无需任何 API Key**
### 可用性分类
- **分类**:MD+EXEC(Markdown 指令驱动,需 exec 执行 Node.js 脚本)
- **说明**:基于 Markdown 的 AI Skill,通过自然语言指令驱动 Agent 运行压缩脚本并处理结果
don't have the plugin yet? install it then click "run inline in claude" again.