用 OpenClaw 时间长了,你会发现一个根本问题:上下文是有限的。
聊得越多,Token 消耗越大,超过模型上限就会崩溃。
OpenClaw 解决这个问题的核心机制,就是今天要说的——上下文压缩(Compaction)和上下文修剪(Context Pruning)。
先搞清楚两个基本概念
很多人在配置的时候把contextTokens和模型的上下文窗口混为一谈,其实是完全不同的两个东西:
| 概念 | 说明 |
|---|---|
| 模型上下文窗口 | 模型本身能看到的最大 Token 硬上限,不同模型差异很大 |
| 会话存储计数器 | OpenClaw 写入 sessions.json 的滚动统计,用来计算何时触发压缩 |
contextTokens是后者——是个运行时的估算值,不是严格保证。设置得越大,触发压缩的时机越晚,保留的历史越多,但 Token 消耗也越高。
Compaction 压缩机制
压缩(Compaction)是 OpenClaw 处理长对话的核心手段。
当上下文快要溢出时,它会把较旧的消息自动压缩成一段摘要,保留最近的关键内容,让对话继续。
压缩什么时候触发?
自动压缩在两种情况下触发:
| 触发条件 | 说明 |
|---|---|
| 溢出恢复 | 模型返回上下文溢出错误 → 立即压缩 → 重试 |
| 阈值维护 | 每次成功回复后,检查是否超过阈值: contextTokens > contextWindow - reserveTokens |
压缩一旦执行,结果是持久化的,写入会话记录,不会因为重启或重置丢失。
记忆刷新(Memory Flush)
压缩有一个关键细节:压缩前会先执行一次静默的"记忆刷新"。
在压缩发生前,OpenClaw 会悄悄运行一个后台任务,把关键上下文写入工作区的 memory 文件,防止重要记忆被压缩掉。
这个刷新是静默的(用户完全看不到),每个压缩周期只运行一次,由 sessions.json 跟踪。
Context Pruning 上下文修剪
压缩是持久化的,修剪(Pruning)是另一种清理机制,是非持久化的。
修剪针对的是工具调用结果和中间缓存——这些信息在长对话里会不断累积,占用大量 Token,但压缩不会清理它们。
推荐配置详解
用户提供的参考配置,覆盖了最关键的两个机制:
Compaction 配置
| 参数 | 值 | 说明 |
|---|---|---|
| contextTokens | 200000 | 运行时上下文估算上限 |
| mode | default | 标准压缩模式 |
| reserveTokens | 20000 | 为提示+输出保留的空间 |
| keepRecentTokens | 40000 | 压缩后保留的最近 Token 数 |
Context Pruning 配置
| 参数 | 值 | 说明 |
|---|---|---|
| mode | cache-ttl | 按 TTL 清理缓存 |
| ttl | 1h | 缓存有效期 1 小时 |
| keepLastAssistants | 3 | 保留最近 3 条助手消息 |
| softTrimRatio | 0.3 | 软清理比例 30% |
| hardClearRatio | 0.5 | 硬清理比例 50% |
安全下限
OpenClaw 还有一个强制安全机制:
compaction.reserveTokens有一个默认下限20000,即使你设置更低,OpenClaw 也会自动提升到这个值。
原因是:为压缩发生前的"内务处理"(比如记忆写入)留足空间。
Telegram 通道独立配置
| 参数 | 值 | 说明 |
|---|---|---|
| dmHistoryLimit | 50 | 私聊历史保留 50 条 |
完整配置示例
把以下配置添加到你的openclaw.json里:"agents": {
"defaults": {
"contextTokens": 200000,
"compaction": {
"mode": "default",
"reserveTokens": 20000,
"keepRecentTokens": 40000
},
"contextPruning": {
"mode": "cache-ttl",
"ttl": "1h",
"keepLastAssistants": 3,
"softTrimRatio": 0.3,
"hardClearRatio": 0.5
}
}
}
"channels": {
"telegram": {
"dmHistoryLimit": 50
}
}
说在最后
上下文管理是 OpenClaw 保持长期记忆能力的核心。
如果发现 AI 经常"忘记"之前说过的内容,优先检查这两个配置:
•keepRecentTokens是不是太小(建议 40000 起)
•reserveTokens是不是太低(建议 20000 起)
理解这套机制,才能真正让 OpenClaw 成为可靠的长期助手,而不是每次对话都从零开始。
感谢阅读,欢迎点赞、转发,推荐!
如果对你有帮助,记得关注我
© AI新智讯
夜雨聆风