---
read_when:
    - トランスクリプトの形状に関連するプロバイダーのリクエスト拒否をデバッグしている
    - トランスクリプトのサニタイズまたはツール呼び出し修復ロジックを変更しています
    - プロバイダー間のツール呼び出し ID の不一致を調査しています
summary: 'リファレンス: プロバイダー固有のトランスクリプトのサニタイズと修復ルール'
title: トランスクリプトの整理
x-i18n:
    generated_at: "2026-05-10T19:52:17Z"
    model: gpt-5.5
    provider: openai
    source_hash: 197081fe829cf6463e84c5ead9b4c631a8088e771e68163a35ed39d9efbdbf6a
    source_path: reference/transcript-hygiene.md
    workflow: 16
---

OpenClaw は実行前（モデルコンテキストの構築時）に、トランスクリプトへ**プロバイダー固有の修正**を適用します。これらのほとんどは、厳格なプロバイダー要件を満たすための**メモリ内**調整です。別のセッションファイル修復パスが、セッションの読み込み前に保存済み JSONL を書き換えることもありますが、それは不正な形式の行や、永続レコードとして無効な永続化済みターンに限られます。配信済みのアシスタント応答はディスク上で保持されます。プロバイダー固有のアシスタント事前入力の除去は、送信ペイロードの構築中にのみ行われます。修復が発生した場合、元のファイルはセッションファイルの横にバックアップされます。

範囲には以下が含まれます。

- ランタイム専用プロンプトコンテキストを、ユーザーに見えるトランスクリプトターンの外に保つ
- ツール呼び出し ID のサニタイズ
- ツール呼び出し入力の検証
- ツール結果ペアリングの修復
- ターンの検証 / 順序付け
- 思考シグネチャのクリーンアップ
- Thinking シグネチャのクリーンアップ
- 画像ペイロードのサニタイズ
- プロバイダー再生前の空白テキストブロックのクリーンアップ
- ユーザー入力の由来タグ付け（セッション間でルーティングされたプロンプト用）
- Bedrock Converse 再生用の空のアシスタントエラーターン修復

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

- [セッション管理の詳細解説](/ja-JP/reference/session-management-compaction)

---

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

ランタイム/システムコンテキストは、ターンのモデルプロンプトに追加できますが、
エンドユーザーが作成したコンテンツではありません。OpenClaw は Gateway 応答、
キューされたフォローアップ、ACP、CLI、埋め込み Pi 実行のために、
トランスクリプト向けのプロンプト本文を別に保持します。保存される可視ユーザーターンは、
ランタイムで拡張されたプロンプトではなく、そのトランスクリプト本文を使用します。

ランタイムラッパーがすでに永続化されているレガシーセッションでは、Gateway 履歴
サーフェスは WebChat、TUI、REST、または SSE クライアントへメッセージを返す前に
表示用の投影を適用します。

---

## 実行場所

すべてのトランスクリプト衛生処理は埋め込みランナーに集約されています。

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

ポリシーは `provider`、`modelApi`、`modelId` を使用して、何を適用するかを判断します。

トランスクリプト衛生処理とは別に、セッションファイルは読み込み前に（必要な場合）修復されます。

- `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`）。
- このパスが再生コンテンツを走査する間、空白テキストブロックは削除されます。空になったアシスタント
  ターンは再生コピーから削除されます。空になったユーザーおよびツール結果ターンには、
  空ではない省略コンテンツのプレースホルダーが与えられます。

---

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

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

実装:

- `src/agents/session-transcript-repair.ts` の `sanitizeToolCallInputs`
- `src/agents/pi-embedded-runner/replay-history.ts` の `sanitizeSessionHistory` で適用

---

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

エージェントが `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 互換サーバーは、`reasoning` や `reasoning_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-responses` の
`call_id|fc_id` ペアリング）が発生しました。2026.1.22 のクリーンアップでは拡張を削除し、
ロジックをランナーに集約し、OpenAI を画像サニタイズ以外は**非変更**にしました。

## 関連

- [セッション管理](/ja-JP/concepts/session)
- [セッションの刈り込み](/ja-JP/concepts/session-pruning)
