Skip to main content
Realtime 使用 GET /v1/realtime?model=... 升级连接,采用 session / conversation / response 事件。它与 Responses WebSocket不同,不能只替换 URL。本文提供服务端 GA 协议示例,不使用旧版 Beta 请求头或事件名。

运行文字或语音输出

按连接与运行环境安装依赖、设置地址、令牌及支持 Realtime 的模型。默认发送固定的文字问候;text 模式输出文本,audio 模式保存音频。音色需模型支持,可替换 API_VOICE。
每次执行创建独立会话。音频文件已存在时立即退出,避免覆盖;再次执行请换输出文件名。输出为 24 kHz、单声道、16-bit little-endian PCM 的 WAV,可用支持 WAV 的播放器打开。示例没有直接扬声器播放。

发送已有语音

可设置 API_AUDIO_PCM_PATH,脚本改为上传文件而不是固定文字。文件必须是无容器头的 PCM16LE、24 kHz、单声道;不是 WAV、MP3、AAC 或 Base64 文本。请由录音/转码工具按此格式导出。示例允许 0.1–30 秒,检查长度、偶数字节和常见容器头,但无法仅从原始 PCM 判断实际采样率或语音质量。
上传按小块 Base64 编码。示例关闭 VAD,发送 append 后 commit,收到 committed 再 create;不会一边自动 VAD 生成、一边重复手动 create。可将模式设为 text 来获得对语音的文字回答,但这不是逐字转写保证。

完整脚本

examples/realtime.mjs 依赖同目录 websocket-client.mjs。

会话与音频校验

示例等待 session.created,发送 session.update,再核对 session.updated 实际生效的模态、PCM 格式、采样率、音色和 VAD 设置。生成使用 GA 的 response.output_text.* / response.output_audio.* 事件;旧 response.text.* / response.audio.* 不兼容此示例。协议配置依据 Realtime 会话指南。 接收器限定一个助手输出项及一个内容块,核对 response_id / item_id / output_index / content_index。文本还会比对 delta、text.done 和最终 output;音频从 delta 收集字节,不能从 response.done 取完整音频。只有内容 done、response.done 的 completed 状态、非空有效输出全部满足后才发布结果。事件格式参考 Realtime server events。 非法 Base64、奇数字节 PCM、缺失 done、failed / cancelled / incomplete、拒答、工具输出、断连和超时都会失败。输出限制 10 MiB 是示例边界。原始 PCM 片段可以切在样本中间,最终拼接长度必须为偶数。模拟测试只检查字节和 WAV 头,不证明真实语音可懂或模型会话可用。

多轮、工具和打断

生产会话可继续添加 conversation item 并创建下一轮响应,但需要自己管理输出播放、事件关联和上下文。本脚本每次只生成一轮,不实现麦克风采集、VAD 自动对话、工具执行、回声消除或浏览器 WebRTC。 打断时要区分服务器生成取消与本地播放停止;音频已经生成但未播放的部分可能需要用 conversation.item.truncate 同步已听历史,具体字段由上游协议决定。不要给 WebSocket 照搬 WebRTC 的音频缓冲清理流程。参考 Realtime client events。 项目普通转发不会把所有旧版协议自动转换为 GA。WebRTC、SIP、临时客户端令牌及 Live API 需独立核实;本站没有注册这些能力的承诺。 Realtime API 说明 · 生产接入 Read in English