OpenAI WebSocket API:以低 75% 成本实现实时 streaming

Smart AIPI 现已支持 OpenAI 的 WebSocket API,用于实时双向 streaming。延迟低于 SSE、支持持久连接,并且便宜 75%。以下是连接方法。

S
Smart AIPI Team
7 分钟阅读 ·
OpenAI WebSocket API:以低 75% 成本实现实时 streaming

TL;DR:Smart AIPI 现已支持 OpenAI 的 WebSocket API。连接到 wss://api.smartaipi.com/v1/realtime,发送一个 response.create 事件,即可通过持久连接实时 stream 响应。相同模型、相同协议、成本低 75%。

WebSocket streaming 是与 AI 模型交互的最快方式。不同于传统 HTTP 请求,甚至是 Server-Sent Events (SSE),WebSocket 会在你的应用和 API 之间保持一个持久的双向连接。无需为每个请求重新建立连接,没有 HTTP 开销,也没有半双工限制。

Smart AIPI 现在支持这一协议,地址为 wss://api.smartaipi.com/v1/realtime —— 与 OpenAI 的 WebSocket API 完全兼容,同时成本低 75%。

为什么选择 WebSocket 而不是 SSE?

Server-Sent Events 一直是 AI streaming 的标准方案,但它存在一些 WebSocket 可以消除的权衡:

特性 SSE (HTTP) WebSocket
每个请求的连接 每次都新建连接 持久连接(可复用)
通信方向 仅 Server → Client 双向
单个连接上的多个请求
首个 token 延迟 更高(新的 TCP + TLS) 更低(连接复用)
适合场景 简单集成 Agents、实时应用、高吞吐

对于会连续发起几十次 API 调用的 agent loop,持久 WebSocket 连接带来的累计延迟节省非常明显。

工作原理

WebSocket API 采用事件驱动协议。你向服务器发送 JSON 事件,服务器返回 JSON 事件——全部通过同一个持久连接完成。

1. 连接并认证

在 headers 中携带你的 API key,打开一个 WebSocket 连接:

wss://api.smartaipi.com/v1/realtime
Authorization: Bearer sk-proj-your-smart-aipi-key
OpenAI-Beta: realtime=v1

2. 发送请求

使用你的 prompt 发送一个 response.create 事件:

{
  "type": "response.create",
  "response": {
    "model": "gpt-5.3-codex",
    "store": false,
    "instructions": "You are a helpful assistant.",
    "input": [
      {
        "type": "message",
        "role": "user",
        "content": [
          { "type": "input_text", "text": "What is WebSocket?" }
        ]
      }
    ]
  }
}

注意:store: false 参数是 Smart AIPI WebSocket 连接的必填项。

3. 接收 streaming 事件

服务器会在生成响应时按顺序返回一系列事件:

事件 说明
response.created 响应对象已创建
response.output_item.added 新的输出项(message)已开始
response.content_part.added 输出项中的内容部分已开始
response.output_text.delta 文本片段(实际 stream 出来的内容)
response.output_text.done 文本输出已完成
response.completed 整个响应已结束(终止事件)

代码示例

Node.js

import WebSocket from "ws";

const ws = new WebSocket("wss://api.smartaipi.com/v1/realtime", {
  headers: {
    "Authorization": "Bearer sk-proj-your-key",
    "OpenAI-Beta": "realtime=v1",
  },
});

ws.on("open", () => {
  ws.send(JSON.stringify({
    type: "response.create",
    response: {
      model: "gpt-5.3-codex",
      store: false,
      input: [{
        type: "message",
        role: "user",
        content: [{ type: "input_text", text: "Hello!" }],
      }],
    },
  }));
});

ws.on("message", (data) => {
  const event = JSON.parse(data);
  if (event.type === "response.output_text.delta") {
    process.stdout.write(event.delta);
  }
  if (event.type === "response.completed") {
    console.log("\n\nDone. Usage:", event.response.usage);
    ws.close();
  }
});

Python

import asyncio
import json
import websockets

