每个模型都有上下文窗口限制(最大 Token 数)。长时间对话积累的消息和工具结果会填满窗口,OpenClaw 的 Compaction 机制通过自动压缩解决这个问题。
什么是 Compaction?
Compaction 将旧对话历史压缩为一条摘要,同时保留最近的消息。压缩结果持久化到会话 JSONL 文件中,后续请求使用:
- 压缩摘要
- 压缩点之后的最近消息
与 Session Pruning 的区别
| Compaction | Session Pruning | |
|---|---|---|
| 作用对象 | 整体对话历史 | 仅工具调用结果 |
| 存储方式 | 持久化到 JSONL | 内存中,不持久 |
| 触发时机 | 上下文接近限制 | 每次请求时 |
自动压缩(默认开启)
当 Session 接近或超出上下文窗口时,OpenClaw 自动触发压缩,并可能用压缩后的上下文重试原始请求。
可见标志:
- 详细模式下显示
Auto-compaction complete /status显示Compactions: <count>
配置项
json
{
"agents": {
"defaults": {
"compaction": {
"identifierPolicy": "strict",
"model": "openrouter/anthropic/claude-sonnet-4-5"
}
}
}
}identifierPolicy
压缩摘要中如何处理标识符(ID、变量名等):
strict(默认):尽可能保留不透明标识符off:不特殊处理custom+identifierInstructions:自定义处理规则
为压缩指定独立模型
当主模型是小型本地模型时,可以让更强的模型负责生成压缩摘要:
json
{
"agents": {
"defaults": {
"compaction": {
"model": "openrouter/anthropic/claude-sonnet-4-5"
}
}
}
}也适用于本地模型:
json
{
"agents": {
"defaults": {
"compaction": {
"model": "ollama/llama3.1:8b"
}
}
}
}手动压缩
可以随时用 /compact 命令手动触发,还可以附加自定义指令:
/compact 重点关注决策和未解决的问题
压缩前记忆刷新
压缩前,OpenClaw 会触发一个静默的 Agent 轮次,提醒模型在上下文被压缩前把重要内容写入记忆文件(见 Memory 文档)。
OpenAI 服务端压缩
OpenClaw 也支持 OpenAI Responses 的服务端压缩提示(适用于兼容的 OpenAI 模型):
- 本地 Compaction:OpenClaw 压缩并持久化到 JSONL
- 服务端 Compaction:OpenAI 在提供商侧压缩上下文
两者可以同时运行。详情见 OpenAI 提供商文档。
实用技巧
- 感觉 Session 变「迟钝」时:用
/compact主动压缩 - 大型工具输出已被截断;Pruning 可进一步减少工具结果堆积
- 需要全新开始:用
/new或/reset开启新的 Session ID - 频繁压缩说明对话过长或上下文过重,考虑拆分任务
原文:Compaction - OpenClaw | 来源:OpenClaw 官方文档