简介
通过 WebSocket 建立低延迟实时语音会话,兼容 OpenAI Realtime API。连接后按事件协议收发音频与文本,适用于语音助手、实时翻译等场景。 Base URL:wss://api.gravitex.ai/v1/realtime
必须使用 WebSocket 协议,不是普通 HTTP POST。
model 必须作为 查询参数 传入,否则网关返回 400。认证
建立 WebSocket 连接时在请求头携带:string
必填
Bearer Token,如
Bearer sk-xxxxxxxxxxstring
必填
固定为
realtime=v1连接
string
必填
实时模型 ID,如
gpt-realtime-1.5、gpt-realtime-2。须与当前 API Key 可用模型列表一致。session.created,客户端应发送 session.update 完成会话配置。
会话配置
连接成功后发送session.update 设置指令、输出模态与音频格式:
可选音色(
output_modalities 含 audio 时有效):
alloy · ash · ballad · coral · echo · sage · shimmer · verse · marin
等待 session.updated 后即可开始对话。
发送消息
每轮对话分两步:conversation.item.create— 写入用户消息response.create— 触发模型生成回复
文字输入
音频输入
录音须为 PCM16 raw bytes(无 WAV 头),Base64 编码后发送:接收回复
常见服务端事件:
音频增量字段可能是
audio 或 delta,客户端应兼容两种写法。
用量说明
每次response.done 返回的是本次 Response 的用量,不是会话累计。官方原文:“The tokens used for a Response can be read from the response.done event”。多轮对话时建议同时记录每轮用量与会话累计用量。
usage 结构示例:
字段含义
- output.text_tokens:即使选择音频输出,也会因自动 transcript 产生文字 token,属正常计费。详见 OpenAI Realtime 计费说明。
- input.cached_tokens:是
input_tokens的子集,表示命中缓存的部分,不是额外叠加。OpenAI 原生会返回cached_tokens_details(拆分文字/音频缓存);部分上游(如 Azure GA)不返回时,网关会按文字/音频输入比例估算。 - 多轮会话成本:每次 Response 都会把整个对话历史发给模型,越到后面
input_tokens越大;但前几轮内容大概率命中 prompt cache,折扣很高(如gpt-realtime-2音频缓存 32/1M 折扣 98.75%),实际增量成本远小于原始输入价格。官方原文:“turns later in the session will be more expensive”。
Python 完整示例
依赖:pip install websockets pyaudio
test_realtime.py。
常见问题
- 连接 400:检查 URL 是否包含
?model=...查询参数。 - 连接 401:API Key 无效或未授权;可先调用
GET /v1/models验证 Key 与模型是否可用。 - 发送后无响应:确认已收到
session.updated且已发送response.create。 - 服务端 500 后断连:上游错误会导致 WebSocket 关闭,需重新建立连接。
- 音频无声:确认采样率为 24 kHz、PCM16 单声道,且正确解码 Base64 增量后播放。
