Zurück zum Blog

KI für EinsteigerAnleitung

Warum stoppt eine KI-Antwort mitten im Satz? max_tokens, das Kontextfenster und finish_reason erklärt

Eine KI-Antwort, die mitten im Satz stoppt, hat ein Limit erreicht. Lies finish_reason, unterscheide max_tokens von einem vollen Kontextfenster und prüfe das Ausgabelimit jedes Modells.

Von CheapTokens TeamVeröffentlicht am Aktualisiert am 7 Min. Lesezeit

Dunkles Cover mit dem cheaptokens-Logo: die Wörter max_tokens, finish_reason und length in Kästchen und die Schlagzeile „Antwort mitten im Satz abgeschnitten?“
Auf dieser Seite
  1. Drei Limits, die eine Antwort abschneiden
  2. Lies zuerst finish_reason
  3. Fix 1: max_tokens erhöhen
  4. Fix 2: wenn das Kontextfenster voll ist
  5. Fix 3: eine lange Antwort in Teilen erhalten
  6. Wenn finish_reason stop ist
  7. Ein Modell nach Antwortlänge wählen

Eine Antwort, die mitten im Satz endet, wurde fast immer durch ein Limit abgeschnitten. Das Modell hat nicht den Faden verloren; der Anfrage ging der Platz aus. Die Antwort sagt, welches Limit es war: lies finish_reason. length bedeutet, dass ein Limit erreicht wurde. stop bedeutet, dass das Modell von selbst fertig wurde.

Drei Dinge entscheiden, wie lang eine Antwort sein kann. Sobald du weißt, welches dich erwischt hat, dauert die Behebung eine Minute.

Drei Limits, die eine Antwort abschneiden#

  • max_tokens ist eine Obergrenze, die du in der Anfrage setzt. Wenn die Antwort sie erreicht, stoppt die Generierung, selbst mitten im Wort. Die API-Referenz von DeepSeek definiert es als die maximale Anzahl an Tokens, die in der Completion generiert werden.
  • Das Ausgabelimit des Modells ist die Obergrenze für eine einzelne Antwort dieses Modells. Es gehört zum Modell, halte max_tokens also auf oder unter diesem Wert. Die Zahlen für unsere Modelle stehen in der Tabelle unten.
  • Das Kontextfenster ist der Platz für den gesamten Austausch: deine Eingabe und die Antwort zusammen. Die Referenz von DeepSeek sagt, dass Eingabe- und generierte Tokens zusammen durch die Kontextlänge des Modells begrenzt sind.

Wenn Tokens für dich noch ein vager Begriff sind, beginne mit What is a token in AI?. Diese Seite setzt voraus, dass du weißt, was eines ist.

Lies zuerst finish_reason#

Jede Choice in einer Chat-Antwort trägt ein finish_reason. Daneben sagt dir usage, wie viele Tokens hinein- und hinausgingen.

So sieht eine abgeschnittene Antwort neben einer fertigen aus. Die Anfrage lautete "In one short sentence, what is a token?", zuerst mit max_tokens auf 16 gesetzt, dann mit 200.

Illustratives Beispiel, keine aufgezeichnete Antwort: deine Zählwerte und zusätzlichen Felder werden abweichen.

json
{
  "choices": [
    {
      "message": { "role": "assistant", "content": "A token is a small piece of text that a model reads and writes, usu" },
      "finish_reason": "length"
    }
  ],
  "usage": { "prompt_tokens": 21, "completion_tokens": 16, "total_tokens": 37 }
}
json
{
  "choices": [
    {
      "message": { "role": "assistant", "content": "A token is a small piece of text that a model reads and writes, usually a word or part of a word." },
      "finish_reason": "stop"
    }
  ],
  "usage": { "prompt_tokens": 21, "completion_tokens": 24, "total_tokens": 45 }
}

In der ersten Antwort ist completion_tokens 16, genau die Obergrenze, und der Text endet mit "usu". In der zweiten stoppte das Modell bei 24 Tokens, deutlich unter der Obergrenze von 200, weil es fertig war.

