mcpField
T
token-optimizer

token-optimizer

github.com/d4koooAgent 工作流20499 次安装38 周前更新
代码仓库

关于 token-optimizer

帮助管理 OpenClaw 上下文用量的操作指南,适用于维护 OpenClaw 实例的用户。内容涵盖任务隔离、记忆搜索、会话整理和对话记录索引。

主要功能

  1. 01隔离后台 cron 任务
  2. 02配置本地记忆搜索
  3. 03重置并总结长会话
  4. 04建立会话记录索引
  5. 05结合向量与关键词搜索

适用场景

  1. 01避免定时任务占用主会话上下文
  2. 02无需加载完整历史即可查找过往决策
  3. 03整理上下文过大的会话
  4. 04搜索已建立索引的对话记录

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/d4kooo/openclaw-token-memory-optimizer --skill token-optimizer

安装后在 Claude Code 中输入/token-optimizer确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE
.gitignore
package.json
README.md
scripts/
check-optimization.sh

详细介绍

Token Optimizer Skill

此 Skill 提供流程知识,帮助你保持 OpenClaw 实例精简高效。

快速参考

问题解决方案
后台任务导致上下文膨胀Cron 隔离(sessionTarget: "isolated")
每轮都读取完整历史记录使用 memory_search 进行本地 RAG
上下文超过 100k 个 token重置与总结协议
查找旧对话对会话记录进行索引

工作流 1:定期任务隔离

为避免后台任务导致主对话上下文膨胀,请始终将其隔离。

步骤
  1. 找到你的 openclaw.json 配置文件。
  2. 在 cron.jobs 数组中,为无需纳入主聊天历史记录的任务设置 sessionTarget: "isolated"。
  3. 如果需要人工干预,请在任务负载中使用 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 时,请手动整合上下文。

步骤
  1. 检查上下文:运行 📊 session_status,查看当前 token 用量
  2. 扫描历史记录:检查当前会话中的新事实、偏好或项目更新
  3. 更新 MEMORY.md:将这些新事实追加到长期记忆文件中
  4. 每日日志:确保 memory/YYYY-MM-DD.md 已记录当天事件
  5. 重启:运行 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 返回的结果置信度较低时:

  1. 尝试用不同措辞进行搜索(语义变体)
  2. 搜索你记得的精确关键词(BM25 方式)
  3. 如有需要,手动合并结果
后续改进

OpenClaw 的 RAG 系统未来可能支持原生混合搜索。目前,如果精度很重要,请运行多条查询。


故障排除

“我的上下文增长得太快了”
  1. 检查 Cron 任务:是否已隔离?
  2. 检查心跳频率:频率过高 = 消耗更多 token
  3. 是否不必要地加载了大型文件?
“memory_search 没有返回任何内容”
  1. 确认已在 openclaw.json 中配置 memorySearch
  2. 检查是否已下载嵌入模型
  3. 确保记忆文件存在且包含内容
“重启后上下文没有清除”

重启会清除会话历史,但:

  • 系统提示词始终会加载
  • 工作区文件(MEMORY.md 等)会重新注入
  • 这是为了保持连续性而设计的

致谢

  • Pépère(shAde)— 原始构想和文档
  • Zayan(Clément)— 实现和测试

为 OpenClaw 社区打造。 🦦😸

评论

支持 Markdown