Als unser KI Anbieter das Modell abschaltete
Ein Modellwechsel, leere Antworten ohne Fehlermeldung und eine Rechnung, die plötzlich ein Vielfaches betrug. Was dabei kaputtging und warum die Ursache so schwer zu sehen war.

Im Juli 2026 hörten mehrere Funktionen gleichzeitig auf zu arbeiten: der KI Chat, die KI Antworten im Ticket, die Ticket Zusammenfassung, der Server Builder, dazu die Moderation und die Übersetzung von Ideen und Bug Reports.
Der Grund war nicht unser Code. Unser KI Anbieter hatte das Modell abgeschaltet, das wir benutzten.
Teil eins: das Modell ist weg
Das ist der offensichtliche Teil, und er war schnell behoben. Ein Anbieter stellt ein Modell ein, man trägt das Nachfolgemodell ein, fertig.
Der eigentliche Vorfall fing danach an.
Teil zwei: leere Antworten, ohne Fehler
Nach dem Wechsel kamen die Antworten zurück. Nur manchmal waren sie leer. Nicht abgeschnitten, nicht fehlerhaft, sondern eine vollständig leere Antwort ohne jede Fehlermeldung.
Die Ursache liegt in einem Unterschied, den man dem Modellnamen nicht ansieht: Das Nachfolgemodell ist ein Reasoning Modell. Es schreibt vor der eigentlichen Antwort erst einen internen Gedankengang in ein separates Feld. Beides zieht vom selben Token Budget ab.
Ist das Budget durch das Nachdenken aufgebraucht, kommt eine Antwort zurück, die formal in Ordnung ist: Der Anbieter meldet "Länge erreicht", und das Antwortfeld ist leer. Kein Fehler, kein Hinweis, nichts, was ein try/catch sehen würde.
Wir haben das mit einem echten Test nachgestellt: Schon ein Budget von fünf Token reicht, um bei jeder Anfrage eine leere Antwort zu erzeugen.
Teil drei: die Rechnung
An der teuersten Stelle, dem KI Server Builder, hatten wir ein großzügiges Budget gesetzt, weil dort lange Antworten entstehen. Dort lief das Nachdenken also nicht ins Limit, sondern einfach durch.
Die Folgen kamen aus zwei Richtungen gleichzeitig. Die Anfragen dauerten so lange, dass sie in Zeitüberschreitungen liefen. Und sie kosteten ein Vielfaches, weil jedes Mal ein kompletter unsichtbarer Gedankengang mitbezahlt wurde. Am Ende stand eine Fehlermeldung, mit der wir nicht gerechnet hatten: Guthaben aufgebraucht.
Der Fix ist eine Zeile. Das Nachdenken lässt sich im Anfrage Körper abschalten, dann verhält sich das Modell wieder wie das alte. Diese Zeile gehört seitdem an jede Aufrufstelle, und davon gibt es im Repo mehr als eine Handvoll.
Teil vier: was wir beim Aufräumen fanden
Wenn man ohnehin jede KI Aufrufstelle anfasst, schaut man sich sie auch an. Dabei kam ein zweites Thema heraus, das nichts mit dem Vorfall zu tun hatte, aber ähnlich teuer war.
Anbieter berechnen einen Prompt deutlich günstiger, wenn sein Anfang unverändert bleibt und aus einem Zwischenspeicher bedient werden kann. Der Unterschied zwischen Treffer und Fehltreffer liegt etwa beim Dreißigfachen.
Man bekommt diesen Rabatt nicht über ein Flag. Wir haben das eigens getestet: Ein dafür gedachtes Feld im Anfrage Körper hatte null Wirkung, der Zwischenspeicher greift ohnehin automatisch. Der einzige Hebel ist die Reihenfolge im Prompt, und zwar von stabil nach veränderlich.
Vier Stellen, an denen wir genau dagegen verstoßen hatten:
Ein veränderlicher Wert im festen Anweisungsblock. Die Duplikatprüfung für Bug Reports hatte den Modulnamen im Anweisungstext stehen. Damit hatte ein ansonsten identischer Block pro Modul eine eigene Zwischenspeicher Linie. Der Wert gehört in den variablen Teil, wo er ohnehin wechselt.
Das Neue vor dem Stabilen. Dieselbe Prüfung schickte den neuen Bug Report vor die bis zu fünfzig Vergleichskandidaten. Der größte Prompt der API war damit dauerhaft ein vollständiger Fehltreffer.
Nutzerdaten im festen Teil. Der öffentliche KI Chat hatte die Notizen zum jeweiligen Nutzer im Anweisungsblock, also vor dem gemeinsamen Kanalverlauf. Damit hatte jeder Nutzer im selben Kanal seinen eigenen Anfang, und der geteilte Verlauf wurde für jeden einzeln bezahlt.
Ein wanderndes Fenster über den Verlauf. Wer bei jeder Nachricht die letzten N Nachrichten mitschickt, verschiebt den Anfang bei jeder Nachricht. Der komplette Verlauf ist damit dauerhaft ein Fehltreffer. Richtig ist, in Blöcken zu kürzen, also selten und dafür kräftig.
Dazu ein Detail, das wie Erbsenzählerei aussieht und es nicht ist: Eine Liste im Prompt, die nach nur einem Kriterium sortiert wird, kann bei Gleichstand ihre Reihenfolge ändern. Eine einzige vertauschte Zeile mitten im Anweisungsblock kostet den Treffer für alles, was dahinter steht. Sortierungen in Prompts brauchen einen eindeutigen zweiten Vergleich.
Was wir daraus gelernt haben
Ein Modellwechsel ist kein Konfigurationswechsel. Der Name sieht aus wie ein Wert in einer Variable. Dahinter steckte ein anderes Verhalten, und das Verhalten hat unseren Code gebrochen, nicht die Schnittstelle.
Der gefährliche Fehler war der lautlose. Der Ausfall des alten Modells war sofort sichtbar und in Minuten behoben. Die leeren Antworten kamen als formal gültige Antwort zurück und hätten beliebig lange so bleiben können.
Messbarkeit gehört zur Aufrufstelle. Wir loggen seitdem an jeder Stelle die Trefferquote des Zwischenspeichers. Eine korrekt gebaute Stelle pendelt sich nach der ersten Anfrage auf einen hohen Wert ein, eine falsch gebaute bleibt bei null. Das sieht man in einer Logzeile und sonst nirgends, denn funktionieren tut beides.
Und die unbequeme Schlussfolgerung: Wer ein fremdes Modell benutzt, hat einen Teil seines Produkts an eine Entscheidung ausgelagert, die woanders getroffen wird. Deshalb kann seit August jeder Server für die KI Funktionen einen eigenen Endpunkt hinterlegen, statt auf unseren angewiesen zu sein.
Weitere Artikel
Wie wir 4.000 Discord Server im Blick behalten: Grafana, PostHog und was sie uns gezeigt haben
Ein Loop, der still die Hälfte unseres Verkehrs erzeugte, drei Millionen unnötige Anfragen am Tag und ein Angriff, der nach einer Minute vorbei war. Was unser Monitoring sieht, und was es bewusst nicht sieht.
Hinter den KulissenWas uns über 2.000 Discord Server beigebracht haben
Vier Dinge, die beim Betrieb eines Bots auf tausenden Servern anders funktionieren, als man beim Schreiben des Codes annimmt.
Hinter den KulissenWarum bei AlphaCloud fast alles kostenlos bleibt
Die meisten Discord Bots sperren ihre nützlichsten Funktionen hinter ein Abo. Wir machen das bewusst nicht, und das hat weniger mit Großzügigkeit zu tun, als es klingt.