Start → Hilfe

Das Modell liefert einen leeren String, und trotzdem wird abgerechnet

Bei einem Reasoning-Modell begrenzt max_tokens Reasoning-Tokens und sichtbare Ausgabe zusammen. Verbraucht die Denkkette das ganze Budget, bekommen Sie ein gültiges 200 mit leerem content-Feld – und jedes Reasoning-Token wird berechnet.

Was Sie sehen

Warum das passiert

Reasoning-Modelle erzeugen zwei Arten von Output-Tokens: die interne Kette und die Antwort, die Sie sehen. Abgerechnet wird beides. max_tokens begrenzt beides. Ein Wert, der für ein Modell ohne Reasoning großzügig war, kann vor dem ersten sichtbaren Zeichen komplett aufgebraucht sein.

Der Fehler ist bauartbedingt leise. Die API hat getan, was man ihr sagte: Sie hat bis zum Limit generiert und dann aufgehört. finish_reason: "length" ist der einzige Hinweis, und der fällt leicht unter den Tisch, wenn Ihr Code choices[0].message.content liest und einen harmlosen leeren String findet.

Uns ist das bei einem internen Tool zur Dokumentbewertung passiert. max_tokens stand auf 2500 – für das vorige Modell in Ordnung, aber bei weitem nicht genug, sobald das Modell zuerst nachdachte. Eine Zeit lang sah es nach einem kaputten Proxy aus, denn die Anfragen waren erfolgreich, die Latenz normal und die Kosten real. Verraten hat es die Rechnung: Abbuchungen ohne passenden Text.

Prüfen, ob es daran liegt

Schauen Sie auf finish_reason und die Token-Zahlen, nicht nur auf den Inhalt:

curl -s 'YOUR_BASE_URL/chat/completions' \
  -H 'Authorization: Bearer YOUR_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"model":"YOUR_MODEL","max_tokens":64,
       "messages":[{"role":"user","content":"What is 17 * 23? Answer with the number only."}]}' \
  | python3 -m json.tool

"finish_reason": "length" zusammen mit leerem content und einer Output-Token-Zahl über null ist das Erkennungszeichen. Wiederholen Sie es mit max_tokens auf 4000, und derselbe Prompt liefert eine Antwort.

So beheben Sie es

  1. Budget für das Nachdenken einplanen, nicht nur für die AntwortEin Reasoning-Modell braucht Platz für beides. Wollen Sie eine Antwort mit 200 Tokens, sind 2000 Tokens Spielraum nicht übertrieben — die Kette ist oft ein Mehrfaches der Antwort.
  2. finish_reason: length im Code als Fehler behandelnLassen Sie einen leeren String nicht stillschweigend durch. Verzweigen Sie darauf und wiederholen Sie mit größerem Budget oder scheitern Sie laut. Diese eine Prüfung macht aus einem Rätsel eine Logzeile.
  3. Prüfen, ob das Modell ein eigenes Reasoning-Budget unterstütztManche bieten einen eigenen Parameter, damit die sichtbare Antwort ein eigenes Kontingent bekommt. Wo es das gibt, nutzen Sie es statt einer geschätzten Gesamtzahl.
  4. Mit einem Modell ohne Reasoning vergleichen, bevor Sie das Netzwerk beschuldigenLiefert dieselbe Anfrage bei einem Modell ohne Reasoning Text, ist die Übertragung in Ordnung und das Budget das Problem.
Jede Anfrage bei APICLAN zeigt im Nutzungslog Input-, Output- und Reasoning-Tokens, sodass eine leere Antwort mit echter Rechnung sichtbar statt rätselhaft ist. Das Verhalten jedes Modells ist auf den Preisseiten beschrieben.

Verwandte Themen

Unexpected token '<' beim Aufruf einer OpenAI-kompatiblen API401 invalid API key – wenn der Schlüssel richtig aussieht und trotzdem scheitert

Zuletzt geprüft am 2026-10-01. Geschrieben aus Problemen, die auf einem laufenden OpenAI-kompatiblen Gateway diagnostiziert wurden – nicht von anderen Seiten zusammengetragen.