OpenAI WebSocket API:75%低コストで実現するリアルタイム streaming
Smart AIPI が OpenAI の WebSocket API をサポートしました。リアルタイムの双方向 streaming、SSE より低いレイテンシ、永続接続、そして 75% 安価です。接続方法を紹介します。
要点: Smart AIPI が OpenAI の WebSocket API をサポートしました。wss://api.smartaipi.com/v1/realtime に接続し、response.create event を送信すると、永続接続上でレスポンスをリアルタイムに streaming できます。同じ model、同じ protocol、75% 安価です。
WebSocket streaming は、AI model とやり取りする最速の方法です。 従来の HTTP リクエストや Server-Sent Events (SSE) と異なり、WebSocket はアプリケーションと API の間で永続的な双方向接続を維持します。リクエストごとの接続確立は不要で、HTTP オーバーヘッドもなく、半二重の制限もありません。
Smart AIPI は現在、この protocol を wss://api.smartaipi.com/v1/realtime でサポートしています。OpenAI の WebSocket API と完全互換で、コストは 75% 低くなります。
なぜ SSE ではなく WebSocket なのか?
Server-Sent Events は AI streaming の標準でしたが、WebSocket は SSE のトレードオフを解消します:
| 機能 | SSE (HTTP) | WebSocket |
|---|---|---|
| リクエストごとの接続 | 毎回新しい接続 | 永続的(再利用) |
| 方向 | Server → Client のみ | 双方向 |
| 1つの接続で複数リクエスト | 不可 | 可能 |
| 最初の token までのレイテンシ | 高い(新規 TCP + TLS) | 低い(接続再利用) |
| 最適な用途 | シンプルな統合 | Agent、リアルタイムアプリ、高スループット |
数十回の連続した API 呼び出しを行う agent loop では、永続的な WebSocket 接続による累積レイテンシ削減は非常に大きくなります。
仕組み
WebSocket API は event-driven protocol に従います。サーバーに JSON event を送信し、JSON event を受信します。すべて単一の永続接続上で行われます。
1. 接続と認証
header に API key を付けて WebSocket 接続を開きます:
wss://api.smartaipi.com/v1/realtime
Authorization: Bearer sk-proj-your-smart-aipi-key
OpenAI-Beta: realtime=v1
2. リクエストを送信
response.create event を prompt とともに送信します:
{
"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 events を受信
レスポンス生成中、サーバーは一連の event を返します:
| Event | 説明 |
|---|---|
| response.created | Response object が作成された |
| response.output_item.added | 新しい output item(message)が開始された |
| response.content_part.added | output item 内で content part が開始された |
| response.output_text.delta | テキストチャンク(実際に streamed される内容) |
| response.output_text.done | テキスト出力が完了 |
| response.completed | レスポンス全体が完了(終端 event) |
コード例
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(クイックテスト)
1つのコマンドで 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 の使い分け
どちらの protocol も Smart AIPI で利用できます。用途に応じて選んでください:
- SSE を使う — シンプルな統合、単発リクエスト、できるだけ簡単な実装を求める場合。標準 API call に
stream: trueを設定します。 - WebSocket を使う — agent loop、対話型アプリケーション、高頻度のリクエストパターン、連続 call 間のレイテンシを最小にしたい場合。
料金
WebSocket リクエストの課金は標準 API リクエストと同じで、token 使用量ベースです。75% 割引が適用されます:
| Model | 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% |
始め方
- API key を取得 — smartaipi.com で登録します(無料クレジット付き、クレジットカード不要)
- 接続 —
wss://api.smartaipi.com/v1/realtimeに WebSocket 接続を開きます - event を送信 — model と prompt を含む
response.createenvelope を使用します - レスポンスを streaming — 到着した
response.output_text.deltaevent を処理します
すでに OpenAI の WebSocket API を使っている場合、変更点は URL だけです。それ以外、認証、event、payload format はすべて同じです。
よくある質問
Smart AIPI は OpenAI WebSocket API をサポートしていますか?
はい。Authorization header に API key を指定して wss://api.smartaipi.com/v1/realtime に接続してください。この protocol は OpenAI の WebSocket Responses API と完全互換です。
WebSocket は SSE より高速ですか?
連続リクエストでは高速です。WebSocket は永続接続を維持するため、SSE が新規リクエストごとに発生させる TCP と TLS の handshake オーバーヘッドをなくせます。単発のリクエストでは差はほとんどありません。
どの model が WebSocket で使えますか?
Responses API で利用可能なすべての model が使えます。GPT-5.3 Codex、GPT-5.2、Codex Mini などです。response.create event で model を指定してください。
function calling や tool use は WebSocket でも動きますか?
はい。Responses API の全機能が利用できます。function calling、tool use、structured outputs、マルチターン会話はすべて WebSocket 接続で動作します。
接続時間に制限はありますか?
アイドル状態の接続は 15 分後に閉じられます。必要に応じて定期的にメッセージを送るか、再接続してください。データを streaming 中のアクティブな接続は中断されません。
1つの接続で複数のリクエストを送れますか?
はい。これは主要な利点の1つです。レスポンス完了後、再接続せずに同じ接続上で別の response.create event を送信できます。