쿠키를 사용합니다. 쿠키와 브라우저 저장소는 로그인 상태를 유지하고 환경설정을 기억합니다. 동의하시면 사이트 이용 방식도 측정합니다. 언제든지 할 수 있습니다. 자세한 내용은 쿠키 정책을 참고하세요.

스트리밍

엔드포인트

스트리밍

stream 파라미터를 true로 설정해 Server-Sent Events로 토큰을 실시간 수신하는 방법입니다. 이벤트 형식, 스트림 요금 청구, 스트림 도중 발생하는 오류 처리를 Python과 Node 코드로 보여 줍니다.

플레이그라운드에서 사용해 보기

Chat Completions, Responses, Completions에서 stream: true를 설정하면 토큰이 생성되는 즉시 받을 수 있습니다. 응답은 Server-Sent Events(Content-Type: text/event-stream)를 사용합니다. api14는 업스트림에서 도착한 바이트를 버퍼링하지 않고 그대로 전달합니다.

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api14.com/api/v1",
  apiKey: process.env.API14_API_KEY,
});

const stream = await client.chat.completions.create({
  "model": "openai/gpt-5-mini",
  "messages": [
    {
      "role": "user",
      "content": "Explain vector databases in two sentences."
    }
  ],
  "stream": true
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}

이벤트 형식

각 이벤트는 JSON 청크를 담은 data: 줄입니다. 스트림은 data: [DONE]으로 끝납니다.

data: {"id":"gen-1760000000-abc","object":"chat.completion.chunk","model":"openai/gpt-5-mini","choices":[{"index":0,"delta":{"role":"assistant","content":"Hel"}}]}

data: {"id":"gen-1760000000-abc","object":"chat.completion.chunk","model":"openai/gpt-5-mini","choices":[{"index":0,"delta":{"content":"lo!"}}]}

data: {"id":"gen-1760000000-abc","object":"chat.completion.chunk","model":"openai/gpt-5-mini","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":10,"completion_tokens":3,"total_tokens":13,"cost":0.0000085}}

data: [DONE]
  • [DONE] 직전의 마지막 청크에는 USD로 표시된 cost를 포함한 usage가 담겨 있습니다. stream_options.include_usage는 필요 없습니다. 사용량 보고는 항상 켜져 있습니다.
  • id는 모든 청크에서 같습니다. 이 값은 생성 내역 조회에 넘길 수 있는 생성 ID입니다.
  • 일부 제공업체는 연결을 유지하기 위해 :로 시작하는 SSE 주석 줄을 보냅니다. SSE 클라이언트와 OpenAI SDK는 이를 무시합니다. 스트림을 직접 파싱한다면 :로 시작하는 줄은 건너뛰세요.

스트림 요금 청구

게이트웨이는 스트림을 전달하면서 마지막 usage 청크를 읽고, 스트림이 닫히면 잔액에서 차감합니다.

연결을 끊어도 요금은 취소되지 않습니다. 스트림이 끝나기 전에 연결을 닫더라도 업스트림 제공업체는 계속 생성하고 요금을 청구할 수 있습니다. 이 경우 api14는 생성 기록에서 비용을 읽어 옵니다. 비용을 제한하려면 max_tokens를 설정하세요.

스트림 중 오류

잘못된 키, 잔액 부족, 알 수 없는 모델처럼 첫 바이트 전에 발생한 오류는 4xx 또는 5xx 상태의 일반 JSON 오류로 반환됩니다. 오류를 참고하세요. 스트림 도중 제공업체에 장애가 생기면, 스트림이 error 객체와 finish_reason: "error"를 담은 청크로 끝날 수 있습니다.

{ "error": { "code": 502, "message": "Provider disconnected" }, "choices": [{ "delta": { "content": "" }, "finish_reason": "error" }] }

마지막 청크의 finish_reason을 항상 확인하세요.

팁

  • 프록시나 서버리스 플랫폼은 응답을 버퍼링하기도 합니다. 브라우저로 스트림을 중계한다면 응답 버퍼링을 끄세요(예: nginx에서는 X-Accel-Buffering: no).
  • 도구 호출은 delta.tool_calls 조각으로 스트리밍됩니다. 파싱하기 전에 index별로 arguments 문자열을 이어 붙이세요. 도구 호출을 참고하세요.
  • 추론 모델은 답변 전에 delta.reasoning으로 추론 내용을 스트리밍합니다. 추론을 참고하세요.