OhMyGPT

Realtime

用 OpenAI Realtime API 在一条 WebSocket 上进行语音对语音和文本对话。

wss://api.ohmygpt.com/v1/realtime 提供 OpenAI Realtime API:一场对话一条 WebSocket,音频和文本双向传输。客户端事件与服务端事件都沿用 OpenAI 的 Realtime 格式,换掉 base URL、Key 和模型 ID,OpenAI 的 SDK 与示例就能直接用。

端点wss://api.ohmygpt.com/v1/realtime?model={model}
鉴权Authorization: Bearer $OHMYGPT_API_KEY,或下文的 WebSocket 子协议
模型openai/gpt-realtime-2.1、openai/gpt-realtime-2.1-mini,以及 GET /v1/models 里其他 gpt-realtime 模型
import asyncio
import os

from openai import AsyncOpenAI

client = AsyncOpenAI(api_key=os.environ["OHMYGPT_API_KEY"], base_url="https://api.ohmygpt.com/v1")


async def main():
    async with client.realtime.connect(model="openai/gpt-realtime-2.1-mini") as conn:
        await conn.session.update(session={"type": "realtime", "output_modalities": ["text"]})
        await conn.conversation.item.create(item={
            "type": "message",
            "role": "user",
            "content": [{"type": "input_text", "text": "Say hello in one short sentence."}],
        })
        await conn.response.create()
        async for event in conn:
            if event.type == "response.output_text.delta":
                print(event.delta, end="", flush=True)
            elif event.type == "response.done":
                print()
                print(event.response.usage)
                break


asyncio.run(main())

先用 pip install "openai[realtime]" 安装 SDK。脚本先打印回复,再打印这次回复计费所依据的用量:

Hello there!
RealtimeResponseUsage(input_token_details=RealtimeResponseUsageInputTokenDetails(audio_tokens=0, cached_tokens=128, cached_tokens_details=CachedTokensDetails(audio_tokens=0, image_tokens=0, text_tokens=128), image_tokens=0, text_tokens=129), input_tokens=129, output_token_details=RealtimeResponseUsageOutputTokenDetails(audio_tokens=0, text_tokens=36, reasoning_tokens=29), output_tokens=36, total_tokens=165)

浏览器

浏览器里的 WebSocket 不能设置请求头,所以和 OpenAI 的浏览器客户端一样,把 Key 放在子协议里传,服务端会选定 realtime。

const ws = new WebSocket(
  "wss://api.ohmygpt.com/v1/realtime?model=openai/gpt-realtime-2.1-mini",
  ["realtime", `openai-insecure-api-key.${apiKey}`],
);

能打开这个页面的人都能看到 Key,所以请给页面单独建一把设了消费上限的 Key。临时客户端密钥(POST /v1/realtime/client_secrets)和 WebRTC 通话(POST /v1/realtime/calls)对 OhMyGPT 的 Key 返回 501,请改用 WebSocket 连接。

计费

每次回复在结束时计费,用量取它的 response.done 事件里的 usage,按模型页上的文本、音频和缓存输入价格计算。输入音频的转写(audio.input.transcription)单独计费,按转写模型的价格算。回复生成到一半时关闭连接,OhMyGPT 会取消这次回复,按取消前实际用掉的 token 计费。

限制

一个账户同时最多开 10 个会话,第 11 个会以关闭码 1008 断开:

websocket: close 1008 (policy violation): Too many concurrent sessions.

会话连续 10 分钟没有收发任何消息,会在随后几分钟内以关闭码 1000 和 Session closed after being idle. 关闭。

OhMyGPT 发布新版本时,会在两次回复之间以关闭码 1012 和 Server restarting. Reconnect to continue. 关闭会话,已完成的回复照常计费。请重新建立会话,并再次发送会话设置。

本页目录