深度

OpenClaw Session 压缩(Compaction)机制详解:上下文窗口管理与手动压缩技巧

OpenClaw Session 压缩机制深度解析:Compaction 与 Session Pruning 的区别、自动压缩触发条件、identifierPolicy 配置、为压缩单独指定模型(支持本地 Ollama)、手动 /compact 命令用法,以及 OpenAI 服务端压缩与本地压缩的协同工作原理。

2026/3/103分钟 阅读ClaudeEagle

每个模型都有上下文窗口限制(最大 Token 数)。长时间对话积累的消息和工具结果会填满窗口,OpenClaw 的 Compaction 机制通过自动压缩解决这个问题。

什么是 Compaction?

Compaction 将旧对话历史压缩为一条摘要,同时保留最近的消息。压缩结果持久化到会话 JSONL 文件中,后续请求使用:

  • 压缩摘要
  • 压缩点之后的最近消息

与 Session Pruning 的区别

CompactionSession 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 官方文档

相关文章推荐

深度OpenClaw Context Engine 完全指南:四个生命周期钩子如何决定模型看到什么详解 OpenClaw 可插拔上下文引擎架构:Ingest/Assemble/Compact/After turn 四个生命周期钩子的工作原理,systemPromptAddition 动态注入机制,以及如何安装和配置自定义 Context Engine 插件。2026/8/12深度OpenClaw Session ID 生命周期规则:什么时候会开新会话,什么时候延续旧会话详解 OpenClaw sessionKey 与 sessionId 的区别,以及触发新会话的四种情形:手动重置、每日重置、空闲过期、父级分叉保护,附 Session Store 字段说明和 Cron 会话保留策略。2026/8/13深度OpenClaw 计费故障处理机制:余额不足时系统怎么办,Backoff 退避策略详解详解 OpenClaw 账单/额度类故障处理机制:与普通限流超时不同,计费故障采用更长的指数退避(5小时起步翻倍至24小时封顶)并标记禁用,附三类故障处理力度对比表和多账号部署实战建议。2026/8/13深度OpenClaw Model Failover 完全解析:Auth Profile 怎么轮换,为什么你的 OAuth 账号会"莫名其妙"被切走详解 OpenClaw Model Failover 机制:Auth Profile 轮换顺序、Session Stickiness 会话粘性、指数退避冷却规则,解释多账号场景下 OAuth 与 API Key 切换的常见困惑及固定账号的配置方法。2026/8/13深度OpenClaw Delegate 架构详解:让 Agent 以组织身份代表你行动,而不是冒充你详解 OpenClaw Delegate 代表架构:Agent 如何拥有独立身份代表组织成员行动而不冒充人类,三级能力分层(只读起草/代表发送/主动式)及硬性阻断规则、Gateway工具限制、沙箱隔离等安全配置。2026/8/12深度Claude Code Context Window 完全拆解:从会话启动到 Compaction 的 Token 全流程基于官方文档全面拆解 Claude Code 上下文窗口的完整生命周期:从会话启动前的预装内容、工作过程中的累加机制,到 Compaction 后不同机制(CLAUDE.md/paths规则/Skill)的存活差异,并给出主动管理 Token 预算的实战建议。2026/7/12