Zum Inhalt springen
Gesamte Doku

Leitfäden

Streaming

Setzen Sie stream: true, dann kommt die Antwort Wort für Wort als Server-Sent Events von OpenAI. Fordern Sie usage an, und der letzte Chunk sagt, was der Aufruf gekostet hat.

Geprüft am 26. Oktober 2026

Eine Antwort streamen

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"))

Was ankommt

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]
  • Wörter kommen in delta.content an. Mit eingeschaltetem Denken kommt das Denken zuerst, in delta.reasoning_content.
  • Tool-Aufrufe kommen in delta.tool_calls an, ihre Argumente in Teilen, wie OpenAI sie sendet.
  • Mit stream_options.include_usage trägt ein letzter Chunk mit einer leeren choices-Liste das usage, einschließlich nokeep_credits, also was der Aufruf gekostet hat.
  • Der Stream endet mit data: [DONE].

Eine Antwort früh stoppen

Schließen Sie die Verbindung, dann hört das Modell auf zu schreiben. Sie zahlen für das, was vor dem Stopp gesendet wurde, und nichts danach. In den SDKs verlassen Sie die Schleife und schließen den Stream; in einer App drücken Sie deren Stopp-Taste.

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

Wenn das Modell zuerst aufhört

Beendet das Modell einen Stream, bevor er fertig ist, dann ist das letzte Ereignis vor [DONE] ein Fehler in der Form von OpenAI, mit dem Code stream_cut. Was es geschrieben hat, wird abgerechnet, mehr nicht. Versuchen Sie es erneut oder machen Sie mit dem weiter, was angekommen ist.

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]

Fragen

Kostet Streaming mehr?

Nein. Eine gestreamte Antwort kostet dieselben Token wie eine ganze.

Warum gibt es bei einem Stream keinen x-nokeep-credits-Header?

Die Header werden vor dem ersten Wort gesendet, wenn die Kosten noch nicht feststehen. Fordern Sie usage an und lesen Sie nokeep_credits im letzten Chunk.