先看旧内容
OpenClaw 会挑比较旧的一段历史出来,不是把最新那几句直接揉碎。
Concepts 导读
当对话接近模型上下文窗口上限时,OpenClaw 会自动把早期内容压缩成摘要,保留最近消息和工具调用配对。注意:压缩只改变模型下次看到的输入,完整历史仍在磁盘上。如果遇到上下文溢出错误,系统会先压缩再重试,你可以在 `openclaw.json` 的 `agents.defaults.compaction` 中调整模式、目标 token 数,甚至指定专用模型来生成摘要。
先讲这一页到底在解决什么
当对话接近模型上下文窗口上限时,OpenClaw 会自动把早期内容压缩成摘要,保留最近消息和工具调用配对。注意:压缩只改变模型下次看到的输入,完整历史仍在磁盘上。如果遇到上下文溢出错误,系统会先压缩再重试,你可以在 `openclaw.json` 的 `agents.defaults.compaction` 中调整模式、目标 token 数,甚至指定专用模型来生成摘要。
第一站
你每发一句话、每跑一次工具、每贴一段日志,都像往桌上再放一张纸。桌子不是无限大,塞满以后就得先整理。
它就是那张桌子的大小。每个模型的桌子大小不一样,有的大,有的小。
这些东西会越积越多。最开始很轻松,越聊越久以后,它们就会开始挤位置。
compaction 不是“删掉聊天”,而是把旧聊天压成更短的重点摘要,好让桌面腾出位置。
它不是只在你眼前临时缩一缩,而是会把压出来的摘要真的记进这段会话历史里。
第二站
原文“what compaction is”其实就在讲一个动作:把比较旧的聊天浓缩成一小段摘要,再把最近的内容保留原样。
OpenClaw 会挑比较旧的一段历史出来,不是把最新那几句直接揉碎。
像把一大摞纸改写成一张重点卡:做过什么决定、还剩什么问题、哪些名字和编号不能丢。
离现在最近的消息会尽量原样留下,因为它们通常最影响当前这一轮回答。
这一步很关键。它不是一次性口头提醒,而是会真的存进 session 的 JSONL 历史里。
第三站
官方这里分了 auto-compaction 和 manual compaction。翻成人话,就是“桌子快满时系统自己收拾”和“你觉得太乱时自己喊它收拾”。
当聊天快把窗口塞满时,OpenClaw 会自己触发 compaction。有时候它整理完,还会拿新的紧凑上下文再重试刚刚那次请求。
你也可以主动发 /compact。这像你自己拍桌子说:“这堆旧纸条先帮我整理一下,我想清爽点继续聊。”
/compact:像对 OpenClaw 说“现在就收拾桌面”。/compact Focus on decisions and open questions:像补一句“收的时候别什么都抄,重点记决定和还没解决的问题”。/status 里的 🧹 Compactions:像告诉你“这张桌子今天已经被整理过几次了”。自动整理是系统自己觉得快满了,手动整理是你自己觉得该收拾了。
第四站
因为整理聊天时,最怕发生一件事:字数变少了,但关键名字、编号、路径、票据号也被顺手弄丢了。
默认的 identifierPolicy: "strict",像在提醒整理员:“这些门牌号、任务号、文件名,别偷懒改写,尽量原样保住。”
如果你自己有特别要求,也能额外告诉它“遇到编号、名字、命令时该怎么保留”。
compaction 不是随便写一篇读后感。它得在“缩短内容”和“别弄丢关键线索”之间拿捏平衡。
identifierPolicy: "strict":像对整理员说“编号、ID、路径这类东西别改花样”。identifierPolicy: "off":像说“这里不用特别死守编号”。identifierInstructions:像补一张你自己的整理规则小纸条。第五站
原文特地分这一段,是因为很多人会把这两个词混掉。它们都像“减肥”,但减的地方不一样。
会把旧聊天压成摘要,而且这个摘要会真的写进历史里。所以它是“整理后留下新版本”。
主要是临时把一些旧工具结果从当前这一轮提示里拿掉,减轻负担。它更像“这次先别把那摞附件搬上桌”。
Compaction 会留下新摘要记录。Pruning 更偏当前这一轮的临时瘦身,不是重写整段历史。
一个是“把旧故事压成短一点的故事”,一个是“这次先别把一些旧附件搬出来”。
第六站
原文说 compaction 可以指定单独模型,这一点很实用。意思不是换主脑,而是找一个更适合做“整理摘要”的帮手。
平时负责主要对话和做事。默认情况下,它也会兼任整理员。
如果你愿意,也可以单独给 compaction 指一个模型。这样像请了一个专门负责做会议纪要的人。
agents.defaults.compaction.model:像在配置里指定“以后整理桌子这活儿,交给哪位专门老师来做”。"openrouter/anthropic/claude-sonnet-4-6":像写上你想请哪位外部老师。"ollama/llama3.1:8b":像说“这份整理工作就交给我本地这位模型来做”。主模型负责聊天,compaction 模型负责做旧内容摘要。可以同一个,也可以分开。
第七站
原文后面提到 memory flush、OpenAI server-side compaction、custom context engine。别一口气吓住,它们只是“整理桌子”周边的附加玩法。
像在大扫除前,先提醒你把真正该长期记住的东西抄进笔记本。这样整理完,也不会把重要偏好和决定弄丢。
这是 OpenAI 那边自己帮你做的压缩提示,跟 OpenClaw 本地这套整理不是同一件事。两边甚至可以同时存在。
如果你换了自定义 context engine,那它可能会自己决定怎么整理。官方这段是在提醒插件作者:你接了这活儿,就要真的把它做好,别接了又不干。
compaction 不是永远只有一种做法。默认有默认的整理员,换了引擎以后,规则也可能跟着换。
最后总结
聊天太久以后,OpenClaw 会把旧内容压成重点小抄,把最近内容留在桌上,这样它还能继续聪明地往前聊。
如果你下一页只想继续看一页,我建议看 /concepts/context 或 /providers/openai。因为 compaction 这件事,真正是从“桌子有多大”和“提供商怎么处理上下文”这两边一起影响的。