Lompat ke konten
Semua dokumentasi

Panduan

Streaming

Atur stream: true dan balasan datang kata demi kata sebagai server-sent events OpenAI. Minta usage dan chunk terakhir menyebut biaya panggilan itu.

Diperiksa 26 Oktober 2026

Streaming sebuah balasan

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://nokeep.ai/v1",
    api_key=os.environ["NOKEEP_API_KEY"],
)

stream = client.chat.completions.create(
    model="deepseek-v4.1-flash-uncensored",
    messages=[{"role": "user", "content": "Tell me a story in three lines."}],
    stream=True,
    stream_options={"include_usage": True},
)
for chunk in stream:
    if chunk.choices:
        print(chunk.choices[0].delta.content or "", end="", flush=True)
    if chunk.usage:
        print("\ncredits:", chunk.usage.model_extra.get("nokeep_credits"))

Yang datang

The stream
data: {"choices":[{"index":0,"delta":{"role":"assistant","content":""}}]}
data: {"choices":[{"index":0,"delta":{"content":"The"}}]}
data: {"choices":[{"index":0,"delta":{"content":" lighthouse"}}]}
…
data: {"choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: {"choices":[],"usage":{"prompt_tokens":18,"completion_tokens":61,"nokeep_credits":0}}
data: [DONE]
  • Kata-kata datang di delta.content. Dengan thinking menyala, pemikirannya datang lebih dulu, di delta.reasoning_content.
  • Panggilan tool datang di delta.tool_calls, argumennya dalam potongan-potongan, seperti dikirim OpenAI.
  • Dengan stream_options.include_usage, chunk terakhir dengan daftar choices kosong membawa usage, termasuk nokeep_credits, yaitu biaya panggilan itu.
  • Streaming berakhir dengan data: [DONE].

Hentikan balasan lebih awal

Tutup koneksinya dan model berhenti menulis. Kamu membayar apa yang sudah terkirim sebelum berhenti, dan tidak ada setelahnya. Di SDK, keluar dari loop dan tutup streamnya; di aplikasi, tekan tombol Stop-nya.

Python
for chunk in stream:
    text = chunk.choices[0].delta.content if chunk.choices else ""
    if text and "THE END" in text:
        stream.close()  # the model stops here, and so does the bill
        break

Saat model berhenti lebih dulu

Jika model mengakhiri streaming sebelum selesai, event terakhir sebelum [DONE] adalah error dalam bentuk OpenAI, dengan kode stream_cut. Yang sudah ditulis tetap ditagih, tidak lebih. Coba lagi, atau lanjutkan dari yang sudah masuk.

A cut stream
data: {"error":{"type":"api_error","code":"stream_cut","message":"The model stopped before it finished. What it wrote is billed, nothing more."}}
data: [DONE]

Pertanyaan

Apakah streaming lebih mahal?

Tidak. Balasan yang distreaming memakai token yang sama dengan balasan utuh.

Kenapa tidak ada header x-nokeep-credits pada streaming?

Header dikirim sebelum kata pertama, saat biayanya belum diketahui. Minta usage dan baca nokeep_credits di chunk terakhir.