OpenAI Realtime API 是什麼:語音到語音會話、WebRTC 與 WebSocket、臨時密鑰和事件機制

Realtime API 讓模型直接處理音頻,做可以隨時打斷的語音助手。本文按官方文檔講它是什麼、什麼時候用、瀏覽器接入的流程、session 與事件、可用聲音、60 分鐘會話上限、安全標識,以及它和轉寫、文字轉語音的分工。

NNathaniel bigo··原創首發·AI 輔助撰寫
10 分鐘讀完
資料核對於 2026-11-05 · 依據官方文檔與公開資料整理 其他 帳號
本文根據 OpenAI 官方《Getting started with the Realtime API》和《Realtime conversations》整理,資料核對於 2026-11-05。配圖為本站整理的示意圖,不是介面截圖。代碼裏的模型名取自官方當天示例,請以官方模型頁為準。本站(bigolab.com)不是 OpenAI 官方網站。API 是按用量計費的獨立服務,與 ChatGPT 訂閱分開計算,Key 的獲取見 /guides/openai-api-key。

適用於誰

  • 聽說過 Realtime API,但搞不清它和普通的 Responses 請求、語音轉寫有什麼區別的人;
  • 想做語音助手、電話機器人、可以隨時打斷的對話介面的開發者;
  • 讀到官方說文字轉語音接口要棄用、想知道“官方推薦的方向”長什麼樣的人。

結論先說

  1. Realtime API 是做“語音到語音”對話的接口:官方說,模型直接處理音頻,保持對話狀態,還能調用工具。
  2. 適合“像聊天一樣即時”的交互:官方點名的特性是可以打斷(barge-in)、首個音頻延遲低、自然輪流發言、實時工具調用。
  3. 它是有狀態的會話(session),通過事件通信,不是“一次請求一次響應”的寫法。
  4. 瀏覽器裏用 WebRTC,伺服器裏用 WebSocket,瀏覽器不能拿長期密鑰,要由你的伺服器簽發臨時密鑰。
  5. 一次會話最長 60 分鐘。
  6. 不需要對話、只想把聲音變成文字,用轉寫模式或文件轉寫,不用這套。

瀏覽器接入 Realtime 的五個環節:臨時密鑰、前端會話、建立連接、會話內處理、事件

圖:本站根據 OpenAI 官方《Getting started with the Realtime API》 整理的示意圖

一、和普通請求有什麼不同

之前的文章裏,無論是 /guides/openai-responses-api 還是流式輸出,都是“你發一個請求,模型回一個響應”。Realtime 不一樣,官方把它描述成一個有狀態的會話,有三個組成部分:

  • Session(會話對象):控制交互的參數,比如用哪個模型、哪種聲音、其他配置;
  • Conversation(對話):當前會話裏的用戶輸入項和模型輸出項;
  • Response(響應):模型生成的音頻或文字項,加入對話。

你用客戶端事件去改變會話狀態,用服務端事件去響應狀態的變化。如果用 WebRTC,大部分音頻採集和播放可以由瀏覽器的 WebRTC 接口代勞;如果用 WebSocket 傳音頻,你需要手動處理輸入音頻緩衝區,把 Base64 編碼的音頻放進 JSON 事件裏發給伺服器。

二、官方的瀏覽器接入流程

官方入門頁用 Agents SDK 的 JavaScript 版演示。四步:

  1. 你的應用伺服器為這次 Realtime 會話創建一個臨時客戶端密鑰(ephemeral client secret);
  2. 前端創建 RealtimeSession;
  3. 會話在瀏覽器裏通過 WebRTC 連接,在伺服器上通過 WebSocket 連接;
  4. 代理在這個會話內處理音頻輪次、工具、打斷和交接。

官方示例:

javascript
import { RealtimeAgent, RealtimeSession } from "@openai/agents/realtime";

const agent = new RealtimeAgent({
  name: "Assistant",
  instructions: "You are a helpful voice assistant.",
});

const session = new RealtimeSession(agent, {
  model: "gpt-realtime-2.1", // 以官方模型頁當天為準
});

await session.connect({
  apiKey: "ek_...(來自你伺服器的臨時密鑰)",
});

要點:apiKey 填的是你伺服器簽發的臨時密鑰,不是你的 OpenAI 長期 Key。 長期 Key 的保管見 /guides/openai-api-key,絕不能寫進網頁。官方建議把傳輸細節放在 session 層,把業務邏輯放在代理定義裏,工具、交接和護欄的加法和文本代理一樣。如果需要更底層的控制,官方有 WebRTC 和 WebSocket 的專門連接指南,本文不展開。

三、事件和 session.update

