メインコンテンツへスキップ

Documentation Index

Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt

Use this file to discover all available pages before exploring further.

OpenClaw は実行前(モデルコンテキストの構築時)に、トランスクリプトへプロバイダー固有の修正を適用します。これらのほとんどは、厳格なプロバイダー要件を満たすためのメモリ内調整です。別のセッションファイル修復パスが、セッションの読み込み前に保存済み JSONL を書き換えることもありますが、それは不正な形式の行や、永続レコードとして無効な永続化済みターンに限られます。配信済みのアシスタント応答はディスク上で保持されます。プロバイダー固有のアシスタント事前入力の除去は、送信ペイロードの構築中にのみ行われます。修復が発生した場合、元のファイルはセッションファイルの横にバックアップされます。 範囲には以下が含まれます。
  • ランタイム専用プロンプトコンテキストを、ユーザーに見えるトランスクリプトターンの外に保つ
  • ツール呼び出し ID のサニタイズ
  • ツール呼び出し入力の検証
  • ツール結果ペアリングの修復
  • ターンの検証 / 順序付け
  • 思考シグネチャのクリーンアップ
  • Thinking シグネチャのクリーンアップ
  • 画像ペイロードのサニタイズ
  • プロバイダー再生前の空白テキストブロックのクリーンアップ
  • ユーザー入力の由来タグ付け(セッション間でルーティングされたプロンプト用)
  • Bedrock Converse 再生用の空のアシスタントエラーターン修復
トランスクリプト保存の詳細が必要な場合は、以下を参照してください。

グローバルルール: ランタイムコンテキストはユーザートランスクリプトではない

ランタイム/システムコンテキストは、ターンのモデルプロンプトに追加できますが、 エンドユーザーが作成したコンテンツではありません。OpenClaw は Gateway 応答、 キューされたフォローアップ、ACP、CLI、埋め込み Pi 実行のために、 トランスクリプト向けのプロンプト本文を別に保持します。保存される可視ユーザーターンは、 ランタイムで拡張されたプロンプトではなく、そのトランスクリプト本文を使用します。 ランタイムラッパーがすでに永続化されているレガシーセッションでは、Gateway 履歴 サーフェスは WebChat、TUI、REST、または SSE クライアントへメッセージを返す前に 表示用の投影を適用します。

実行場所

すべてのトランスクリプト衛生処理は埋め込みランナーに集約されています。
  • ポリシー選択: src/agents/transcript-policy.ts
  • サニタイズ/修復の適用: src/agents/pi-embedded-runner/replay-history.tssanitizeSessionHistory
ポリシーは providermodelApimodelId を使用して、何を適用するかを判断します。 トランスクリプト衛生処理とは別に、セッションファイルは読み込み前に(必要な場合)修復されます。
  • src/agents/session-file-repair.tsrepairSessionFileIfNeeded
  • run/attempt.tscompact.ts(埋め込みランナー)から呼び出されます

グローバルルール: 画像のサニタイズ

画像ペイロードは、サイズ制限によるプロバイダー側の拒否を防ぐため、 常にサニタイズされます(サイズ超過の base64 画像を縮小/再圧縮)。 これは、ビジョン対応モデルにおける画像起因のトークン負荷の制御にも役立ちます。 最大寸法を小さくすると、一般にトークン使用量は減ります。寸法を大きくすると詳細が保持されます。 実装:
  • src/agents/pi-embedded-helpers/images.tssanitizeSessionMessagesImages
  • src/agents/tool-images.tssanitizeContentBlocksImages
  • 最大画像辺は agents.defaults.imageMaxDimensionPx で設定可能です(デフォルト: 1200)。
  • このパスが再生コンテンツを走査する間、空白テキストブロックは削除されます。空になったアシスタント ターンは再生コピーから削除されます。空になったユーザーおよびツール結果ターンには、 空ではない省略コンテンツのプレースホルダーが与えられます。

グローバルルール: 不正な形式のツール呼び出し

inputarguments の両方が欠けているアシスタントツール呼び出しブロックは、 モデルコンテキストの構築前に削除されます。これにより、部分的に永続化された ツール呼び出し(たとえば、レート制限失敗後)によるプロバイダー拒否を防ぎます。 実装:
  • src/agents/session-transcript-repair.tssanitizeToolCallInputs
  • src/agents/pi-embedded-runner/replay-history.tssanitizeSessionHistory で適用

グローバルルール: セッション間入力の由来

エージェントが sessions_send を介して別のセッションにプロンプトを送信する場合(エージェント間の 返信/告知ステップを含む)、OpenClaw は作成されたユーザーターンを以下付きで永続化します。
  • message.provenance.kind = "inter_session"
OpenClaw はまた、ルーティングされたプロンプトテキストの前に、同じターンの [Inter-session message ... isUser=false] マーカーを付加します。これにより、 アクティブなモデル呼び出しは、外部のエンドユーザー指示と外部セッション出力を区別できます。 このマーカーには、利用可能な場合、送信元セッション、チャネル、ツールが含まれます。 トランスクリプトはプロバイダー互換性のために引き続き role: "user" を使用しますが、 可視テキストと由来メタデータの両方が、そのターンをセッション間データとして示します。 コンテキスト再構築時、OpenClaw は由来メタデータのみを持つ古い永続化済み セッション間ユーザーターンにも同じマーカーを適用します。

プロバイダーマトリクス(現在の動作)

