关于 token-optimizer
帮助管理 OpenClaw 上下文用量的操作指南,适用于维护 OpenClaw 实例的用户。内容涵盖任务隔离、记忆搜索、会话整理和对话记录索引。
主要功能
- 01隔离后台 cron 任务
- 02配置本地记忆搜索
- 03重置并总结长会话
- 04建立会话记录索引
- 05结合向量与关键词搜索
适用场景
- 01避免定时任务占用主会话上下文
- 02无需加载完整历史即可查找过往决策
- 03整理上下文过大的会话
- 04搜索已建立索引的对话记录
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ d4kooo/ openclaw-token-memory-optimizer --skill token-optimizer安装后在 Claude Code 中输入/token-optimizer确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSE.gitignorepackage.jsonREADME.mdscripts/check-optimization.sh详细介绍
Token Optimizer Skill
此 Skill 提供流程知识,帮助你保持 OpenClaw 实例精简高效。
快速参考
| 问题 | 解决方案 |
|---|---|
| 后台任务导致上下文膨胀 | Cron 隔离(sessionTarget: "isolated") |
| 每轮都读取完整历史记录 | 使用 memory_search 进行本地 RAG |
| 上下文超过 100k 个 token | 重置与总结协议 |
| 查找旧对话 | 对会话记录进行索引 |
工作流 1:定期任务隔离
为避免后台任务导致主对话上下文膨胀,请始终将其隔离。
步骤
- 找到你的
openclaw.json配置文件。 - 在
cron.jobs数组中,为无需纳入主聊天历史记录的任务设置sessionTarget: "isolated"。 - 如果需要人工干预,请在任务负载中使用
message工具。
配置示例
{
"cron": {
"jobs": [
{
"name": "Background Check",
"schedule": { "kind": "every", "everyMs": 1800000 },
"sessionTarget": "isolated",
"payload": {
"kind": "agentTurn",
"message": "Check for updates. If found, use message tool to notify user.",
"deliver": true
}
}
]
}
}
要点
sessionTarget: "isolated"会在独立的临时会话中运行任务- 使用
deliver: true将结果发送回主频道 - 隔离会话不会让心跳或检查历史记录污染主上下文
工作流 2:重置与总结(“数字灵魂”协议)
当上下文用量(可通过 📊 session_status 查看)超过 100k 个 token 时,请手动整合上下文。
步骤
- 检查上下文:运行
📊 session_status,查看当前 token 用量 - 扫描历史记录:检查当前会话中的新事实、偏好或项目更新
- 更新 MEMORY.md:将这些新事实追加到长期记忆文件中
- 每日日志:确保
memory/YYYY-MM-DD.md已记录当天事件 - 重启:运行
openclaw gateway restart清除当前历史记录
触发时机
- 上下文超过 100k 个 token
- 会话已持续数天
- 响应明显变慢
- 用户明确要求“重新开始”
工作流 3:本地 RAG 配置
配置本地嵌入,以便高效检索并避免消耗过多 token。
配置(openclaw.json)
{
"memorySearch": {
"embedding": {
"provider": "local",
"model": "hf:second-state/All-MiniLM-L6-v2-Embedding-GGUF"
},
"store": "sqlite",
"paths": ["memory/", "MEMORY.md"],
"extraPaths": []
}
}
使用方法
使用 memory_search 从日志中检索上下文,而不是加载所有内容:
memory_search(query="what did we decide about the API design")
该工具会返回相关片段及其文件路径和行号。使用 memory_get 提取特定章节。
工作流 4:会话记录索引(高级)
为会话记录(.jsonl 文件)建立索引,以便搜索对话历史。
工作原理
OpenClaw 将会话记录存储在 ~/.openclaw/sessions/ 中。可为这些记录建立索引,以进行语义搜索,让你无需将旧对话载入上下文即可查找它们。
配置
将会话记录路径添加到 memorySearch.extraPaths:
{
"memorySearch": {
"extraPaths": [
"~/.openclaw/sessions/*.jsonl"
]
}
}
最佳实践
- 有选择地建立索引(近期会话、重要对话)
- 使用基于日期的筛选来限制搜索范围
- 建立索引后,将旧会话记录归档到冷存储
工作流 5:混合搜索(向量 + BM25)
结合语义搜索与关键词匹配,实现更准确的检索。
为什么使用混合搜索?
| 搜索类型 | 优势 | 劣势 |
|---|---|---|
| 向量(语义) | 查找概念相似的内容 | 可能漏掉精确词语 |
| BM25(关键词) | 查找精确匹配项 | 会漏掉同义词或释义 |
| 混合搜索 | 兼得两者之长 | 计算量略高 |
使用方法
当 memory_search 返回的结果置信度较低时:
- 尝试用不同措辞进行搜索(语义变体)
- 搜索你记得的精确关键词(BM25 方式)
- 如有需要,手动合并结果
后续改进
OpenClaw 的 RAG 系统未来可能支持原生混合搜索。目前,如果精度很重要,请运行多条查询。
故障排除
“我的上下文增长得太快了”
- 检查 Cron 任务:是否已隔离?
- 检查心跳频率:频率过高 = 消耗更多 token
- 是否不必要地加载了大型文件?
“memory_search 没有返回任何内容”
- 确认已在
openclaw.json中配置memorySearch - 检查是否已下载嵌入模型
- 确保记忆文件存在且包含内容
“重启后上下文没有清除”
重启会清除会话历史,但:
- 系统提示词始终会加载
- 工作区文件(MEMORY.md 等)会重新注入
- 这是为了保持连续性而设计的
致谢
- Pépère(shAde)— 原始构想和文档
- Zayan(Clément)— 实现和测试
为 OpenClaw 社区打造。 🦦😸
评论
支持 Markdown