OpenClaw 上下文为什么总是很快用完
OpenClaw 里所谓'上下文记忆短',本质上不是它真的忘得快,而是一次对话里能塞进模型的历史和代码就那么多。底层模型有 token 窗口,会话管理又会做截断、摘要和按需加载,轮次一多、文件一大,早期内容自然被挤出去。
从实际使用看,限制主要来自三层。
模型层的硬上限
底层大模型通常只有固定窗口,比如 128K 到 200K tokens。这个数字看着大,放到代码场景里并不宽裕。中文、英文、代码混在一起时,token 消耗会比直觉快得多。一个 2000 行的 Python 文件,吃掉 8K 到 15K tokens 并不稀奇。
会话管理的取舍
为了控制响应速度和成本,OpenClaw 往往不会把全部历史原封不动塞给模型,而是做几件事:
| 策略类型 | 说明 | 影响 |
|---|---|---|
| 滑动窗口 | 只保留最近几轮对话 | 早期讨论容易丢 |
| 文件截断 | 大文件只取关键片段 | 完整上下文不在场 |
| 摘要压缩 | 把历史压成摘要 | 细节会被磨掉 |
这类策略没什么神秘的,代价就是上下文看起来'不稳定'。
多文件场景最容易爆掉
一次常见的重构对话,开销其实很快就上去了:用户提问几百 tokens,读五个源文件几十 K tokens,再加上修改建议和代码回写,单轮 5 万到 6 万 tokens 很正常。两三轮下来,窗口就开始紧张了。
常见的几个触发点
1. 模型档位选得太保守
如果配置里没显式设置 max_tokens,很多工具会落到默认值。默认值通常不激进,够日常问答,但不够大项目反复拉扯。
2. 一次性读了太多文件
大型项目里,自动加载相关文件很容易把上下文吃满。尤其是你只想改一个点,工具却把周边依赖、配置、测试、文档一起扫进来,消耗会非常快。
3. 长会话一直不切断
对话越拖越长,历史越堆越厚。OpenClaw 不会替你判断'这段已经没用了',所以旧内容只能和新内容一起抢位置。
4. 文档和日志混进来了
仓库里如果有大量 Markdown、日志、说明文件,工具在理解项目结构时也可能把它们算进去。看起来是'多读了一点',实际是上下文被悄悄占满。
5. 用了重上下文功能
全局搜索、依赖分析、跨文件重构这类功能,天然就是上下文大户。它们能帮你看得更全,也更容易把窗口打满。
怎么判断是不是上下文快满了
OpenClaw 一般会给出类似这样的提示:
⚠️ Context window approaching limit (85% used) ⚠️ Some earlier messages may be forgotten
如果界面没明说,也可以自己看几个信号:
- 对话轮次已经很深,尤其是连续技术讨论超过十几轮
- 读取文件的数量明显偏多,特别是大文件连着读
- 同一个文件被反复重写、重读,历史很容易被稀释
我一般会把它当成'该收口了'的信号,而不是继续硬聊。