OpenAI / OpenAI Codex
  • 画像のサニタイズのみ。
  • OpenAI Responses/Codex トランスクリプトでは、孤立した推論シグネチャ(後続のコンテンツブロックがない単独の推論項目)を削除し、モデルルート切り替え後の再生可能な OpenAI 推論を削除します。
  • 暗号化された空サマリー項目を含む、再生可能な OpenAI Responses 推論項目ペイロードを保持します。これにより、手動/WebSocket 再生で必要な rs_* 状態をアシスタント出力項目とペアに保てます。
  • ネイティブ ChatGPT Codex Responses は、セッションの prompt_cache_key を保持しながら、以前の項目 ID なしで過去の Responses 推論/メッセージ/関数ペイロードを再生することで、Codex ワイヤ互換に従います。
  • ツール呼び出し ID のサニタイズなし。
  • ツール結果ペアリング修復では、実際に一致した出力を移動し、欠落したツール呼び出しに対して Codex 形式の aborted 出力を合成する場合があります。
  • ターン検証または並べ替えなし。
  • OpenAI Responses ファミリーの欠落したツール出力は、Codex 再生正規化に合わせるため aborted として合成されます。
  • 思考シグネチャの除去なし。
OpenAI 互換 Chat Completions
  • 履歴上のアシスタント thinking/reasoning ブロックは再生前に除去されるため、 ローカルおよびプロキシ形式の OpenAI 互換サーバーは、reasoningreasoning_content などの 過去ターンの推論フィールドを受け取りません。
  • 現在の同一ターン内ツール呼び出し継続では、ツール結果が再生されるまで、 アシスタント推論ブロックをツール呼び出しに付けたままにします。
  • プロバイダー所有の例外は、そのワイヤプロトコルが再生された推論メタデータを必要とする場合、 オプトアウトできます。
Google(Generative AI / Gemini CLI / Antigravity)
  • ツール呼び出し ID のサニタイズ: 厳格な英数字。
  • ツール結果ペアリング修復と合成ツール結果。
  • ターン検証(Gemini 形式のターン交替)。
  • Google ターン順序の修正(履歴がアシスタントで始まる場合、小さなユーザーブートストラップを前置)。
  • Antigravity Claude: thinking シグネチャを正規化し、署名のない thinking ブロックを削除します。
Anthropic / Minimax(Anthropic 互換)
  • ツール結果ペアリング修復と合成ツール結果。
  • ターン検証(厳格な交替を満たすため、連続するユーザーターンをマージ)。
  • thinking が有効な場合、Cloudflare AI Gateway ルートを含め、送信される Anthropic Messages ペイロードから末尾のアシスタント事前入力ターンが除去されます。
  • 再生シグネチャが欠落、空、または空白の thinking ブロックは、 プロバイダー変換前に除去されます。それによりアシスタントターンが空になる場合、OpenClaw は 空ではない省略推論テキストでターン形状を保持します。
  • 除去が必要な古い thinking のみのアシスタントターンは、 空ではない省略推論テキストに置き換えられるため、プロバイダーアダプターが再生 ターンを削除しません。
Amazon Bedrock(Converse API)
  • 空のアシスタントストリームエラーターンは、再生前に空ではないフォールバックテキストブロックへ修復されます。 Bedrock Converse は content: [] のアシスタントメッセージを拒否するため、 stopReason: "error" と空コンテンツを持つ永続化済みアシスタントターンも、 読み込み前にディスク上で修復されます。
  • 空白テキストブロックのみを含むアシスタントストリームエラーターンは、 無効な空白ブロックを再生する代わりに、メモリ内の再生コピーから削除されます。
  • 再生シグネチャが欠落、空、または空白の Claude thinking ブロックは、 Converse 再生前に除去されます。それによりアシスタントターンが空になる場合、OpenClaw は 空ではない省略推論テキストでターン形状を保持します。
  • 除去が必要な古い thinking のみのアシスタントターンは、 空ではない省略推論テキストに置き換えられるため、Converse 再生は厳格なターン形状を維持します。
  • 再生では OpenClaw 配信ミラーおよび Gateway 注入のアシスタントターンをフィルタリングします。
  • 画像のサニタイズはグローバルルールを通じて適用されます。
Mistral(モデル ID ベースの検出を含む)
  • ツール呼び出し ID のサニタイズ: strict9(英数字、長さ 9)。
OpenRouter Gemini
  • 思考シグネチャのクリーンアップ: base64 ではない thought_signature 値を除去します(base64 は保持)。
OpenRouter Anthropic
  • 推論が有効な場合、検証済み OpenRouter OpenAI 互換 Anthropic モデルペイロードから 末尾のアシスタント事前入力ターンが除去されます。これは直接の Anthropic および Cloudflare Anthropic 再生動作に一致します。
その他すべて
  • 画像のサニタイズのみ。

履歴上の動作(2026.1.22 以前)

2026.1.22 リリース以前、OpenClaw は複数層のトランスクリプト衛生処理を適用していました。
  • transcript-sanitize extension がすべてのコンテキスト構築時に実行され、以下が可能でした。
    • ツール使用/結果のペアリングを修復する。
    • ツール呼び出し ID をサニタイズする(_/- を保持する非厳格モードを含む)。
  • ランナーもプロバイダー固有のサニタイズを行っており、作業が重複していました。
  • プロバイダーポリシーの外でも追加の変更が発生していました。これには以下が含まれます。
    • 永続化前にアシスタントテキストから <final> タグを除去する。
    • 空のアシスタントエラーターンを削除する。
    • ツール呼び出し後のアシスタントコンテンツをトリミングする。
この複雑さにより、プロバイダー間のリグレッション(特に openai-responsescall_id|fc_id ペアリング)が発生しました。2026.1.22 のクリーンアップでは拡張を削除し、 ロジックをランナーに集約し、OpenAI を画像サニタイズ以外は非変更にしました。

関連