实战 OpenAI 新一代实时语音:用 gpt-realtime-2 跑一个会推理的语音助手

5 月 7 日 OpenAI 在 API 里上线了三款新的实时语音模型:gpt-realtime-2(具备 GPT-5 级推理、上下文从 3.2 万扩到 12.8 万 token)、gpt-realtime-translate(70+ 种输入语言实时翻译到 13 种输出语言)、gpt-realtime-whisper(流式语音转写)。它们都在同一个 Realtime API 下。本文给出一条可跑的最短路径:后端签发 ephemeral token,浏览器用 WebRTC 直连模型,并用 session.update 把模型切到 gpt-realtime-2、开启语义化断句。

1. 三个模型分别解决什么

不要把它们当成一个模型的三种模式,而是三件各司其职的工具:

  • gpt-realtime-2(Reason):第一款带 GPT-5 级推理的实时语音模型。它能边听边想、处理更难的请求并把对话自然推进下去。上下文窗口从上一代的 32K 扩到 128K token,适合更长的多轮工作流。
  • gpt-realtime-translate(Translate):实时口译,支持 70+ 种输入语言译到 13 种输出语言,且能跟上说话人的语速。
  • gpt-realtime-whisper(Transcribe):流式语音转文字,说话人还在讲,文字就在持续吐出来。

选型原则很直接:要"会做事的语音助手"用 gpt-realtime-2;要"同声传译"用 translate;只要"字幕/听写"用 whisper。

2. 架构:为什么要用 WebRTC + ephemeral token

实时语音对延迟极其敏感,OpenAI 官方推荐浏览器端走 WebRTC 直连模型,而不是把音频先绕一圈到你自己的服务器。但你绝不能把正式 API key 暴露在前端。

标准做法是两段式:

  1. 后端 用正式 key 调用一次接口,签发一个短期令牌(ephemeral token)
  2. 前端拿这个短期令牌,通过 WebRTC 直接和 Realtime API 建立点对点音频连接。

下面分别给出后端(Node.js)和前端(浏览器)的最短可用实现。

3. 后端:签发 ephemeral token

javascript 复制代码
// server.js  ---  Node.js + Express
import express from "express";

const app = express();

app.get("/session", async (req, res) => {
  // 用正式 key 申请一个短期客户端令牌
  const r = await fetch("https://api.openai.com/v1/realtime/client_secrets", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.OPENAI_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      session: {
        type: "realtime",
        model: "gpt-realtime-2",
        audio: { output: { voice: "marin" } },
      },
    }),
  });
  const data = await r.json();
  res.json(data); // 把短期令牌返回给前端,正式 key 永不离开服务器
});

app.listen(3000, () => console.log("token server on :3000"));

要点:正式 OPENAI_API_KEY 只存在于服务器环境变量里;前端只拿到有效期很短的令牌。

4. 前端:用 WebRTC 直连模型

javascript 复制代码
// client.js  ---  在浏览器中运行
async function startVoice() {
  // 1) 取短期令牌
  const tokenResp = await fetch("/session");
  const session = await tokenResp.json();
  const EPHEMERAL_KEY = session.value; // 字段名以官方返回为准

  // 2) 建立 WebRTC 连接
  const pc = new RTCPeerConnection();

  // 播放模型返回的音频
  const audioEl = document.createElement("audio");
  audioEl.autoplay = true;
  pc.ontrack = (e) => (audioEl.srcObject = e.streams[0]);

  // 采集麦克风并加入连接
  const mic = await navigator.mediaDevices.getUserMedia({ audio: true });
  pc.addTrack(mic.getTracks()[0]);

  // 3) 数据通道:用于收发事件(session.update 等)
  const dc = pc.createDataChannel("oai-events");
  dc.onopen = () => {
    // 切换模型 + 配置音频格式与断句策略
    dc.send(
      JSON.stringify({
        type: "session.update",
        session: {
          type: "realtime",
          model: "gpt-realtime-2",
          output_modalities: ["audio"],
          audio: {
            input: {
              format: { type: "audio/pcm", rate: 24000 },
              turn_detection: { type: "semantic_vad" },
            },
            output: { format: { type: "audio/pcm", rate: 24000 } },
          },
        },
      })
    );
  };
  dc.onmessage = (e) => console.log("event:", e.data);

  // 4) SDP 握手
  const offer = await pc.createOffer();
  await pc.setLocalDescription(offer);

  const sdpResp = await fetch("https://api.openai.com/v1/realtime/calls", {
    method: "POST",
    body: offer.sdp,
    headers: {
      Authorization: `Bearer ${EPHEMERAL_KEY}`,
      "Content-Type": "application/sdp",
    },
  });
  const answer = { type: "answer", sdp: await sdpResp.text() };
  await pc.setRemoteDescription(answer);
}

