技術リファレンス

トランスクリプト衛生

このドキュメントでは、実行前(モデルコンテキスト構築時)にトランスクリプトに適用されるプロバイダー固有の修正について説明します。これらは厳格なプロバイダー要件を満たすために使用されるメモリ内の調整です。これらの衛生ステップは、保存されたJSONLトランスクリプトをディスク上に書き換えません。ただし、別のセッションファイル修復パスが、セッションがロードされる前に無効な行を削除することで、不正な形式のJSONLファイルを書き換える場合があります。修復が発生すると、元のファイルはセッションファイルと共にバックアップされます。範囲は以下を含みます:

  • ツール呼び出しIDのサニタイズ
  • ツール呼び出し入力の検証
  • ツール結果のペアリング修復
  • ターンの検証 / 順序付け
  • 思考シグネチャのクリーンアップ
  • 画像ペイロードのサニタイズ
  • ユーザー入力の出所タグ付け(セッション間ルーティングされたプロンプト用)

トランスクリプトストレージの詳細が必要な場合は、以下を参照してください:


実行箇所

すべてのトランスクリプト衛生処理は、組み込みランナーに一元化されています:

  • ポリシー選択: src/agents/transcript-policy.ts
  • サニタイズ/修復の適用: src/agents/pi-embedded-runner/google.ts 内の sanitizeSessionHistory

ポリシーは、適用する内容を決定するために providermodelApimodelId を使用します。トランスクリプト衛生とは別に、セッションファイルはロード前に(必要に応じて)修復されます:

  • src/agents/session-file-repair.ts 内の repairSessionFileIfNeeded
  • run/attempt.ts および compact.ts(組み込みランナー)から呼び出されます

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

画像ペイロードは常にサニタイズされ、サイズ制限(過大なbase64画像のダウンスケール/再圧縮)によるプロバイダー側の拒否を防ぎます。これはまた、視覚対応モデルの画像駆動トークン圧力を制御するのにも役立ちます。一般的に、最大寸法を低くするとトークン使用量が減少し、寸法を高くすると詳細が保持されます。実装:

  • src/agents/pi-embedded-helpers/images.ts 内の sanitizeSessionMessagesImages
  • src/agents/tool-images.ts 内の sanitizeContentBlocksImages
  • 最大画像辺は agents.defaults.imageMaxDimensionPx(デフォルト: 1200)で設定可能です。

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

inputarguments の両方が欠落しているアシスタントのツール呼び出しブロックは、モデルコンテキストが構築される前に削除されます。これにより、(例えば、レート制限失敗後の)部分的に永続化されたツール呼び出しによるプロバイダー拒否を防ぎます。実装:

  • src/agents/session-transcript-repair.ts 内の sanitizeToolCallInputs
  • src/agents/pi-embedded-runner/google.ts 内の sanitizeSessionHistory で適用されます

グローバルルール: セッション間入力の出所

エージェントが sessions_send を介してプロンプトを別のセッションに送信する場合(エージェント間の返信/アナウンスステップを含む)、OpenClawは作成されたユーザーターンを以下のように永続化します:

  • message.provenance.kind = "inter_session"

このメタデータはトランスクリプト追加時に書き込まれ、ロールは変更されません(プロバイダー互換性のために role: "user" は維持されます)。トランスクリプトリーダーはこれを使用して、ルーティングされた内部プロンプトをエンドユーザー作成の指示として扱うことを避けることができます。コンテキスト再構築中、OpenClawはまた、モデルが外部エンドユーザー指示と区別できるように、それらのユーザーターンに短い [Inter-session message] マーカーをメモリ内で先頭に追加します。


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

OpenAI / OpenAI Codex

  • 画像サニタイズのみ。
  • OpenAI Responses/Codexトランスクリプトについて、孤立した推論シグネチャ(後続のコンテンツブロックのない単独の推論項目)を削除。
  • ツール呼び出しIDのサニタイズなし。
  • ツール結果のペアリング修復なし。
  • ターンの検証や順序変更なし。
  • 合成ツール結果なし。
  • 思考シグネチャの除去なし。

Google (Generative AI / Gemini CLI / Antigravity)

  • ツール呼び出しIDのサニタイズ: 厳密な英数字。
  • ツール結果のペアリング修復と合成ツール結果。
  • ターンの検証(Geminiスタイルのターン交互性)。
  • Googleターン順序修正(履歴がアシスタントで始まる場合、小さなユーザーブートストラップを先頭に追加)。
  • Antigravity Claude: 思考シグネチャの正規化; 署名のない思考ブロックを削除。

Anthropic / Minimax (Anthropic互換)

  • ツール結果のペアリング修復と合成ツール結果。
  • ターンの検証(厳密な交互性を満たすために連続するユーザーターンをマージ)。

Mistral (モデルIDベースの検出を含む)

  • ツール呼び出しIDのサニタイズ: strict9(英数字長さ9)。

OpenRouter Gemini

  • 思考シグネチャのクリーンアップ: base64以外の thought_signature 値を除去(base64は保持)。

その他すべて

  • 画像サニタイズのみ。

過去の動作(2026.1.22以前)

2026.1.22リリース以前、OpenClawは複数のレイヤーのトランスクリプト衛生処理を適用していました:

  • transcript-sanitize拡張機能 がすべてのコンテキスト構築で実行され、以下が可能でした:
    • ツール使用/結果のペアリング修復。
    • ツール呼び出しIDのサニタイズ(_/- を保持する非厳格モードを含む)。
  • ランナーもプロバイダー固有のサニタイズを実行し、作業が重複していました。
  • プロバイダーポリシーの外部で追加の変更が発生していました:
    • 永続化前にアシスタントテキストから <final> タグを除去。
    • 空のアシスタントエラーターンを削除。
    • ツール呼び出し後のアシスタントコンテンツをトリミング。

この複雑さにより、クロスプロバイダーのリグレッション(特に openai-responsescall_id|fc_id ペアリング)が発生しました。2026.1.22のクリーンアップにより、拡張機能が削除され、ロジックがランナーに一元化され、OpenAIは画像サニタイズを超えてノータッチとなりました。

API使用量とコスト日付と時刻