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.

Auf dieser Seite
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_tokensist 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_tokensalso 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.
{
"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 }
}{
"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_ 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:
- Sieh dir
finish_reasonan. Wenn esstopist, ist die Antwort vollständig. Das Modell hat selbst beendet oder eine von dir gesetzte Stop-Sequenz erreicht. Wenn eslengthist, hat ein Limit die Antwort abgeschnitten, und der nächste Schritt sagt dir, welches. Es gibt weitere Werte, etwacontent_filterundtool_calls; keiner davon ist ein Längenproblem. - Vergleiche
completion_mit demtokens max_tokens, das du gesendet hast. Wenn sie gleich oder nahezu gleich sind, hast dumax_tokenserreicht. - Wenn
completion_deutlich untertokens max_tokensliegt undprompt_tokensgroß ist, hat sich wahrscheinlich das Kontextfenster gefüllt. Die Referenz von DeepSeek verwendetlengthfü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 alsmodel_. Sieh dir das Feld in deinen eigenen Antworten an, um zu sehen, welchen Namen du bekommst.context_ window_ exceeded
Alle drei Beschreibungen stammen aus der Dokumentation der Entwickler, geprüft am 20. Oktober 2026: DeepSeek, Anthropic und Z.ai.
Tabelle nach rechts scrollen →
| Was du siehst | finish_reason |
Ursache | Was zu tun ist |
|---|---|---|---|
Abgeschnitten, completion_ gleich max_tokens |
length |
max_tokens erreicht |
Erhöhe max_tokens oder frage die Antwort in Teilen ab |
Abgeschnitten, completion_ weit unter max_tokens, lange Eingabe |
length (oder model_ 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.
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:
Tabelle nach rechts scrollen →
| Modell | Modell-ID | Max. Ausgabe pro Antwort | Kontext |
|---|---|---|---|
| DeepSeek-V4-Flash (0731) | deepseek- |
32.768 Tokens | 380K |
| GLM-5.3-Flash | zai- |
8.192 Tokens | 390K |
| MiniMax-M2.7 | MiniMaxAI/ |
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.
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 | Input $/1M | Output $/1M | Kosten | OpenRouter |
|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.00036 | $0.00069 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.00083 | $0.0013 |
| MiniMax-M2.7 | $0.05 | $0.15 | $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/) 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.