會話建立後,伺服器會先發一個 session.created 事件,說明會話準備好了。之後你可以用 session.update 事件修改配置,伺服器回 session.updated,裏面是新的狀態。官方說明:

  • 大多數屬性可以隨時更新,唯一的例外是 voice:模型在會話裏輸出過一次音頻之後,就不能再改聲音了;
  • 在 session.update 裏,官方示例設定了 output_modalities(["audio"] 或 ["text"],Python 示例註釋裏寫明二選一、不要組合)、輸入輸出音頻格式、turn_detection(如 semantic_vad)、instructions 等;
  • 出現錯誤時,伺服器會發 error 事件。和 HTTP 不同,這裏沒有天然的一問一答,所以客戶端事件要帶上 event_id,出錯時伺服器返回的錯誤裏會帶回同一個 event_id,你才知道是哪個事件出了問題。

官方當前可用的聲音:alloy、ash、ballad、coral、echo、sage、shimmer、verse、marin、cedar,推薦 marin 或 cedar。

四、它和別的音頻接口怎麼分工

語音需求該走哪條路:語音到語音、文件轉寫、實時字幕、實時翻譯

圖:本站根據 OpenAI 官方《Getting started with the Realtime API》 整理的示意圖

官方入門頁末尾給出了其他音頻工作流的去向:

官方在《Realtime conversations》裏也說:如果你不需要和模型對話,也就是不指望得到回應,可以用轉寫模式。

和文字轉語音的關係:官方 Text to speech 頁說,tts-1、tts-1-hd、gpt-4o-mini-tts 已棄用,將在 2027 年 1 月 6 日停止服務,遷移方向是 Realtime API 裏的 gpt-realtime-2.1-mini,並強調這是工作流的變化,不是改個模型名。也就是說,要做語音輸出的新項目,需要把思路換成 Realtime 會話。

五、官方的幾個提醒

安全標識。 應用如果能識別個人用戶,官方推薦(不強制)在 Realtime 請求裏帶 OpenAI-Safety-Identifier 請求頭,用穩定、保護私隱的值,例如內部用戶 ID 的哈希。使用臨時令牌時,要在你伺服器上創建客戶端密鑰的那個請求裏設定這個頭。官方強調這個標識不會從 Responses 請求沿用,每次創建或連接 Realtime 會話都要傳。

從 Beta 遷移到 GA。 如果你手上還有 Beta 版 Realtime 集成,官方要求先遷移到 GA 再做新工作。主要變化:去掉 OpenAI-Beta: realtime=v1 請求頭;用 POST /v1/realtime/client_secrets 為瀏覽器或手機客戶端創建臨時憑據;WebRTC 用 /v1/realtime/calls;會話和事件的結構也有調整,比如要設定 session.type、輸出音頻配置放到 session.audio.output 下、使用 response.output_text.delta、response.output_audio.delta 之類的新事件名。

成本。 Realtime 的計費方式(包括緩存)官方有專門的 Cost optimization 頁面,價格以官方價格頁當天為準,見 /guides/openai-api-price-official-table。

常見問題

Q:Realtime 只能做語音嗎?

不是。官方《Realtime conversations》講了文字輸入輸出、圖片輸入和函數調用,會話裏可以只要文字輸出,也可以只要音頻輸出。

Q:我的伺服器上能直接連嗎?

可以,官方說伺服器用 WebSocket;瀏覽器用 WebRTC。兩種方式在官方都有專門指南。

Q:連接被限流或報錯?

通用的限速處理見 /guides/openai-api-429-error,限額與層級見 /guides/openai-api-usage-tiers-rate-limits。

參考資料

  • OpenAI 官方:Getting started with the Realtime API — https://developers.openai.com/api/docs/guides/realtime
  • OpenAI 官方:Realtime conversations — https://developers.openai.com/api/docs/guides/realtime-conversations

