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 条评论

登录 后参与评论

还没有评论,来抢沙发~