116 lines
3.9 KiB
Markdown
116 lines
3.9 KiB
Markdown
# How to Fix Your OpenClaw's Memory
|
||
|
||
> **来源**: [X @_sean_matthew](https://x.com/_sean_matthew/status/2031800232569102610)
|
||
> **作者**: Sean Matthew (认证账号)
|
||
> **发布日期**: 2026年3月12日
|
||
> **查看**: 1,669 次 | 5 转帖 | 41 喜欢 | 50 书签
|
||
|
||
---
|
||
|
||
## 摘要
|
||
|
||
作者分享了修复 OpenClaw 内存问题的四个关键优化,帮助降低 token 消耗并提升 Agent 稳定性。
|
||
|
||
---
|
||
|
||
## 问题背景
|
||
|
||
几周前,作者的 OpenClaw 出现问题:
|
||
- Agent 不断遗忘重要上下文
|
||
- Skills 没有正确触发
|
||
- Cron job 停止运行
|
||
- Telegram 中持续出现上下文相关错误
|
||
- 会话越长,token 消耗越多
|
||
|
||
最初以为是模型问题(当时使用 Kimi K2.5),后来切换到 Sonnet 4.6 有所改善,但**真正的问题在于 OpenClaw 的内存和上下文管理方式**。
|
||
|
||
---
|
||
|
||
## 四个修复方案
|
||
|
||
### Fix 1: 防止压缩(Compaction)时丢失重要上下文
|
||
|
||
**问题**: OpenClaw 有有限的上下文窗口,会话变长时会压缩旧消息为摘要,但重要的指令和细节会丢失。
|
||
|
||
**解决方案**:
|
||
1. **Memory Flush** - 在压缩前将重要信息写入磁盘
|
||
2. **Session Pruning** - 积极清理旧的上下文
|
||
|
||
> 核心原则:只在上下文窗口中的内容是临时的,存在磁盘上的才会保留。
|
||
|
||
---
|
||
|
||
### Fix 2: 让检索真正生效
|
||
|
||
**问题**: 重要信息虽然保存在磁盘上,但 Agent 不会主动查找,或者默认检索效果不够好。
|
||
|
||
**解决方案**:
|
||
1. 安装并配置 **QMD** (Tobi Lutke 的混合搜索引擎,结合关键词匹配、向量语义搜索和 LLM 重排序)
|
||
2. 在 AGENTS.md 顶部添加明确的检索指令,让 Agent 在执行任务前搜索相关上下文
|
||
3. 建立 LEARNINGS.md 文件,记录每次犯错后的规则,防止重复相同错误
|
||
|
||
---
|
||
|
||
### Fix 3: Heartbeat 成本陷阱
|
||
|
||
**问题**: Heartbeat 每 30 分钟唤醒一次,每次都是完整的 API 调用,携带整个会话上下文(可能 10,000-15,000 tokens),非常昂贵。
|
||
|
||
**解决方案**:
|
||
```json
|
||
{
|
||
"agents": {
|
||
"defaults": {
|
||
"heartbeat": {
|
||
"every": "30m",
|
||
"lightContext": true,
|
||
"model": "google/gemini-3.1-flash-lite-preview",
|
||
"activeHours": {
|
||
"start": "08:00",
|
||
"end": "23:00"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
关键优化:
|
||
- **lightContext: true** - 只加载 HEARTBEAT.md,而不是整个系统提示
|
||
- **使用便宜模型** - 如 Gemini 3.1 Flash-Lite,甚至可以用本地模型
|
||
- **限制活跃时间** - 不需要凌晨 3 点检查,将心跳调用减半
|
||
- **保持 HEARTBEAT.md 精简** - 只保留最基本的检查清单
|
||
|
||
---
|
||
|
||
### Fix 4: 完整系统提示审计
|
||
|
||
**问题**: AGENTS.md、SOUL.md、TOOLS.md、IDENTITY.md、USER.md、HEARTBEAT.md、MEMORY.md 都会自动加载,作者从未审计过它们的大小和冗余。
|
||
|
||
**解决方案**: 让 Claude Code 审计整个系统提示,识别冗余、重复和不必要的部分并精简。
|
||
|
||
> 真正的问题不是换模型,而是裁剪不必要的系统文件。
|
||
|
||
---
|
||
|
||
## 总结
|
||
|
||
推荐的优化顺序:
|
||
1. **Memory Flush** - 压缩前将重要上下文写入磁盘
|
||
2. **Session Pruning** - 防止长会话拖拽无效上下文
|
||
3. **Retrieval + 启动指令** - 升级 QMD,确保 Agent 明确搜索 prior context
|
||
4. **Heartbeat 优化** - 轻量上下文、便宜模型、限制活跃时间、精简 HEARTBEAT.md
|
||
5. **系统提示审计** - 裁剪冗余内容
|
||
|
||
**核心观点**: 构建 OpenClaw 时,选择的模型只是其次,**真正的价值在于确保 Agent 有良好的内存和上下文管理系统**。
|
||
|
||
---
|
||
|
||
## 相关资源
|
||
|
||
- [Ramya's article on agent memory debugging](https://x.com/i/article/2025615759771123712)
|
||
- [OpenClaw memory docs](https://docs.openclaw.ai/concepts/memory)
|
||
- [OpenClaw session pruning docs](https://docs.openclaw.ai/concepts/session-pruning)
|
||
- [OpenClaw heartbeat docs](https://docs.openclaw.ai/gateway/heartbeat)
|
||
- [QMD by Tobi Lutke](https://github.com/tobi/qmd)
|
||
- [YouTube 视频教程](https://youtu.be/UTztjR4o7Y8)
|