Um herauszufinden, was passiert ist, gehe in dieser Reihenfolge vor:

  1. Sieh dir finish_reason an. Wenn es stop ist, ist die Antwort vollständig. Das Modell hat selbst beendet oder eine von dir gesetzte Stop-Sequenz erreicht. Wenn es length ist, hat ein Limit die Antwort abgeschnitten, und der nächste Schritt sagt dir, welches. Es gibt weitere Werte, etwa content_filter und tool_calls; keiner davon ist ein Längenproblem.
  2. Vergleiche completion_tokens mit dem max_tokens, das du gesendet hast. Wenn sie gleich oder nahezu gleich sind, hast du max_tokens erreicht.
  3. Wenn completion_tokens deutlich unter max_tokens liegt und prompt_tokens groß ist, hat sich wahrscheinlich das Kontextfenster gefüllt. Die Referenz von DeepSeek verwendet length für beide Fälle, das Feld allein kann sie also nicht unterscheiden; der Vergleich in Schritt 2 ist, wie du es erkennst. Die Dokumentation von Anthropic und Z.ai benennt den zweiten Fall separat als model_context_window_exceeded. Sieh dir das Feld in deinen eigenen Antworten an, um zu sehen, welchen Namen du bekommst.

Alle drei Beschreibungen stammen aus der Dokumentation der Entwickler, geprüft am 20. Oktober 2026: DeepSeek, Anthropic und Z.ai.

Was du siehst finish_reason Ursache Was zu tun ist
Abgeschnitten, completion_tokens gleich max_tokens length max_tokens erreicht Erhöhe max_tokens oder frage die Antwort in Teilen ab
Abgeschnitten, completion_tokens weit unter max_tokens, lange Eingabe length (oder model_context_window_exceeded in manchen APIs) Kontextfenster voll Kürze die Eingabe oder den Verlauf oder wähle ein Modell mit größerem Fenster
Vollständig, aber kürzer als gewünscht stop Das Modell war fertig, oder eine Stop-Sequenz wurde ausgelöst Frage nach mehr Details; prüfe den Parameter stop
Kein Text oder eine Ablehnung content_filter Die Antwort wurde gefiltert Formuliere die Anfrage um
Kein Text, stattdessen eine Tool-Anfrage tool_calls Das Modell möchte ein Tool aufrufen Führe das Tool aus und sende das Ergebnis zurück

Fix 1: max_tokens erhöhen#

Die häufigste Ursache ist auch am einfachsten zu beheben. Setze max_tokens selbst, damit du weißt, welche Obergrenze gilt. Verlass dich nicht auf den Standardwert.

python
from openai import OpenAI

client = OpenAI(base_url="https://api.cheaptokens.dev/v1", api_key="YOUR_API_KEY")

resp = client.chat.completions.create(
    model="deepseek-ai/DeepSeek-V4-Flash-0731",
    messages=[{"role": "user", "content": "Write a detailed guide to setting up a home network."}],
    max_tokens=16000,  # example value: stay at or below the model's output limit
)

choice = resp.choices[0]
print(choice.finish_reason, resp.usage.completion_tokens)

Dies zeigt die Form des Aufrufs. Der Key wird hier als YOUR_API_KEY eingesetzt; halte einen echten Key aus Code heraus, den du teilst.

Die Zahl zu erhöhen hilft nur bis zum eigenen Limit des Modells. Hier sind die Limits auf CheapTokens, geprüft am 20. Oktober 2026 gegen die Modellliste von CheapTokens:

Modell Modell-ID Max. Ausgabe pro Antwort Kontext
DeepSeek-V4-Flash (0731) deepseek-ai/DeepSeek-V4-Flash-0731 32.768 Tokens 380K
GLM-5.3-Flash zai-org/GLM-5.3-Flash 8.192 Tokens 390K
MiniMax-M2.7 MiniMaxAI/MiniMax-M2.7 8.192 Tokens 200K

Entwickler veröffentlichen ihre eigenen Limits für ihre eigenen APIs. Z.ai listet zum Beispiel bis zu 128K Ausgabe für die GLM-5-Serie. Das sind nicht die Limits von GLM-5.3-Flash auf CheapTokens, das 8.192 Tokens pro Antwort hat. Für alles, was du auf CheapTokens baust, verwende die Tabelle oben.

Fix 2: wenn das Kontextfenster voll ist#

In einem Chat geht der gesamte Verlauf mit jeder Nachricht erneut hinaus, die Eingabe wächst also mit jeder Runde. Das Kontextfenster muss diesen Verlauf plus die neue Antwort fassen. Wenn der Verlauf allein fast alles davon belegt, bleibt kaum Platz für eine Antwort.