startVoice();

跑通后,你对着麦克风说话,gpt-realtime-2 会边听边推理并用语音回答;semantic_vad(语义化语音活动检测)让它按"你这句话说完了没"来断句,而不是死板地按静音时长切,体验明显更自然。

5. 切换到翻译 / 转写

同一套 WebRTC 骨架,只要换模型名即可。做同声传译时把 model 换成 gpt-realtime-translate,并在指令里指定目标语言;只要字幕则换成 gpt-realtime-whisper、把 output_modalities 收成 ["text"],从数据通道读流式文本:

javascript 复制代码
dc.send(JSON.stringify({
  type: "session.update",
  session: {
    type: "realtime",
    model: "gpt-realtime-whisper",
    output_modalities: ["text"],
  },
}));

6. 踩坑提示

  • 别把正式 key 放前端:一定走"后端签发短期令牌"的两段式,否则 key 会在浏览器里裸奔。
  • HTTPS 是硬要求getUserMedia 只在 HTTPS(或 localhost)下可用,部署到 http 站点会直接拿不到麦克风。
  • 字段名以官方文档为准 :短期令牌的返回字段、/realtime/calls 端点等接口细节仍在演进,本文示例请对照 https://developers.openai.com/api/docs/models/gpt-realtime-2 校对后再上生产。
  • 采样率要对齐:示例用 24000 Hz 的 PCM;输入输出格式不一致会导致杂音或静默。
  • 上下文不是无限gpt-realtime-2 上限 128K token,长会话仍需做摘要或截断,别指望塞进无限历史。

参考资料

相关推荐
Resistance丶未来10 小时前
魔芋AI:构建安全、可控、合规的大模型生产力枢纽
gpt·安全·大模型·claude·gemini·企业ai·魔芋ai
z小猫不吃鱼10 小时前
09 GPT-2 论文精读:语言模型如何走向 Zero-shot?
人工智能·gpt·语言模型
z小猫不吃鱼10 小时前
07 GPT-1 论文精读:生成式预训练如何用于 NLP 任务?
人工智能·gpt·自然语言处理
零壹AI实验室12 小时前
2026年5月AI编程工具横评:GPT-5.5、Claude Opus 4.7、Qwen3.7-Max谁最强
gpt·ai编程
xixixi7777713 小时前
GPT-5.6(Iris-Alpha)细节泄露 + 国产 AI 芯片最高安全认证落地,全球 AI 格局迎来大变局
大数据·人工智能·gpt·ai·大模型·算力·智能体
searchforAI13 小时前
Obsidian一键获取视频笔记内容,AI做知识管理+内容创作
人工智能·笔记·gpt·学习·知识图谱·markdown·知识库
z小猫不吃鱼14 小时前
05 Transformer Decoder 详解:GPT 为什么使用 Decoder?
gpt·深度学习·transformer
m0_535817551 天前
从0到1上手Claude Code:Windows安装+88api配置全流程
windows·gpt·node.js·claude·claudecode·88api
searchforAI1 天前
B站视频转笔记用哪个工具?2026年四款AI笔记工具对比实测
人工智能·经验分享·笔记·gpt·学习·视频总结·ai笔记