上下文窗口与 Compaction
每个模型都有一个上下文窗口(它能看到的最大 token 数)。长对话会不断累积消息和工具结果;当窗口接近上限时,OpenClaw 会对较早的历史进行 compaction(压缩),以保持在限制范围内。
Compaction 是什么
Compaction 会把较早的对话内容总结为一条紧凑的摘要,保留最近的消息不动。摘要存储在会话历史中,后续请求使用的就是:
- Compaction 摘要
- Compaction 点之后的近期消息
Compaction 会持久化到会话的 JSONL 历史文件中。
配置
在 openclaw.json 中通过 agents.defaults.compaction 配置 compaction 行为(模式、目标 token 数等)。Compaction 摘要默认保留不透明标识符(identifierPolicy: "strict")。你可以用 identifierPolicy: "off" 关闭这个行为,或者用 identifierPolicy: "custom" 配合 identifierInstructions 提供自定义文本。
你还可以通过 agents.defaults.compaction.model 指定一个不同的模型来生成 compaction 摘要。当你的主模型是本地或小模型,但希望用更强的模型来生成摘要时,这很有用。支持任意 provider/model-id 格式:
{
"agents": {
"defaults": {
"compaction": {
"model": "openrouter/anthropic/claude-sonnet-4-5"
}
}
}
}
也可以用本地模型,比如专门用于摘要的第二个 Ollama 模型,或者针对 compaction 微调过的模型:
{
"agents": {
"defaults": {
"compaction": {
"model": "ollama/llama3.1:8b"
}
}
}
}
不设置时,compaction 使用 agent 的主模型。
自动 compaction(默认开启)
当会话接近或超过模型的上下文窗口时,OpenClaw 会自动触发 compaction,并可能用压缩后的上下文重试原始请求。
你会看到:
- verbose 模式下显示
🧹 Auto-compaction complete /status显示🧹 Compactions: <count>
在 compaction 之前,OpenClaw 可以先运行一轮静默记忆刷写,把持久化的笔记写到磁盘上。详见 记忆。
手动 compaction
使用 /compact(可带指令)强制执行一次 compaction:
/compact Focus on decisions and open questions
上下文窗口来源
上下文窗口是模型特定的。OpenClaw 从配置的 provider 目录中的模型定义获取限制值。
Compaction 与裁剪
- Compaction:总结并持久化到 JSONL。
- 会话裁剪:只裁剪旧的工具结果,仅在内存中操作,不影响持久化记录。
OpenAI 服务端 compaction
OpenClaw 还支持 OpenAI Responses 的服务端 compaction 提示(适用于兼容的 OpenAI 直连模型)。这与 OpenClaw 本地 compaction 是独立的,可以同时运行。
- 本地 compaction:OpenClaw 自己总结并持久化到会话 JSONL。
- 服务端 compaction:当启用
store+context_management时,OpenAI 在 provider 侧压缩上下文。
详见 OpenAI provider。
使用建议
- 当会话感觉迟钝或上下文臃肿时,用
/compact。 - 大型工具输出已经被截断了;裁剪可以进一步减少工具结果的堆积。
- 如果需要一个全新的开始,
/new或/reset会创建新的会话 ID。