工作原理
- 较早的对话轮次会汇总为一个精简条目。
- 摘要会保存在会话转录记录中。
- 近期消息会保持完整。
toolResult 条目配对保留。如果拆分点落在工具块内部,OpenClaw 会移动边界,使配对内容保持在一起,并保留当前未摘要的尾部内容。
完整的对话历史记录仍保存在磁盘上。压缩仅会改变模型在下一轮中看到的内容。
新配置默认将
agents.defaults.compaction.mode 设为 "safeguard"(更严格的防护措施、摘要质量审计)。显式设置 mode: "default" 可选择退出。自动压缩
自动压缩默认启用。它会在会话接近上下文限制时运行,或在模型返回上下文溢出错误时运行(在这种情况下,OpenClaw 会进行压缩并重试)。 你将看到:- 正常 Gateway 网关日志中的
embedded run auto-compaction start/complete。 - 详细模式下的
🧹 Auto-compaction complete。 - 显示
🧹 Compactions: <count>的/status。
压缩前,OpenClaw 会自动提醒智能体将重要笔记保存到记忆文件中,以防止上下文丢失。
OpenClaw 可识别的溢出错误模式
OpenClaw 可识别的溢出错误模式
OpenClaw 会匹配数十种提供商特定的溢出错误字符串(Anthropic、OpenAI、Bedrock、Gemini、Ollama、OpenRouter 等)。常见示例:
request_too_largecontext length exceededinput exceeds the maximum number of tokensinput token count exceeds the maximum number of input tokens(Bedrock)input is too long for the modelollama error: context length exceeded
手动压缩
在任意聊天中输入/compact 可强制执行压缩。添加指令以引导摘要内容:
agents.defaults.compaction.keepRecentTokens 时(默认值:20,000),手动压缩会遵循该截断点,并在重建的上下文中保留近期尾部内容。如果未明确指定保留预算,手动压缩将作为硬检查点,并仅从新摘要继续。
配置
在你的openclaw.json 中,通过 agents.defaults.compaction 配置压缩。下方列出了最常用的选项;有关完整参考,请参阅会话管理深入解析。
使用其他模型
默认情况下,压缩使用智能体的主模型。设置agents.defaults.compaction.model 可将摘要任务委托给能力更强或更专业的模型。该覆盖项接受 provider/model-id 字符串,或在 agents.defaults.models 下配置的纯别名:
agents.defaults.compaction.model 覆盖项保持精确,并且不会继承会话回退链。
标识符保留
压缩摘要默认保留不透明标识符(identifierPolicy: "strict")。可使用 identifierPolicy: "off" 覆盖以禁用此功能。自定义指导应放在压缩提供商的 summarize() 实现中。
活跃转录记录字节防护
设置agents.defaults.compaction.maxActiveTranscriptBytes 后,如果转录历史记录达到
该大小,OpenClaw 会在运行前触发常规本地压缩。这适用于长期运行的会话:提供商侧的上下文
管理可能会保持模型上下文健康,但持久化的转录历史记录会
持续增长。它不会拆分原始字节,而是要求常规压缩
流水线创建语义摘要。
后继转录记录
启用agents.defaults.compaction.truncateAfterCompaction 后,OpenClaw 不会就地重写现有转录记录。它会根据压缩摘要、保留的状态和未摘要的尾部内容创建新的活跃后继转录记录,然后记录检查点元数据,将分支/恢复流程指向该压缩后的后继记录。
后继转录记录还会丢弃在较短重试时间窗口内出现的完全重复的长用户轮次,因此渠道重试风暴不会在压缩后带入下一个活跃转录记录。
对于新的压缩,OpenClaw 不再写入单独的 .checkpoint.*.jsonl
副本。现有的旧版检查点文件在仍被引用时可以继续使用,
并由常规会话清理进行修剪。
压缩通知
默认情况下,压缩会静默运行。设置notifyUser 后,可在压缩开始和完成时显示简短的状态消息;如果压缩前的记忆刷新耗尽但回复仍继续,还会显示降级通知:
记忆刷新
压缩前,OpenClaw 可以运行一次静默记忆刷新轮次,将持久笔记保存到磁盘。如果希望该维护轮次使用本地模型而非当前对话模型,请设置agents.defaults.compaction.memoryFlush.model:
可插拔压缩提供商
插件可以通过插件 API 上的registerCompactionProvider() 注册自定义压缩提供商。当提供商已注册并配置后,OpenClaw 会将摘要任务委托给它,而不是使用内置的 LLM 流水线。
要使用已注册的提供商,请在配置中设置其 ID:
provider 会自动强制启用 mode: "safeguard"。提供商会收到与内置路径相同的压缩指令和标识符保留策略,并且 OpenClaw 仍会在提供商输出后保留近期轮次和拆分轮次的后缀上下文。
如果提供商失败或返回空结果,OpenClaw 会回退到内置的 LLM 摘要。
压缩与修剪
会话修剪是一种更轻量的补充机制,无需摘要即可修剪工具输出。
故障排查
压缩过于频繁? 模型的上下文窗口可能较小,或工具输出可能较大。请尝试启用会话修剪。 压缩后感觉上下文陈旧? 使用/compact Focus on <topic> 引导摘要,或启用记忆刷新以保留笔记。
需要从头开始? /new 会启动一个新会话,而不进行压缩。
有关高级配置(预留 token、标识符保留、自定义上下文引擎、OpenAI 服务端压缩),请参阅会话管理深入解析。