OpenAI Realtime API 提供双向、低延迟的语音 / 文本流,适用于语音助手 / 实时会议总结等场景。
OpenAI 官方支持 WebRTC / WebSocket / SIP 三种接入方式,并提供 gpt-realtime-2、gpt-realtime-1.5 等新一代实时模型。OpenPAI 网关当前以 WebSocket 为主,其他传输方式与模型是否开放以 控制台 / 公告 为准。
wss://openp.ai/v1/realtime?model=gpt-realtime-2
握手时通过 子协议 或 Header 传递鉴权:
| 方式 | 示例 |
|---|
| Header(Node / curl) | Authorization: Bearer sk-XXXXXXXXXXXX + OpenAI-Beta: realtime=v1 |
| 浏览器子协议 | ["realtime", "openai-insecure-api-key.sk-XXXX", "openai-beta.realtime-v1"] |
浏览器子协议方式会把密钥放在客户端,仅用于 demo。生产请通过自己的后端创建临时 token。
创建临时 Token
curl https://openp.ai/v1/realtime/sessions \
-H "Authorization: Bearer $OPENPAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-realtime-2",
"voice": "alloy"
}'
返回中的 client_secret.value 是短期 token,可安全发送到浏览器作为子协议。
事件协议
WebSocket 上双向收发 JSON 事件,关键事件:
| 客户端发送 | 服务端回复 |
|---|
session.update —— 设置 instructions / voice / 工具 | session.created / session.updated |
input_audio_buffer.append —— PCM16 音频追加 | input_audio_buffer.committed |
input_audio_buffer.commit —— 提交一段音频 | conversation.item.created |
conversation.item.create —— 追加文本消息 | conversation.item.created |
response.create —— 请求生成响应 | response.created / response.audio.delta / response.text.delta / response.done |
简化示例(Node.js)
import WebSocket from "ws";
const ws = new WebSocket(
"wss://openp.ai/v1/realtime?model=gpt-realtime-2",
{ headers: {
"Authorization": `Bearer ${process.env.OPENPAI_API_KEY}`,
"OpenAI-Beta": "realtime=v1",
}}
);
ws.on("open", () => {
ws.send(JSON.stringify({
type: "session.update",
session: { instructions: "你是中文助手", voice: "alloy" }
}));
ws.send(JSON.stringify({
type: "conversation.item.create",
item: { type: "message", role: "user", content: [{type:"input_text", text:"hi"}]}
}));
ws.send(JSON.stringify({ type: "response.create" }));
});
ws.on("message", (data) => {
const evt = JSON.parse(data.toString());
if (evt.type === "response.text.delta") process.stdout.write(evt.delta);
});
音频格式
- 输入:PCM 16-bit、24kHz、单声道,base64 编码。
- 输出:同样 PCM 16-bit / 24kHz。
可借助 webrtc-adapter、MediaRecorder、ffmpeg 等工具转换。
工具调用
session.update 中可声明 tools,模型在生成过程中可能产生 response.function_call_arguments.delta 事件,
你需要执行工具并把结果通过 conversation.item.create(type: function_call_output)回传。
- 音频输入 / 输出 token 与 文本 token 分别计费,价格高于普通 chat。
- 连接保持期间不计费,但若长时间空闲建议主动关闭。
详见 模型定价。