Nathaniel 的更多內容

  1. 01

    Claude Code 在 Windows 上的常見坑:Git Bash 還是 PowerShell、路徑反斜槓、假報錯、WSL 怎麼選

    Windows 上用 Claude Code,裝好之後最容易踩的是:用哪個 shell、路徑寫法不一致、grep 沒匹配就報錯、鉤子沒生效、WSL 和原生怎麼選。本文逐條按官方文檔整理原因和處理辦法,附三段提示詞和一張對照表。

    Claude0
  2. 02

    Claude Code Hooks 實戰「提交前自動跑測試」:PreToolUse 攔住 git commit,測試不過就退出碼 2,附 Windows 注意點

    只寫一個完整例子:讓 Claude Code 每次要執行 git commit 之前,先自動跑項目測試,沒通過就攔下並把輸出交給它修。本文按官方 Hooks 文檔給出腳本、settings.json 配置、測試方法、排錯和 Windows 的兩處坑。

    Claude0
  3. 03

    Claude Code 自定義斜槓命令與 Skill 實戰:從零寫一個「生成更新日誌」的 /release-notes,含傳參、預執行命令和調試

    概念看過了,還是不知道從哪下手?本文按 Claude Code 官方「Extend Claude with skills」寫一個完整可用的例子:用 /release-notes 根據 git 記錄生成更新日誌,覆蓋目錄、frontmatter、傳參、預執行命令、預授權和調試。

    Claude0
  4. 04

    Claude Code 部署網站:先寫 Dockerfile 和 compose 在本機跑通,再按清單上雲伺服器,別讓它直接改線上

    想讓 Claude Code 幫你把網站部署到雲伺服器。本文只寫通用做法,按 Docker 官方文檔講:讓它寫 Dockerfile、.dockerignore 和 compose,在本機跑通,端口和數據卷怎麼設,再給出上線清單,並說明為什麼不要讓它直接動線上機器。

    Claude0
  5. 05

    Claude Code 寫爬蟲與數據清洗:先查 robots.txt 和網站條款,控制頻率,原始數據留一份再清洗

    想讓 Claude Code 寫爬蟲抓數據再清洗。本文先講合規:robots.txt 不是授權也不是安全措施、網站條款要自己讀;再講怎麼用 Python 標準庫檢查規則、小樣本先試、儲存原始數據,以及用 pandas 清洗,附四段提示詞。

    Claude0
  6. 06

    Claude Code 寫 Chrome 擴展:按 Manifest V3 起步,加載未打包的擴展,改了哪些文件要重新加載

    想讓 Claude Code 幫你寫一個 Chrome 擴展。本文按 Chrome 官方擴展文檔講:manifest.json 的最小寫法、在 chrome://extensions 加載未打包的擴展、哪些改動要刷新、怎麼看控制檯和報錯,再給四段提示詞,以及權限要盡量少。

    Claude0

同產品的其他教學

  1. 01

    OpenAI API 的 token 怎麼算、怎麼估算費用:input_tokens 計數接口、tiktoken 和隱藏的輸出 token

    發請求前想知道會用多少 token?官方有 Responses 的 input_tokens 計數接口,能把文字、圖片、文件、工具定義一起算準;本地 tiktoken 只適合純文本。本文給 Python 和 Node 示例,講輸出 token 為什麼可能比看到的多,以及怎麼估算費用。

    ChatGPT0
  2. 02

    OpenAI API Node.js / TypeScript 快速上手:npm install openai、example.mjs 第一個請求,到流式、函數調用、聯網搜尋

    用 Node.js 調 OpenAI API:設定 OPENAI_API_KEY 環境變量,npm install openai,新建 example.mjs,用 client.responses.create 發出第一個請求。並列出圖片、文件、流式、函數調用、聯網搜尋和錯誤捕獲的 Node 寫法。

    ChatGPT0
  3. 03

    OpenAI API 用量層級(usage tiers)與速率限制怎麼提升:Free、Build、Launch、Grow 和後台 Limits 頁

    OpenAI API 的限速不是固定的:官方按累計購買額度把組織分成 Free、Build、Launch、Grow 四個層級,達到門檻自動升級。本文講 RPM、TPM 等指標、怎麼在後台查自己的限額、響應頭怎麼讀、花費上限和限速的區別,以及怎麼讓限額變得夠用。

    ChatGPT0
  4. 04

    OpenAI API 報錯 400、401、403、404、429、500、503 怎麼排查:按官方錯誤碼頁逐個看原因和解決辦法

    調用 OpenAI API 返回 400、401、403、404、429、500、503,各自什麼意思?本文按官方 Error codes 頁,每個狀態碼一節,寫清官方給的原因和解決辦法,並說明 404 在官方頁面裏的位置、429 的六種情形,附 Python 和 Node 的錯誤捕獲寫法。

    ChatGPT0
  5. 05

    OpenAI 圖像生成 API 怎麼用:gpt-image 系列、images.generate 與 Responses 工具、尺寸質素和遮罩編輯

    用 OpenAI API 生成或編輯圖片,有 Image API 和 Responses 裏的 image_generation 工具兩條路。本文按官方文檔給 Python 和 Node 示例,講 gpt-image 模型選擇、尺寸質素格式參數、遮罩編輯、被攔截時的錯誤處理,以及需要組織驗證的提醒。

    ChatGPT0
  6. 06

    OpenAI API 語音轉文字和文字轉語音怎麼調:gpt-transcribe 轉寫、25 MB 限制,以及多個語音模型的停服日期

    用 OpenAI API 把錄音轉成文字,官方現在推薦 gpt-transcribe;文字轉語音的 speech 接口則已被官方標為棄用。本文給 Python 和 Node 示例,講格式、25 MB 限制、prompt 與 keywords,並寫明官方公佈的停服日期。

    ChatGPT0

0 條評論

登入 後參與評論

還沒有評論,來搶沙發~