Skip to main content

GPT-Realtime 2.0 / 2.1 使用示例

Realtime API 通过 WebSocket 双向传递 JSON 事件,适合中文语音助手和实时交互。以下示例使用 ModelHub API Key 和平台入口,事件字段参考 OpenAI 官方 Realtime API。

模型与连接地址

OpenAI 将 2.0 的 API 模型 ID 命名为 gpt-realtime-2,请勿直接填写 gpt-realtime-2.0。平台模型的可用性以模型列表和 API Key 权限为准。
连接时设置 api-key: <MODELHUB_API_KEY> 请求头。下面的代码运行在服务端;浏览器原生 WebSocket 无法设置该请求头,网页应用应通过自己的服务端接入并保管 API Key。

安装与运行

需要 Python 3.11 或更新版本,以及支持 additional_headers 的 websockets:
切换到 2.0 时,将 MODELHUB_REALTIME_MODEL 改为 gpt-realtime-2。如果使用其他平台域名,可通过 MODELHUB_REALTIME_URL 设置完整的 wss://域名/v1/realtime,不包含查询参数。

完整 Python 示例

保存为 realtime_example.py。同一份代码提供四种模式:text(文本)、audio(语音输入输出)、image(图片输入)、tools(函数调用)。代码等待会话配置确认,检查错误和响应终态,并在结束时关闭连接。
Python

文本对话

流程为:等待 session.created → 配置会话并等待 session.updated → 创建用户消息 → response.create → 接收文本增量 → response.done

语音输入与语音回答

输入要求为 24 kHz、单声道、16-bit little-endian 裸 PCM,不包含 WAV 文件头。先转换音频,再运行示例:
程序将语音回答保存为 reply.wav,并打印回答的文本转写。response.output_audio.delta 中的 Base64 数据才是音频内容;response.done 不携带完整音频。 本例将 audio.input.turn_detection 设为 null,手动发送 input_audio_buffer.commitresponse.create,便于演示一轮文件输入。仅发送音频片段不会在此配置下自动生成回答。

图片输入

示例读取 PNG 并通过 input_image.image_url 发送 Base64 Data URL。两个模型均支持图片输入;此模式生成文本回答,不生成图片。其他图片格式需要同步修改 Data URL 的 MIME 类型。

工具调用

模型先生成 function_call,应用校验工具名和参数后查询北京时间,通过相同的 call_id 返回 function_call_output,再创建下一轮回答。函数的业务逻辑由应用执行。

连续语音与 VAD

麦克风连续输入可以使用服务端 VAD。在语音模式的会话配置中,将 audio.input.turn_detection 改为:
持续发送 input_audio_buffer.append,并持续接收事件;服务端会检测说话结束并触发回答。开启自动回答后,不要再对每次停顿手动重复发送 response.create。连续语音需要同时运行音频发送和事件接收任务,不能直接沿用上面的单轮文件流程。 WebSocket 客户端还需自行管理播放队列。用户打断时,应停止播放并清空尚未播放的音频;按实际已播放时长发送 conversation.item.truncate,让会话上下文与用户听到的内容一致。具体事件参数参考 OpenAI 对话与打断说明

推理与用量

两个模型支持 session.reasoning.effort。示例使用 low;提高推理强度可能增加生成时间和输出用量。推理 token 不等同于可读取的完整思考过程。 每轮 response.done.response.usage 提供该轮用量。文本、音频、图片和缓存分别出现在 input_token_detailsoutput_token_details 中。reasoning_tokens 是文本输出的细分项,统计费用时不要在已包含它的 text_tokens 之外再次叠加。同一连接的多轮用量应逐轮汇总;缓存命中仍按缓存价格计费,不能视为免费。

常用事件

官方参考