セッションとメモリ

セッションプルーニング

セッションプルーニングは、各LLM呼び出しの直前に、メモリ内のコンテキストから古いツール結果を削除します。ディスク上のセッション履歴(*.jsonl)は書き換えません

実行タイミング

  • mode: "cache-ttl" が有効で、そのセッションの最後のAnthropic呼び出しが ttl より古い場合。
  • そのリクエストでモデルに送信されるメッセージにのみ影響します。
  • Anthropic API呼び出し(およびOpenRouterのAnthropicモデル)でのみ有効です。
  • 最良の結果を得るには、ttl をモデルの cacheRetention ポリシー(short = 5分, long = 1時間)に合わせてください。
  • プルーニング後、TTLウィンドウはリセットされるため、ttl が再度期限切れになるまで、後続のリクエストはキャッシュを保持します。

スマートデフォルト(Anthropic)

  • OAuthまたはsetup-token プロファイル: cache-ttl プルーニングを有効にし、ハートビートを 1h に設定。
  • APIキー プロファイル: cache-ttl プルーニングを有効にし、ハートビートを 30m に設定し、Anthropicモデルでデフォルト cacheRetention: "short" を設定。
  • これらの値を明示的に設定した場合、OpenClawは上書きしません

改善点(コスト+キャッシュ動作)

  • プルーニングする理由: AnthropicのプロンプトキャッシュはTTL内でのみ適用されます。セッションがTTLを超えてアイドル状態になると、次回のリクエストでは、先にトリミングしない限り、フルプロンプトが再キャッシュされます。
  • 何が安くなるか: プルーニングにより、TTL期限切れ後の最初のリクエストにおける cacheWrite サイズが削減されます。
  • TTLリセットが重要な理由: プルーニングが実行されるとキャッシュウィンドウがリセットされるため、後続のリクエストはフル履歴を再キャッシュする代わりに、新しくキャッシュされたプロンプトを再利用できます。
  • 行わないこと: プルーニングはトークンを追加したり、コストを「二重」にしたりしません。TTL後の最初のリクエストでキャッシュされる内容を変更するだけです。

プルーニング対象

  • toolResult メッセージのみ。
  • ユーザーおよびアシスタントのメッセージは決して変更されません。
  • 最後の keepLastAssistants 個のアシスタントメッセージは保護され、そのカットオフ後のツール結果はプルーニングされません。
  • カットオフを設定するのに十分なアシスタントメッセージがない場合、プルーニングはスキップされます。
  • 画像ブロックを含むツール結果はスキップされます(トリミング/クリアされません)。

コンテキストウィンドウの見積もり

プルーニングは推定コンテキストウィンドウ(文字数 ≈ トークン数 × 4)を使用します。ベースウィンドウは次の順序で解決されます:

  1. models.providers.*.models[].contextWindow のオーバーライド。
  2. モデル定義の contextWindow(モデルレジストリから)。
  3. デフォルト 200000 トークン。

agents.defaults.contextTokens が設定されている場合、それは解決されたウィンドウに対する上限(最小値)として扱われます。

モード

cache-ttl

  • 最後のAnthropic呼び出しが ttl(デフォルト 5m)より古い場合にのみプルーニングが実行されます。
  • 実行時: 以前と同じソフトトリム+ハードクリア動作。

ソフト vs ハードプルーニング

  • ソフトトリム: サイズ超過のツール結果のみ対象。
    • 先頭と末尾を保持し、... を挿入し、元のサイズを記した注記を追加します。
    • 画像ブロックを含む結果はスキップします。
  • ハードクリア: ツール結果全体を hardClear.placeholder で置き換えます。

ツール選択

  • tools.allow / tools.deny* ワイルドカードをサポートします。
  • Denyが優先されます。
  • マッチングは大文字小文字を区別しません。
  • 許可リストが空の場合 => すべてのツールが許可されます。

他の制限との相互作用

  • 組み込みツールは既に自身の出力を切り詰めます。セッションプルーニングは、長時間実行されるチャットでモデルコンテキスト内にツール出力が蓄積しすぎるのを防ぐ追加のレイヤーです。
  • コンパクションは別機能です: コンパクションは要約して永続化しますが、プルーニングはリクエストごとに一時的です。 /concepts/compaction を参照してください。

デフォルト(有効時)

  • ttl: "5m"
  • keepLastAssistants: 3
  • softTrimRatio: 0.3
  • hardClearRatio: 0.5
  • minPrunableToolChars: 50000
  • softTrim: { maxChars: 4000, headChars: 1500, tailChars: 1500 }
  • hardClear: { enabled: true, placeholder: "[古いツール結果の内容がクリアされました]" }

デフォルト(無効):

{
  agents: { defaults: { contextPruning: { mode: "off" } } },
}

TTLを考慮したプルーニングを有効化:

{
  agents: { defaults: { contextPruning: { mode: "cache-ttl", ttl: "5m" } } },
}

特定のツールにプルーニングを制限:

{
  agents: {
    defaults: {
      contextPruning: {
        mode: "cache-ttl",
        tools: { allow: ["exec", "read"], deny: ["*image*"] },
      },
    },
  },
}

設定リファレンスを参照: Gateway Configuration

Session ManagementSession Tools