async def main():
    headers = {
        "Authorization": "Bearer sk-proj-your-key",
        "OpenAI-Beta": "realtime=v1",
    }

    async with websockets.connect(
        "wss://api.smartaipi.com/v1/realtime",
        extra_headers=headers,
    ) as ws:
        await ws.send(json.dumps({
            "type": "response.create",
            "response": {
                "model": "gpt-5.3-codex",
                "store": False,
                "input": [{
                    "type": "message",
                    "role": "user",
                    "content": [{"type": "input_text", "text": "Hello!"}],
                }],
            },
        }))

        async for message in ws:
            event = json.loads(message)
            if event["type"] == "response.output_text.delta":
                print(event["delta"], end="", flush=True)
            if event["type"] == "response.completed":
                print(f"\n\nUsage: {event['response']['usage']}")
                break

asyncio.run(main())

cURL(快速测试)

使用一条命令验证 WebSocket handshake 是否成功:

curl -isN --http1.1 \
  -H "Connection: Upgrade" \
  -H "Upgrade: websocket" \
  -H "Sec-WebSocket-Version: 13" \
  -H "Sec-WebSocket-Key: dGVzdA==" \
  -H "Authorization: Bearer sk-proj-your-key" \
  -H "OpenAI-Beta: realtime=v1" \
  https://api.smartaipi.com/v1/realtime

连接成功时会返回 HTTP/1.1 101 Switching Protocols

何时使用 WebSocket,何时使用 SSE

这两种协议都可通过 Smart AIPI 使用。请根据你的使用场景选择:

  • 使用 SSE:适合简单集成、一次性请求,以及你希望实现方式尽可能简单的场景。在任何标准 API 调用中设置 stream: true 即可。
  • 使用 WebSocket:适合 agent loop、交互式应用、高频请求模式,以及任何需要在连续调用之间尽可能降低延迟的场景。

定价

WebSocket 请求的计费方式与标准 API 请求相同——按 token 用量计费。75% 折扣同样适用:

模型 OpenAI Direct Smart AIPI 节省
GPT-5.3 Codex (output) $14.00 / 1M tokens $3.50 / 1M tokens 75%
GPT-5.2 (output) $10.00 / 1M tokens $2.50 / 1M tokens 75%
Codex Mini (output) $0.60 / 1M tokens $0.15 / 1M tokens 75%

快速开始

  1. 获取 API key —— 在 smartaipi.com 注册(包含免费额度,无需信用卡)
  2. 连接 —— 打开到 wss://api.smartaipi.com/v1/realtime 的 WebSocket 连接
  3. 发送事件 —— 使用 response.create envelope,传入你的模型和 prompt
  4. stream 响应 —— 在收到 response.output_text.delta 事件时进行处理

如果你已经在使用 OpenAI 的 WebSocket API,唯一需要修改的就是 URL。其余部分——认证、事件、payload 格式——完全一致。

常见问题

Smart AIPI 支持 OpenAI WebSocket API 吗?

支持。使用你的 API key 并在 Authorization header 中传递,连接到 wss://api.smartaipi.com/v1/realtime 即可。该协议与 OpenAI 的 WebSocket Responses API 完全兼容。

WebSocket 比 SSE 更快吗?

对于连续请求,是的。WebSocket 保持持久连接,可消除 SSE 在每次新请求中都会产生的 TCP 和 TLS handshake 开销。对于单次的一次性请求,差异可以忽略不计。

哪些模型可以通过 WebSocket 使用?

所有通过 Responses API 提供的模型都可以:GPT-5.3 Codex、GPT-5.2、Codex Mini 等等。在 response.create 事件中指定模型即可。

function calling 和 tool use 可以通过 WebSocket 使用吗?

可以。完整的 Responses API 功能集都可用——function calling、tool use、structured outputs 以及多轮对话,都可以通过 WebSocket 连接运行。

连接有时间限制吗?

空闲连接会在 15 分钟后关闭。你可以按需定期发送消息,或重新连接。正在 stream 数据的活跃连接不会被中断。

我可以在一个连接上发送多个请求吗?

可以。这正是它的核心优势之一。一个响应完成后,无需重连,直接在同一连接上再发送一个 response.create 事件即可。

WebSocket Streaming Real-Time API
S
作者
Smart AIPI

兼容 OpenAI 的 API gateway。以低 75% 的成本访问前沿 AI 模型。

免费开始

消息已发送

我们会在 2 个工作日内回复你。

联系支持

有问题或需要帮助?给我们发消息,我们会在 2 个工作日内回复你。