Diese Fenster sind groß, und eine kurze Frage füllt sie nicht. Lange Chats und eingefügte Dokumente schon. Was hilft:

  • Starte für eine neue Aufgabe einen neuen Chat, statt einen alten fortzusetzen.
  • Bitte das Modell, das bisherige Gespräch zusammenzufassen, und führe nur die Zusammenfassung weiter.
  • Entferne alte Nachrichten und Anhänge, die du nicht mehr brauchst.
  • Wenn die Eingabe selbst riesig ist, wähle das Modell mit dem größten Fenster. Unter unseren ist das GLM-5.3-Flash mit 390K. Sein Ausgabelimit liegt bei 8.192 Tokens, frage ein langes Ergebnis also in Teilen ab.

Fix 3: eine lange Antwort in Teilen erhalten#

Wenn die gewünschte Antwort länger ist als das Ausgabelimit des Modells, passt keine Einstellung sie in eine einzige Antwort. Frage sie in Stücken ab: wenn finish_reason length ist, sende die Teilantwort zurück und bitte das Modell fortzufahren.

python
messages = [{"role": "user", "content": "Write a detailed guide to setting up a home network."}]
parts = []

for _ in range(4):  # example limit: at most 4 rounds
    resp = client.chat.completions.create(
        model="zai-org/GLM-5.3-Flash",
        messages=messages,
        max_tokens=8000,  # example value: below this model's output limit
    )
    choice = resp.choices[0]
    parts.append(choice.message.content)
    if choice.finish_reason != "length":
        break
    messages.append({"role": "assistant", "content": choice.message.content})
    messages.append({"role": "user", "content": "Continue exactly where you stopped. Don't repeat anything."})

text = "".join(parts)

Gleicher Vorbehalt: ein Beispiel für das Muster, kein aufgezeichneter Lauf. Lies die Nahtstellen zwischen den Teilen. Ein Modell wiederholt manchmal einen Satz oder beginnt an der Verbindung eine Liste neu.

Jede Runde sendet alles Bisherige erneut als Eingabe, und jedes Ausgabe-Token wird abgerechnet. Eine lange Antwort kostet mehr als eine kurze. Hier ist eine Antwort mit achttausend Tokens bei 2.000 Tokens Eingabe, die in jedes Modell der Tabelle passt:

Modell Kosten OpenRouter
GLM-5.3-Flash $0.00036 $0.00069
DeepSeek-V4-Flash $0.00083 $0.0013
MiniMax-M2.7 $0.0013 $0.0102

2.000 Input- und 8.000 Output-Tokens insgesamt. Die Preise pro 1 Mio. Tokens sind aktuell und ändern sich zusammen mit unseren Tarifen; die OpenRouter-Spalte zeigt Referenzpreise für dieselbe Arbeitslast.

Wenn finish_reason stop ist#

stop bedeutet, dass das Modell die Antwort beendet hat. Wenn es früher endete als gewünscht, ist das kein Limitproblem, und ein größeres max_tokens ändert nichts. Sag, was du willst: die Länge, die Abschnitte, den Detailgrad. Prüfe außerdem, ob die Anfrage einen Parameter stop setzt; eine Stop-Sequenz, die in der Antwort auftaucht, beendet sie auf der Stelle.

Ein Modell nach Antwortlänge wählen#

Beginne bei der Antwort, die du brauchst. Wenn sie in 8.192 Tokens passt, bewältigt MiniMax-M2.7 (MiniMaxAI/MiniMax-M2.7) sie auf CheapTokens. Seine Ausgabe ist günstiger als der Referenzpreis von OpenRouter, und es wird zu $0.15 abgerechnet (pro 1M Ausgabe-Tokens). Der Preis ist zu jeder Stunde gleich, es gibt keine Stoßzeiten, und die API ist OpenAI- und Anthropic-kompatibel.

Hier ist die aktuelle Preisliste für jedes Modell:

Modell Kontext Input $/1M Output $/1M OpenRouter Input OpenRouter Output
GLM-5.3-Flash reasoning 390K $0.02 $0.04 $0.0413 $0.0758
DeepSeek-V4-Flash 380K $0.015 $0.10 $0.0475 $0.1568
MiniMax-M2.7 180K $0.05 $0.15 $0.30 $1.20

Preise in USD pro 1 Mio. Token. OpenRouter-Zahlen dienen dem Vergleich und können sich ändern.

Wenn du noch keine Anfrage gesendet hast, führt dich Your first API request with CheapTokens durch. Was ein Token ist und warum Eingabe und Ausgabe getrennt gezählt werden, steht in What is a token in AI?.

Endpunkte, Modell-IDs und Limits für jedes Modell stehen in der CheapTokens docs.