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詳細
トークン最適化スキル
このスキルでは、OpenClaw インスタンスを軽量かつ効率的に保つための手順を説明します。
クイックリファレンス
| 問題 | 解決策 |
|---|---|
| バックグラウンドタスクによるコンテキストの肥大化 | Cron の分離(sessionTarget: "isolated") |
| 毎ターン履歴全体を読み込んでいる | memory_search によるローカル RAG |
| コンテキストが 100k トークンを超える | リセット&要約プロトコル |
| 古い会話を探す | セッションのトランスクリプトのインデックス作成 |
ワークフロー 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 トークンを超えたら、手動で情報を整理します。
手順
- コンテキストを確認:
📊 session_statusを実行し、現在のトークン使用量を確認します - 履歴を確認:現在のセッションを見直し、新しい事実、好み、プロジェクトの更新情報を確認します
- MEMORY.md を更新:これらの新しい事実を長期記憶ファイルに追記します
- 日次ログ:
memory/YYYY-MM-DD.mdが今日の出来事で最新の状態になっていることを確認します - 再起動:
openclaw gateway restartを実行して、アクティブな履歴をクリアします
実行するタイミング
- コンテキストが 100k トークンを超えたとき
- セッションが数日間続いているとき
- 応答が明らかに遅くなったとき
- ユーザーが明示的に「新たに始める」ことを求めたとき
ワークフロー 3:ローカル RAG の設定
トークンを消費せずに効率よく情報を呼び出すには、ローカル埋め込みを設定します。
設定(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 ジョブを確認します。分離されていますか?
- ハートビートの頻度を確認します。頻度が高すぎると、トークンが増えます
- 不要に大きなファイルを読み込んでいませんか?
「memory_search が何も返さない」
memorySearchがopenclaw.jsonで設定されていることを確認します- 埋め込みモデルがダウンロードされていることを確認します
- メモリファイルが存在し、内容があることを確認します
「再起動してもコンテキストがクリアされない」
再起動するとセッション履歴はクリアされますが、次の内容は残ります。
- システムプロンプトは常に読み込まれます
- ワークスペースファイル(MEMORY.md など)は新たに挿入されます
- 継続性を保つための仕様です
クレジット
- Pépère (shAde) — オリジナルのコンセプトとドキュメント
- Zayan (Clément) — 実装とテスト
OpenClaw コミュニティのために開発されました。 🦦😸