跳转到主要内容
实时语音处于 Beta 阶段,按工作区开放访问。实时客户端已在 SDK 源码中,但尚未进入已发布的包(3.0.0、Rust 0.2.0);除 C++ 外,它们会随每个 SDK 的下个版本一起发布。
连接时会创建会话(POST /v1/audio/realtime/sessions),打开中继 WebSocket,并等待 relay.connected。然后把 PCM16 音频流式发送进去,读取提供商事件,最后结束通话以获取最终账单。中继协议、警告和原因代码请参阅实时语音会话。

安装你的语言所需的依赖

client.realtime.connect() 会发送你的 API 密钥,因此只能在服务器上调用。Node.js 22 或更高版本提供全局 WebSocket;在更旧的运行时上,请安装 ws 包,或通过 webSocket 传入你自己的构造函数。对于在浏览器中进行的通话,请在服务器上创建会话,然后在浏览器中用 connectRealtimeSession() 打开 socket。它接收你的服务器创建的会话,包括只对该会话有效的 client_secret,从不需要 API 密钥。浏览器通话展示了这两部分。

发起通话

读取每个事件

迭代会话,而不是按事件类型逐一订阅。socket 关闭时迭代停止。在 Python 中,第一个迭代器还会收到自 connect() 返回以来接收到的事件,从 relay.connected 开始。
Python: 如果通话尚未结束,async with session: 会在代码块退出时用 end() 结束通话。

浏览器通话

仅 TypeScript。永远不要把 Phaseo API 密钥放进浏览器代码。在服务器上用 client.realtime.createSession() 创建会话,它接受与 connect() 相同的 model、voice、instructions、provider 和 metadata 选项,然后把响应返回给你的页面:
TypeScript
在浏览器中,用 connectRealtimeSession() 加入会话。它使用会话的 client_secret 打开中继,并返回与 connect() 相同的会话对象:
TypeScript
connectRealtimeSession(info, options) 与 connect() 一样接受 webSocket 和 connectTimeoutMs,如果你使用区域端点,还可以传入 baseUrl(默认为 https://api.phaseo.app/v1)。

连接选项

每个 SDK 都会把 model(必填,例如 openai/gpt-realtime-2)以及可选的 voice、instructions、provider 和 metadata 发送到创建会话的请求中,并默认等待 30 秒以接收 relay.connected。

会话

TypeScript 和 Python: 其他 SDK 提供相同的操作。音频是 PCM16 字节,SDK 会为你进行 base64 编码;提供商事件以各语言的 JSON 类型原样传递;end 的默认超时为 60 秒。

错误

如果 socket 关闭,或 end() 超时,而没有收到 session.ended,结束通话会以会话已关闭错误失败。通话仍会计费。该错误携带最终账单路径 GET /v1/generations?id=realtime%3A<session_id>,结算完成后它会返回最终费用。 如果中继在连接前结束了会话,或者 relay.connected 没有及时到达,connect() 会失败(Python 抛出 TimeoutError;Rust 返回 RealtimeError::EndedBeforeConnecting 或 RealtimeError::ConnectTimeout)。
最后修改于 2026年11月5日