Concepts 导读

对话太长?自动压缩旧消息,腾出上下文窗口

当对话接近模型上下文窗口上限时,OpenClaw 会自动把早期内容压缩成摘要,保留最近消息和工具调用配对。注意:压缩只改变模型下次看到的输入,完整历史仍在磁盘上。如果遇到上下文溢出错误,系统会先压缩再重试,你可以在 `openclaw.json` 的 `agents.defaults.compaction` 中调整模式、目标 token 数,甚至指定专用模型来生成摘要。

先讲这一页到底在解决什么

对话太长?自动压缩旧消息,腾出上下文窗口

当对话接近模型上下文窗口上限时,OpenClaw 会自动把早期内容压缩成摘要,保留最近消息和工具调用配对。注意:压缩只改变模型下次看到的输入,完整历史仍在磁盘上。如果遇到上下文溢出错误,系统会先压缩再重试,你可以在 `openclaw.json` 的 `agents.defaults.compaction` 中调整模式、目标 token 数,甚至指定专用模型来生成摘要。

原文共 15 节,先看 Start Here 路径:/concepts/compaction 查看官方原文

第一站

📚 先想画面:模型的脑袋前面,有一张大小有限的桌子

你每发一句话、每跑一次工具、每贴一段日志,都像往桌上再放一张纸。桌子不是无限大,塞满以后就得先整理。

🪟 Context Window

它就是那张桌子的大小。每个模型的桌子大小不一样,有的大,有的小。

🧾 旧消息和工具结果

这些东西会越积越多。最开始很轻松,越聊越久以后,它们就会开始挤位置。

⭐ 这页一句话版

compaction 不是“删掉聊天”,而是把旧聊天压成更短的重点摘要,好让桌面腾出位置。

📌 一个重要区别

它不是只在你眼前临时缩一缩,而是会把压出来的摘要真的记进这段会话历史里。

第二站

🧠 Compaction 到底做了什么

原文“what compaction is”其实就在讲一个动作:把比较旧的聊天浓缩成一小段摘要,再把最近的内容保留原样。

1

先看旧内容

OpenClaw 会挑比较旧的一段历史出来,不是把最新那几句直接揉碎。

2

再压成摘要

像把一大摞纸改写成一张重点卡:做过什么决定、还剩什么问题、哪些名字和编号不能丢。

3

最近内容保留

离现在最近的消息会尽量原样留下,因为它们通常最影响当前这一轮回答。

4

摘要会写进历史

这一步很关键。它不是一次性口头提醒,而是会真的存进 session 的 JSONL 历史里。

第三站

🤖 自动整理和手动整理,不是一回事

官方这里分了 auto-compaction 和 manual compaction。翻成人话,就是“桌子快满时系统自己收拾”和“你觉得太乱时自己喊它收拾”。

🧹 自动整理

当聊天快把窗口塞满时,OpenClaw 会自己触发 compaction。有时候它整理完,还会拿新的紧凑上下文再重试刚刚那次请求。

🙋 手动整理

你也可以主动发 /compact。这像你自己拍桌子说:“这堆旧纸条先帮我整理一下,我想清爽点继续聊。”

🛠 命令像在做什么
  • /compact:像对 OpenClaw 说“现在就收拾桌面”。
  • /compact Focus on decisions and open questions:像补一句“收的时候别什么都抄,重点记决定和还没解决的问题”。
  • /status 里的 🧹 Compactions:像告诉你“这张桌子今天已经被整理过几次了”。
🎈 一句话收住

自动整理是系统自己觉得快满了,手动整理是你自己觉得该收拾了。

第四站

🪪 为什么原文一直提“identifier”

因为整理聊天时,最怕发生一件事:字数变少了,但关键名字、编号、路径、票据号也被顺手弄丢了。

🔒 strict

默认的 identifierPolicy: "strict",像在提醒整理员:“这些门牌号、任务号、文件名,别偷懒改写,尽量原样保住。”

✍️ custom

如果你自己有特别要求,也能额外告诉它“遇到编号、名字、命令时该怎么保留”。

📌 这节真正想告诉你

compaction 不是随便写一篇读后感。它得在“缩短内容”和“别弄丢关键线索”之间拿捏平衡。

🛠 配置像在做什么
  • identifierPolicy: "strict":像对整理员说“编号、ID、路径这类东西别改花样”。
  • identifierPolicy: "off":像说“这里不用特别死守编号”。
  • identifierInstructions:像补一张你自己的整理规则小纸条。

第五站

🔀 Compaction 和 pruning 长得像,但其实不是一类东西

原文特地分这一段,是因为很多人会把这两个词混掉。它们都像“减肥”,但减的地方不一样。

🧹

Compaction

会把旧聊天压成摘要,而且这个摘要会真的写进历史里。所以它是“整理后留下新版本”。

✂️

Pruning

主要是临时把一些旧工具结果从当前这一轮提示里拿掉,减轻负担。它更像“这次先别把那摞附件搬上桌”。

📂

谁会留下痕迹

Compaction 会留下新摘要记录。Pruning 更偏当前这一轮的临时瘦身,不是重写整段历史。

🎯

别混成一句话

一个是“把旧故事压成短一点的故事”,一个是“这次先别把一些旧附件搬出来”。

第六站

🧰 你还能指定谁来负责“整理”

原文说 compaction 可以指定单独模型,这一点很实用。意思不是换主脑,而是找一个更适合做“整理摘要”的帮手。

🧑‍🏫 主模型

平时负责主要对话和做事。默认情况下,它也会兼任整理员。

📝 摘要专员模型

如果你愿意,也可以单独给 compaction 指一个模型。这样像请了一个专门负责做会议纪要的人。

🛠 配置像在做什么
  • agents.defaults.compaction.model:像在配置里指定“以后整理桌子这活儿,交给哪位专门老师来做”。
  • "openrouter/anthropic/claude-sonnet-4-6":像写上你想请哪位外部老师。
  • "ollama/llama3.1:8b":像说“这份整理工作就交给我本地这位模型来做”。
🎈 一句话收住

主模型负责聊天,compaction 模型负责做旧内容摘要。可以同一个,也可以分开。

第七站

🧠 Memory flush 和 server-side compaction 是两件额外的小事

原文后面提到 memory flush、OpenAI server-side compaction、custom context engine。别一口气吓住,它们只是“整理桌子”周边的附加玩法。

📝 Memory flush

像在大扫除前,先提醒你把真正该长期记住的东西抄进笔记本。这样整理完,也不会把重要偏好和决定弄丢。

☁️ Server-side compaction

这是 OpenAI 那边自己帮你做的压缩提示,跟 OpenClaw 本地这套整理不是同一件事。两边甚至可以同时存在。

🧩 Context engine

如果你换了自定义 context engine,那它可能会自己决定怎么整理。官方这段是在提醒插件作者:你接了这活儿,就要真的把它做好,别接了又不干。

📌 这节真正想告诉你

compaction 不是永远只有一种做法。默认有默认的整理员,换了引擎以后,规则也可能跟着换。

最后总结

🎈 把 Compaction 这页压成一句最好记的话

聊天太久以后,OpenClaw 会把旧内容压成重点小抄,把最近内容留在桌上,这样它还能继续聪明地往前聊。

如果你下一页只想继续看一页,我建议看 /concepts/context/providers/openai。因为 compaction 这件事,真正是从“桌子有多大”和“提供商怎么处理上下文”这两边一起影响的。