GPT-5.6 Sol への本番 AI エージェントの移行

GPT-5.6 Sol への本番 AI エージェントの移行

Ploy は、マーケティング Web サイトの企画・構築・編集を行う本番 AI エージェントを Claude Opus 4.8 から GPT-5.6 Sol に移行しました。移行により、ビルドの実時間が 2.2 倍短縮され、運用コストが 27 %削減されましたが、視覚品質スコアは維持または向上しています。

モデル等価性のための評価ハーネス最適化

評価ハーネスはしばしば現行モデルに合わせて静かに調整されており、 challenger モデルをテストするときに性能データが不正確になることがあります。Ploy は、GPT-5.6 の初期失敗の約 3 分の 1 がハーネスの前提条件によるもので、モデル自体の欠陥ではないことを発見しました。

主なハーネス失敗

  • ツール呼び出し予算: 既存のハーネスは Claude Opus の逐次ツール呼び出しスタイル向けにサイズ設定されていました。GPT-5.6 は並列ツール呼び出しを利用するため、正しくケースを解決していても予算が枯渇してしまいました。
  • エグゼキュータのサポート: 評価エグゼキュータはバッチファイル読み取りをサポートしていませんでしたが、GPT-5.6 はこの機能を頻繁に使用します。一方 Opus はほとんど使用しませんでした。
  • 暗黙の閾値: 一部データセットには明示的な minScore がなく、デフォルトで 1.0 が適用されていました。その結果、GPT-5.6 は高品質出力(例: スコア 0.98)を「失敗」とみなしてしまい、より柔軟な閾値であれば合格していたケースがありました。

パフォーマンス比較: Claude Opus 4.8 vs. GPT-5.6

完了したビルドあたりの平均 Claude Opus 4.8 (n=11) GPT-5.6 (n=10)
コスト $3.06 $2.22
実時間 8m 00s 3m 42s
入力トークン数 2.60M 1.70M
出力トークン数 33.0K 17.1K
ビジュアルスコア 0.936 0.970

スキーマ変換によるツール呼び出し破損の解決

GPT-5.6 は、オプションパラメータを省略せずにすべて埋めて(例: offset: 0)しまうという特有の挙動を示します。これにより、実際に意図した引数と区別できない「作り出された」値がツール実行の大きな失敗につながります。

「作り出された値」問題

Ploy の code ツールは 25 個のパラメータを持ちますが、GPT-5.6 は 100 % の呼び出しで 25 キーすべてを送信しました。一方 Claude Opus 4.8 は未使用パラメータを 99.9 % のケースで省略していました。その結果、offset: 0 が実際の引数として送られたため、ファイル読み取りの 52 %〜64 % が空になっていました。

解決策: 必須だが Nullable なスキーマ

プロンプトや OpenAI の strict モードだけではこの挙動は解消できませんでした。Ploy はプロバイダー境界でスキーマ変換を実装しました:

  1. Optional を Nullable に書き換える: すべてのオプションプロパティを anyOf: [T, null] を用いた必須かつ Nullable に変換します。これにより、パラメータが使用されないときはモデルが明示的に null を出力する必要があります。
  2. Null を除去する: ツール呼び出しの接続部で null 値を検証前に除去し、ツール実装が常に同じ入力を受け取れるようにします。

この変更により、空ファイル読み取りは 0 % に減少し、タスクあたりの総ツール呼び出し回数は約 30 % 減少しました。

GPT-5.6 用プロンプトキャッシュの再構成

GPT-5.6 のプロンプトキャッシュは Anthropic の組織スコープキャッシュとは根本的に異なります。prompt_cache_key を正しく設定しないとキャッシュヒット率が 0 % になり、コストが大幅に上がります。

アーキテクチャ上の違い

  • Anthropic (Claude): キャッシュは組織スコープです。静的プレフィックス(例: ツールスキーマ 29K トークン)は一度キャッシュされ、すべての会話とワークスペースで共有されます。
  • OpenAI (GPT-5.6): キャッシュには明示的な prompt_cache_breakpoint マーカーと prompt_cache_key が必要です。各キーは約 15 リクエスト/分 (RPM) を処理できるキャッシュノードにマッピングされます。トラフィックがこれを超えると、リクエストはコールドノードに流れ、キャッシュミスが発生します。

実装戦略: ワークスペーススコープキー

ヒット率とスループットのバランスを取るため、Ploy はワークスペーススコープキー (ws:{workspaceId}) を導入しました:

  • エントリ A(静的プレフィックス): ワークスペース内のすべてのセッションで共有され、新規セッションの最初の呼び出しを安価にします。
  • エントリ B(ワークスペースコンテキスト): 同一ワークスペース内の会話で共有され、ワークスペースメモリが変化したときに更新されます。
  • エントリ C(セッションチェーン): 付加的な会話ターンのための暗黙的な全プロンプトチェーンです。

この再構成後、最初の呼び出しにおけるキャッシュヒット率は 0 % から 83.7 % に上昇し、合計の非キャッシュ入力トークンは 28 % 減少しました。

推論リプレイ失敗への対処

GPT-5.6 の Responses API はデフォルトでサーバー側アイテム参照として過去ターンの推論をリプレイします。そのため、会話途中で Item 'rs_...' not found エラーが断続的に発生していました。Ploy は store: false を設定し、SDK が暗号化された推論コンテンツを要求して自己完結型ブロブとしてリプレイするように変更し、問題を解決しました。

コミュニティの洞察と反論

業界の実務者は、モデルは本番環境で簡単に入れ替えられるものではないと指摘しています。ある開発者は次のように述べています:

ハーネス、プロンプト、モデル全体を一つのシステムとして捉えるべきであり、最適なパフォーマンスを求めるなら部品ごとに交換できるという考え方は成立しません。

他の批判は GPT-5.6 の設計品質に焦点を当て、Claude Opus のブランド一貫性を好むユーザーや、GPT-5.6 は実質的に以前のモデルを再パッケージしたもので、Opus 4.6 などの旧バージョンに比べて品質向上が僅かであると主張する声もあります。


要約: Ploy は本番 AI エージェントを Claude Opus 4.8 から GPT-5.6 Sol に移行し、ツールスキーマ、プロンプトキャッシュ、評価ハーネスの重要な調整により、速度が 2.2 倍に向上し、コストが 27 % 削減されました。

タイトル: GPT-5.6 Sol への本番 AI エージェントの移行

Sources