65 lines
2.1 KiB
Markdown
65 lines
2.1 KiB
Markdown
---
|
||
title: "上下文压缩(Context Compaction)"
|
||
type: concept
|
||
tags: [openclaw, memory, context-window]
|
||
sources: [养龙虾5天血泪史]
|
||
last_updated: 2026-04-23
|
||
---
|
||
|
||
## Definition
|
||
|
||
上下文压缩是 AI Agent 在对话填满 Context Window 时,将旧消息压缩成摘要为新消息腾出空间的内置机制。是 OpenClaw 管理上下文长度的核心手段。
|
||
|
||
## How It Works
|
||
|
||
当对话消息积累到一定量(接近 Context Window 限制)时,OpenClaw 的压缩器运行:
|
||
1. 扫描历史消息
|
||
2. 生成摘要(Summary)
|
||
3. 丢弃原始消息
|
||
4. 用摘要替代历史
|
||
|
||
## The Problem
|
||
|
||
**压缩摘要丢失细节**:
|
||
- 姓名、数字、具体决定等关键信息全部消失
|
||
- 摘要抓住了要点,但丢掉了可操作的细节
|
||
- 精心设计的第 3 条消息指令和第 7 条闲聊得到相同处理
|
||
|
||
> "上下文窗口是有限的。但默认行为对一切一视同仁,这意味着你精心设计的第三条消息指令,和第七条消息的闲聊得到了相同待遇。" — [[养龙虾5天血泪史]]
|
||
|
||
## Solution: Memory Flush
|
||
|
||
**在压缩运行前将重要上下文写入磁盘**:
|
||
|
||
```json
|
||
{
|
||
"compaction": {
|
||
"memoryFlush": {
|
||
"enabled": true,
|
||
"softThresholdTokens": 4000
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
当会话接近上下文限制时:
|
||
1. OpenClaw 触发静默回合
|
||
2. Agent 将重要内容写入 `memory/YYYY-MM-DD.md`
|
||
3. 压缩器运行
|
||
4. 即使摘要丢失,重要内容仍保留在磁盘上
|
||
|
||
**注意**:4000 这个数值要根据模型上下文窗口大小调整。大模型(32K/128K/200K tokens)应设置更高值,避免过度压缩导致上下文碎片化。
|
||
|
||
## Key Insight
|
||
|
||
> "压缩不是敌人。压缩过程中丢失信息才是。"
|
||
|
||
**如果只在上下文窗口中,它是临时的。如果在磁盘上,它就能存活。**
|
||
|
||
## Connections
|
||
- [[上下文刷新]] ← 防止上下文压缩的信息丢失
|
||
- [[上下文压缩]] ← 触发 [[上下文刷新]]
|
||
- [[Context-Pruning]] ← 与上下文压缩协同工作
|
||
- [[写入纪律]] ← 上下文刷新是写入纪律的技术实现
|
||
- [[养龙虾5天血泪史]] ← 主要来源
|