上下文窗口与 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。
  • 会话裁剪:只裁剪旧的工具结果,仅在内存中操作,不影响持久化记录。

详见 /concepts/session-pruning

OpenAI 服务端 compaction

OpenClaw 还支持 OpenAI Responses 的服务端 compaction 提示(适用于兼容的 OpenAI 直连模型)。这与 OpenClaw 本地 compaction 是独立的,可以同时运行。

  • 本地 compaction:OpenClaw 自己总结并持久化到会话 JSONL。
  • 服务端 compaction:当启用 store + context_management 时,OpenAI 在 provider 侧压缩上下文。

详见 OpenAI provider

使用建议

  • 当会话感觉迟钝或上下文臃肿时,用 /compact
  • 大型工具输出已经被截断了;裁剪可以进一步减少工具结果的堆积。
  • 如果需要一个全新的开始,/new/reset 会创建新的会话 ID。