Background mode は「長時間 reasoning を同期HTTPで待つな」という運用変更
このノートは原文の代替ではありません。読むべきポイントと実装上の意味を整理し、原典への入口を示します。
要点まとめ
- OpenAI の background mode は、数分かかる AI タスクを『接続を開いたまま待つ処理』ではなく、後から追跡するジョブとして扱う考え方をはっきり示している。
- 重要なのは timeout 回避だけではない。依頼受付、処理中、完了、キャンセル済みを前提に、アプリ側の仕事の流れを変える必要がある。
- guide は、結果をしばらく保持して追跡を成立させる都合上、Zero Data Retention 互換ではないと明記している。
- 技術的には Responses API で `background=true`、polling、streaming 再接続、cancel を組み合わせるが、進捗表示や失敗時再試行まで設計しないと片手落ちになる。
何が変わったのか
これまでの多くの実装は、Responses API を通常の request-response と同じ感覚で扱ってきました。この guide はそこを明確に崩し、長時間 task は最初から非同期 resource として扱うよう促しています。生成開始時に `background=true` を付け、`GET /responses/{id}` で status を追い、必要なら cancel し、stream を落としても `starting_after` と `sequence_number` で再開する流れです。
なぜ重要か
日本の小規模開発では、長い LLM タスクでも『とりあえず同期で呼ぶ』『ロード中を長く出す』で済ませがちです。しかしその設計では、モバイル回線、社内 proxy、ブラウザ再読込、バックグラウンド遷移、serverless timeout ですぐ壊れます。background mode は、その壊れ方を前提にした API です。PM や創業者にとっても、background 化すると UX は『待つ画面』ではなく job 管理に寄ります。同時に、保持期間、通知、再試行、キャンセル、コスト、個人情報 retention を説明する必要が出ます。
技術的ポイント
- `background=true` を付けると response は非同期で走り、status は `queued` と `in_progress` を経て terminal state に到達する。client は retrieve/poll を前提にする必要がある。
- guide は roughly 10 minutes の response data 保持を理由に、background mode は ZDR 互換ではないと明記している。ZDR project でも request 自体は受理されるが、保証を崩す点が重要。
- cancel endpoint があり、二重 cancel は idempotent とされる。途中停止の UX と job cleanup を自前で設計しやすい。
- `background=true` と `stream=true` を併用でき、stream event の `sequence_number` を cursor として持てば `starting_after` で再接続できる。
- 現時点では synchronous response より time to first token が高いと guide にある。速い体感応答が必要な場面では background が万能ではない。
英日キーワード
| 英語 | 日本語 | 補足 |
|---|---|---|
| background mode | バックグラウンド実行モード | 長時間 task を非同期 response として扱うモード。待機ではなく job 管理の設計が必要になる。 |
| polling | ポーリング | 定期的に status を取りに行く方式。長時間 task の進捗追跡でよく使う。 |
| terminal state | 終端状態 | それ以上進行しない最終状態。job 管理では完了、失敗、キャンセル済みをここに含める。 |
| cancel | ||
| sequence_number | シーケンス番号 | stream 再開位置を示す cursor。切断を正常系として扱う実装で重要になる。 |
| Zero Data Retention (ZDR) | データ非保持保証 | 一定期間保持しない前提の運用要件。background mode のように保持を前提にする機能とは両立しない場合がある。 |
試すなら
- まず 30秒以上かかる task を洗い出し、同期呼び出しのまま残すものと background 化するものを分ける。
- background 化する task には、job 一覧、status 表示、完了通知、cancel ボタン、失敗時再試行方針をセットで設計する。
- ZDR や社内 retention 要件がある案件では、roughly 10 minutes 保持を受け入れられるか先に判断する。
- stream を使うなら `sequence_number` の保存と再接続動線を入れ、接続断を正常系として扱う。
注意点
- ガイド上では公開日が見当たらなかった。初出時期が必要なら changelog や docs 履歴の別確認が要る。
- background mode は timeout 問題を和らげるが、ジョブキュー、通知、重複実行防止、失敗時 cleanup までは代行しない。
- ZDR 非互換は小さくない制約で、個人情報や機密テキストを扱う workflow では採否判断そのものを変えうる。