对话压缩 / 遗忘机制 — 基于 Claude Code compaction 系统。
让 AI 在上下文即将耗尽时,自动把对话历史压缩成结构化摘要,而不是粗暴截断。
上下文窗口 200K → 有效窗口约 100K
触发阈值 = 有效窗口 - 13K buffer
≈ 87K tokens
| 方式 | 触发条件 | 说明 |
|---|---|---|
| ------ | --------- | ------ |
| auto | Token 接近阈值 | 自动压缩,保留最近对话 |
| manual | 用户说"压缩" | 自定义压缩范围 |
| micro | 单次工具结果太大 | 只压缩大文件/图片 |
触发: 单个工具结果太大(如 grep 返回 100K tokens)
做法:
大文本 → 保留前 500 字符 + "..."
图片 → [image]
文件内容 → [文件内容已压缩]
保留: 对话结构 + 关键结论
触发: Token 即将用尽
做法:
触发: 手动 /compact 或上下文严重不足
做法:
当需要压缩时,使用以下 prompt 模板:
## 压缩任务
你是一个对话压缩器。请把以下对话历史压缩成一个结构化摘要。
### 压缩规则
1. **保留用户的原始反馈** — 用户纠正你、确认你的内容最重要
2. **保留完整代码片段** — 不是"修改了文件A",而是完整的函数体
3. **保留错误和修复** — 犯过的错不能忘
4. **保留用户关键决策** — 用户明确做出的选择、偏好、方向性决策
- ❌ 不要原文抄录所有用户消息
- ✅ 提炼:"用户选择了方案A,理由是..."
5. **脱敏处理** — 过滤所有敏感信息
- API keys / tokens → 替换为 `[REDACTED: api_key]`
- 密码 / secrets → 替换为 `[REDACTED: secret]`
- 私钥 / credentials → 替换为 `[REDACTED: credential]`
- 完整文件路径(本地)→ 简化保留文件名即可
6. **不要调用工具** — 你已有所有上下文
### 输出格式
必须包含以下章节:
#### 1. 用户主要请求
详细描述用户要什么。
#### 2. 关键技术点
列出涉及的技术、框架、概念。
#### 3. 文件和代码
- 文件名 + 为什么重要
- 做了哪些修改
- 完整代码片段
#### 4. 错误和修复
- 遇到了什么错误
- 怎么修的
- 用户有没有反馈
#### 5. 用户关键决策和反馈
提炼用户的核心选择、偏好、纠正内容。不是原文抄录,而是结构化表达。
#### 6. 悬而未决的任务
用户让你做但还没做完的。
#### 7. 当前工作
最后正在做什么。
#### 8. 下一步建议
基于用户最新请求,下一步应该做什么。
| 模型 | 上下文窗口 | 安全阈值(87%) |
|---|---|---|
| ------ | ----------- | --------------- |
| MiniMax-M2.7 | 200K | ~174K |
| MiniMax-M2.5 | 200K | ~174K |
| MiniMax-M2.1 | 200K | ~174K |
| GPT-4o | 128K | ~111K |
| Claude 3.5 | 200K | ~174K |
压缩完成后,插入以下标记:
---
## 对话已压缩 @ {timestamp}
### 摘要概要
[1-2句话描述对话主题]
### 保留内容
- 最近对话组数:{N} 组
- 压缩组数:{M} 组
- 关键文件:{file list}
### 压缩后的对话历史
[结构化摘要内容]
---
当以下情况发生时,自动使用本 skill:
memory-hierarchy 负责:对话外的长期记忆
conv-compactor 负责:对话内的上下文压缩
两者互补:
新对话开始 → 加载 MEMORY.md(记忆)
↓
对话进行中 → 监控 Token 使用
↓
触发压缩 → 结构化摘要
↓
可选择 → 写入 memory/(新记忆)
压缩前确认:
压缩后确认:
❌ 不要直接截断对话头部
❌ 不要只保留大意而丢失代码细节
❌ 不要在压缩时调用工具
❌ 不要删除用户反馈相关内容
❌ 不要压缩正在进行的开发工作
❌ 不要在摘要中保留明文敏感信息(API keys、密码、tokens)
❌ 不要原文抄录所有用户消息
共 1 个版本