OpenAI WebSocket API: 75% 더 저렴한 실시간 Streaming
Smart AIPI가 이제 OpenAI의 WebSocket API를 지원합니다. SSE보다 더 낮은 지연 시간, 지속 연결, 그리고 75% 더 저렴한 비용. 연결 방법을 소개합니다.
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% 더 낮습니다.
왜 SSE 대신 WebSocket인가?
Server-Sent Events는 AI streaming의 표준이었지만, WebSocket은 SSE의 트레이드오프를 없애줍니다:
| 기능 | SSE (HTTP) | WebSocket |
|---|---|---|
| 요청당 연결 | 매번 새 연결 | 지속 연결 (재사용) |
| 방향 | Server → Client만 가능 | 양방향 |
| 하나의 연결에서 여러 요청 | 아니요 | 예 |
| 첫 token 지연 시간 | 더 높음 (새 TCP + TLS) | 더 낮음 (연결 재사용) |
| 적합한 용도 | 단순한 통합 | Agents, 실시간 앱, 고처리량 |
연속해서 수십 개의 API 호출을 수행하는 agent loop에서는, 지속적인 WebSocket 연결로 절약되는 누적 지연 시간이 상당합니다.
작동 방식
WebSocket API는 이벤트 기반 프로토콜을 따릅니다. 하나의 지속 연결을 통해 서버로 JSON 이벤트를 보내고, 다시 JSON 이벤트를 받습니다.
1. 연결 및 인증
헤더에 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 객체가 생성됨 |
| response.output_item.added | 새 출력 항목(메시지) 시작 |
| 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% |
시작하기
- API key 받기 — smartaipi.com에서 가입하세요 (무료 크레딧 포함, 신용카드 불필요)
- 연결 —
wss://api.smartaipi.com/v1/realtime로 WebSocket을 여세요 - 이벤트 전송 — 모델과 prompt를 포함한
response.create엔벨로프를 사용하세요 - 응답 stream — 도착하는
response.output_text.delta이벤트를 처리하세요
이미 OpenAI의 WebSocket API를 사용 중이라면, 바꿔야 하는 것은 URL뿐입니다. 그 외 모든 것 — 인증, 이벤트, payload 형식 — 은 동일합니다.
자주 묻는 질문
Smart AIPI는 OpenAI WebSocket API를 지원하나요?
예. Authorization 헤더에 API key를 넣고 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, multi-turn 대화 모두 WebSocket 연결에서 동작합니다.
연결 시간 제한이 있나요?
유휴 연결은 15분 후 종료됩니다. 필요에 따라 주기적으로 메시지를 보내거나 다시 연결하세요. 데이터를 stream 중인 활성 연결은 중단되지 않습니다.
하나의 연결에서 여러 요청을 보낼 수 있나요?
예. 이것이 핵심 장점 중 하나입니다. 응답이 완료된 뒤, 다시 연결하지 않고 같은 연결에서 또 다른 response.create 이벤트를 보내면 됩니다.