概要
- OpenAI はリアルタイムAI対話のために WebRTCスタック を再設計
- 低遅延・安定性 ・グローバル対応を重視したアーキテクチャ
- 分割リレー+トランシーバ 方式でパケットルーティングを最適化
- WebRTC標準 の利点を活かしつつ、クラウド環境に最適化
- セッション管理・メディア転送 の効率化による自然な音声体験の実現
OpenAIのリアルタイム音声AI体験を支えるWebRTC再設計
- Voice AI の自然さは会話のスピード維持が鍵
- ネットワーク遅延 が発生すると、即座に「不自然な間」や「途切れ」が発生
- ChatGPT voice や Realtime API 利用開発者、インタラクティブなワークフローのエージェントにも影響
- OpenAI規模 (週9億アクティブユーザー)での具体要件
- グローバル対応
- セッション開始時の高速接続
- 低遅延・安定したメディア往復時間(低ジッター・低パケットロス)
スケーラビリティとWebRTCの課題
- 従来のWebRTC (セッションごとに1ポート)はOpenAIのインフラに適合しにくい
- ICE/DTLS の状態管理と安定したセッションオーナーシップが必要
- グローバルルーティングで ファーストホップ遅延 を最小化
- WebRTC は低遅延音声・映像・データ伝送のオープン標準
- ICE:接続確立・NAT越え
- DTLS/SRTP:暗号化
- コーデックネゴシエーション:圧縮・復号
- RTCP:品質制御
- エコーキャンセルやジッターバッファなどのクライアント機能
AIプロダクトにWebRTCが重要な理由
- NAT越え・暗号化・コーデック管理 をクライアントごとに実装不要
- WebRTCエコシステム (オープンソース実装・標準化)の恩恵
- Justin Uberti(WebRTC設計者), Sean DuBois(Pion開発者)もOpenAIに参加
- AI体験 では音声が連続ストリームで届くことが最重要
- ユーザー発話中に 逐次認識・推論・音声生成 が可能
- 「会話的」体験と「プッシュ・トゥ・トーク型」の違い
メディア終端方式の選択
- SFU(Selective Forwarding Unit) :多者通話・グループ向けに最適
- 各参加者のWebRTC接続をSFUが終端し、音声ストリームを選択的に転送
- シグナリング・録音・ポリシー管理が一元化
- OpenAIの用途 は1:1が大半(ユーザー1人⇔モデル1つ)
- トランシーバモデル を採用
- エッジサービスがWebRTC接続を終端
- メディア・イベントを内部プロトコルに変換し、モデル推論・音声生成・オーケストレーションへ
- トランシーバモデル を採用
トランシーバサービスの役割と課題
- シグナリング :SDP交渉・コーデック選択・ICE認証情報・セッション設定
- メディア :WebRTC接続終端・バックエンドとの接続維持
- Kubernetes上 での運用を想定
- 従来の「セッションごとに1ポート」モデルは 大規模UDPポート管理が困難
- クラウドLBやKubernetesサービス は数万ポート単位の管理に非対応
- セキュリティ・監査・オートスケール にも不向き
シングルポート設計とセッションオーナーシップ
- 1サーバあたり1UDPポート +アプリ層でのデマルチプレクス
- ポート数問題は解決
- ただし、 セッションの所有権維持 が新たな課題
- ICE/DTLSは状態フルなため、同一プロセスでパケット受信が必須
- パケットが別プロセスに届くと 接続失敗やメディア破損 リスク
各方式の評価とOpenAIの選択
- ユニークIP:port/セッション :直結だが大規模運用に不向き
- ユニークIP:port/サーバ :ポート数減だが負荷分散環境では不十分
- TURNリレー :一元管理可能だがセットアップ遅延や移動時の困難
- OpenAIのリレー+トランシーバ方式 :UDP公開範囲最小・セッション所有維持・カスタム連携が必要
分割リレー+トランシーバアーキテクチャの詳細
- シグナリング はトランシーバが担当、 メディア はまずリレーを経由
- リレー はUDPパケットの軽量転送レイヤー
- メディア復号・ICE管理・コーデック交渉は行わず、最小限のメタデータで宛先決定
- トランシーバ はWebRTCセッション状態を全て保持
- クライアントから見れば標準的なWebRTCセッションと同等
- ファーストパケットルーティング が肝
- ICE username fragment(ufrag) にルーティング情報を埋め込み
- シグナリング中にトランシーバがufrag生成、リレーVIPとUDPポートをSDPで返却
- クライアントはVIP:port(例:203.0.113.10:3478)へ送信
- リレー は最初のSTUNパケットからufragを抽出し、トランシーバへ転送
- トランシーバは共有UDPソケットで受信、以降はセッション情報でルーティング
- リレーのセッション情報 はメモリ上の最小構成
- カウンタ・タイマーのみ保持し、再起動時もufragから再構築可能
まとめ
- OpenAI はWebRTCの標準挙動を維持しつつ、 大規模・低遅延・高信頼性 を実現
- 分割リレー+トランシーバ 方式でクラウド・Kubernetes環境に最適化
- 音声AI体験 の自然さと拡張性を両立