OpenAI 重新設計 WebRTC 堆疊實現低延遲語音 AI。
OpenAI 即時 AI 互動團隊透過「分離式 relay 加 transceiver」架構,解決大規模部署 WebRTC 的埠耗盡、狀態黏著與全球路由延遲問題,服務超過 9 億週活躍使用者,讓語音對話跟上說話節奏,避免尷尬停頓或截斷插話。
WebRTC 在 AI 產品的核心價值
WebRTC 作為開放標準,標準化 ICE(互動式連線建立)、DTLS(資料包傳輸層安全協定)、SRTP(安全即時傳輸協定)、codec 協商、RTCP(即時傳輸控制協定)與客戶端功能如回音消除與抖動緩衝,讓 OpenAI 無需從頭處理 NAT 穿透、加密與網路適應,直接聚焦連接媒體與模型。
對語音 Agent 而言,音訊連續流到達最關鍵,使用者說話中即可轉錄、推理、呼叫工具或產生語音,區別於「按下說話」式系統。
團隊建構於 Pion 開源實作與 Justin Uberti(WebRTC 原始架構師)、Sean DuBois(Pion 創建者)基礎,如今兩人皆為 OpenAI 同事,強化 WebRTC 與即時 AI 整合。
媒體架構選擇:transceiver 優於 SFU
SFU(選擇性轉發單元)適合多方通話如群組或會議,將音訊 codec、RTCP、資料通道集中處理,但 OpenAI 多為 1:1 延遲敏感 session(如使用者對模型或應用對 Agent),故選 transceiver 模型。
transceiver 在邊緣終結 WebRTC 連線,擁有 ICE、DTLS 握手、SRTP 金鑰與 session 生命週期,將媒體轉為簡單內部協定供推論、轉錄、生成與調度。
後端服務無需扮演 WebRTC peer,更易擴展;狀態集中簡化所有權,避免分散複雜。
Kubernetes 部署痛點:埠耗盡與狀態黏著
首版 transceiver 以 Go 基於 Pion 實作,處理信令(SDP 協商、codec 選擇、ICE 憑證)與媒體(終結下游 WebRTC、上游後端連線),驅動 ChatGPT 語音、Realtime API 與研究專案。
傳統「每個 session 一個埠」模型不適 Kubernetes:
高並發需數萬 UDP 埠,雲端負載平衡器、健康檢查、防火牆與 rollout 複雜,擴大攻擊面,阻礙 pod 新增/移除/調度彈性。
「每台伺服器一個 UDP 埠」解埠問題,但 ICE/DTLS 有狀態,封包須黏著原行程,否則連線檢查、握手、解密或 ICE restart 失敗,媒體中斷。
核心架構:relay + transceiver 分離
解決方案分離「封包路由」與「協定終結」:信令直達 transceiver 設定 session,媒體先經 relay(輕量 UDP 轉發層,小固定公開介面),relay 只讀 metadata 轉發,不解密、不執行 ICE、不協商 codec,客戶端視為標準 WebRTC。
首封包路由基於 ICE ufrag:伺服器端產生含路由 metadata 的 ufrag(username fragment),SDP answer 回傳共享 relay VIP(如 203.0.113.10:3478),首 STUN binding request 經 ufrag 解碼轉發至 transceiver(共享單 UDP socket,非每個 session 一 socket)。
後續封包:經快取(Redis 保存 <客戶端 IP:Port, transceiver IP:Port>)透明轉發,狀態極簡(記憶體 session、計數器、逾時清理),重啟僅短暫丟失,下 STUN 重建。
全球部署:Global Relay 與地理導向
Global Relay 為地理分散入口,縮短首跳延遲、減抖動與封包遺失。
Cloudflare geo/proximity steering 導信令至鄰近 transceiver 叢集,決定 session 地點與 Global Relay 位址;ufrag 導媒體至指定叢集與 transceiver。
結合讓信令與媒體走鄰近路徑,縮短首次 ICE 檢查往返時間,使用者更快開始說話。
Relay 實作與效能優化
以 Go 撰寫精簡 userspace 實作,無 kernel-bypass,避免維運複雜:
不終結協定,只解析 STUN/ufrag;後續 DTLS/RTP/RTCP 用快取不透明轉發。
暫態記憶體狀態,水平擴展,多實例後負載平衡,重啟快速恢復。
效率措施:
SO_REUSEPORT:多 worker 綁定同一 UDP 埠,核心分配封包避瓶頸。
runtime.LockOSThread:goroutine 釘 OS 執行緒,同 flow 封包留同一 CPU 核心,優快取局部性、減 context switching。
預配置緩衝、最少記憶體複製減解析開銷、避垃圾回收。
小規模 relay 已承載全球流量,證明無需 kernel bypass。
成果與關鍵心得
架構讓 WebRTC 在 Kubernetes 運行,無需暴露數千 UDP 埠,提升保全、負載平衡與擴展;小攻擊面、更好基礎設施支援,確認無 SFU 適合 1:1 延遲敏感負載,推論服務更易擴展。
心得強調複雜度置薄路由層,而非後端或客戶端自訂:
邊緣保留 WebRTC 語義,保瀏覽器/行動互通。
硬狀態集中 transceiver,relay 只轉發。
用 ICE ufrag 現有鉤子實現確定性首封包路由,無熱路徑查詢。
先優一般情況,再 kernel bypass;Go + SO_REUSEPORT 等足夠。
即時語音 AI 需基礎設施讓延遲「不可察覺」,OpenAI 改變 WebRTC 部署形態,但維持客戶端期望。