OpenClaw对话一长就变笨?解决上下文窗口爆满
引言
你肯定遇到过这种情况:和 OpenClaw 聊了二三十轮之后,它开始重复之前说过的话,逻辑变得混乱,甚至直接报错context length exceeded。
这不是它“变笨”了,而是上下文窗口满了。每个大模型能记住的对话长度是有限的(比如 GPT-4o 是 128K tokens,Claude 是 200K,但很多本地模型只有 8K-32K)。一旦超过上限,要么截断,要么崩溃。
这篇文章教你:如何判断是否快爆了、怎么临时“瘦身”、以及如何长期避免再爆。
一、先诊断:你的会话到底用了多少 token?
在 TUI 里输入:
/context系统会显示类似这样的信息:
Current session: default Tokens used: 7800 / 8192 (95%) Messages in context: 42如果你看到超过 80%,就该警惕了。超过 95% 基本随时会崩。
如果/context命令不可用(老版本),也可以用/status查看当前会话的基本信息。
二、临时急救:两种方法让会话“瘦身”
方法1:手动压缩(推荐)
输入:
/compact这个命令会做三件事:
- 把当前对话历史发给模型
- 让模型生成一份摘要,保留关键信息(任务目标、已做的决策、待解决的问题)
- 用这份摘要替换掉原始对话,释放大量 token
通常压缩后 token 占用能降到 30%-50%。你可能会发现 AI 对某些细节记不清了,但核心逻辑还在,可以继续对话。
压缩的代价:模型生成摘要本身也会消耗 token(计入你的账单)。一次压缩大约花费几百到一两千 token,比买一个全新的会话划算。
方法2:新建会话 + 人工摘要
如果/compact效果不好(或者模型对摘要理解有偏差),可以手动重建会话:
/new然后在新会话的第一条消息里,用你自己的话概括之前的内容。例如:
“我们之前在分析一个 Python 脚本的内存泄漏问题。已经排查了循环引用、全局变量、缓存未释放。你建议用 tracemalloc 定位,我运行后发现了 3 个未关闭的文件句柄。现在需要你帮我分析这几行代码……”
这种方法的优点是完全可控,缺点是你要自己总结。
💡 小技巧:在旧会话里输入
/history 20,把最近 20 条对话复制出来,交给一个新模型(比如便宜的 gpt-3.5-turbo)让它帮你生成摘要,然后把摘要贴到新会话里。
三、长期方案:配置自动压缩阈值
手动压缩毕竟麻烦。你可以在openclaw.json里设置自动压缩,让系统在 token 达到某个比例时自动触发压缩。
找到配置文件(~/.openclaw/openclaw.json),在agents区块里加上contextLimit:
{"agents":{"default":{"model":"gpt-4o","contextLimit":{"threshold":0.8,"strategy":"summarize"}}}}参数说明:
threshold: 0.8→ 当 token 使用率达到 80% 时触发strategy: "summarize"→ 自动用摘要压缩- 也可以设为
strategy: "truncate"(直接丢弃最早的消息,不推荐,会丢失上下文)
设置后,每次发送新消息前,系统会检查 token 用量。如果超过阈值,自动执行压缩,你甚至感觉不到。
针对不同模型的建议阈值:
| 模型类型 | 建议 threshold | 原因 |
|---|---|---|
| 本地模型(8K-16K) | 0.6 | 小窗口更敏感,早点压缩 |
| GPT-4o / Claude(100K+) | 0.85 | 窗口大,可以宽松一些 |
| 便宜模型(32K) | 0.75 | 折中 |
四、预防:减少 token 消耗的习惯
除了爆了再救,日常使用时也可以注意:
- 避免重复粘贴大段文本:每次粘贴都会重新计入 token。如果需要反复参考同一份文档,可以把它写入工作区文件,让 AI 用
read_file技能按需读取,而不是每次都塞进对话。 - 定期
/new:完成一个子任务后,主动开新会话,只传递必要摘要。 - 精简 system prompt:检查你的
openclaw.json里systemPrompt是否写了一大堆用不上的规则。每多 100 个 token,就少 100 个对话空间。 - 关闭不必要的历史:有些插件会自动把上一轮的工具调用结果全部保留,可以配置
retainToolCalls: false来节省空间。
五、极端情况:模型窗口本身就很小(比如 4K)
如果你用的是本地小模型(如 phi-2、qwen-1.8b),上下文只有 4K 甚至 2K,稍微聊几句就爆。这时候:
- 升级模型:换一个至少 8K 的(如 qwen-7b、llama-3-8b)。
- 用外部记忆:下一篇文章会讲“Skill 老是失忆”的解决方案,其中 Self-Improving Agent 可以把长对话的关键信息写入外部文件,每次会话开始时加载。这相当于绕过了模型窗口限制。
六、检查清单:下次遇到“变笨”时
- 输入
/context看 token 占比。 - 如果 >80%,输入
/compact压缩。 - 压缩后还不行?
/new新会话 + 人工摘要。 - 长期解决:配置
contextLimit自动压缩。 - 还是频繁爆?考虑换更大窗口的模型或使用外部记忆。
掌握这些方法,你的 OpenClaw 就不会再“聊着聊着变傻了”。下一篇我们解决另一个高频痛点:Skill 老是失忆,刚教的过两天又犯。
