Bei Fehlern der Kimi API prüfen Sie zuerst drei Dinge: HTTP-Statuscode, error.type und request_id. Ein 429 kann Serverüberlast, ein Organisations-Rate-Limit oder zu niedriges Guthaben bedeuten; ein 401 kann ein falsch geschriebener Key oder die Vermischung von China- und internationaler Seite sein. Erst klassifizieren, dann Code ändern.

Dieser Artikel teilt die Fälle in 401, 404, 429 und Timeouts, nennt Ursachen, Diagnoseschritte und wiederverwendbaren Backoff-Code. Modelle und Preise richten sich nach unseren Modellpreisen.

Hinweis: Moonshot und Kimi sind Marken ihrer jeweiligen Inhaber. Fehlertypen, Rate-Limit-Regeln und Schnittstellenverhalten können sich ändern; der Artikel beschreibt die übliche Lage mit Stand Oktober 2026, maßgeblich ist die offizielle Dokumentation.

1. Statuscodes im Überblick

Status Fehlertyp Übliche Bedeutung Richtung
400 invalid_request_error Parameterfehler, Kontext zu lang, Ausgabegrenze überschritten Anfrage ändern
400 content_filter Ein- oder Ausgabe gegen Inhaltssicherheit Prompt anpassen
401 invalid_authentication_error Key ungültig, Region passt nicht Zugangsdaten korrigieren
401 incorrect_api_key_error Key fehlt oder ist falsch Zugangsdaten korrigieren
403 permission_denied_error Schnittstelle nicht freigeschaltet, IP-Whitelist, Guthaben oder Rechte Rechte und Guthaben prüfen
404 resource_not_found_error Modellname oder Pfad falsch Modellliste prüfen
429 engine_overloaded_error Serverüberlast Backoff und Retry
429 rate_limit_reached_error Parallelität, RPM, TPM oder TPD überschritten Drosseln oder Quote erhöhen
429 exceeded_current_quota_error Zahlungsrückstand, zu wenig Guthaben, Gutschein abgelaufen Aufladen
499 client_closed_request Client oder Proxy trennt vorzeitig Timeout und Streaming prüfen
500 server_error Interner Serverfehler Backoff und Retry
503 server_unavailable Dienst vorübergehend nicht verfügbar Backoff und Retry
504 Gateway Time-out Lange Anfrage zu lange wartend Auf Streaming umstellen

Zu niedriges Guthaben kann je nach Zugang als 403 oder 429 erscheinen; verlassen Sie sich nicht nur auf den Statuscode, sondern auf error.type. Im Log mindestens Zeitpunkt, Statuscode, Fehlertyp, Modellname und request_id erfassen; vollständige Keys und sensible Inhalte nicht protokollieren.

2. 401: erst Region, dann Key

  1. Gehört der Key der China-Seite zur Adresse der internationalen Seite oder umgekehrt? Konten, Guthaben und Keys beider Seiten sind vollständig getrennt.
  2. Wurden Keys verschiedener Produktlinien gemischt, etwa Open Platform, Kimi Code und Mitgliedschaft?
  3. Enthält der Key führende oder nachfolgende Leerzeichen, Zeilenumbrüche oder zusätzliche Anführungszeichen?
  4. Wurde die Umgebungsvariable tatsächlich geladen? Testweise nur das Präfix ausgeben.
  5. Wurde der Key gelöscht, rotiert oder hat er keine Berechtigung für das aktuelle Projekt?
  6. Lautet der Header Authorization: Bearer <key> und der Pfad /v1/chat/completions?
export MOONSHOT_API_KEY="IHR_SCHLUESSEL"

curl "https://api.moonshot.cn/v1/chat/completions" \
  -H "Authorization: Bearer $MOONSHOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kimi-k2.6",
    "max_completion_tokens": 64,
    "messages": [{"role": "user", "content": "Antworte nur mit OK"}]
  }'

Liefert dieser Befehl 200, stimmen Key, Region und Modellname. Kommt weiterhin 401, mit einem bekannt funktionierenden Key gegentesten, um Key und Gateway-Konfiguration zu unterscheiden.

3. 404: Modellname und base_url sind die häufigsten Fehler

Ein 404 bedeutet nicht zwingend, dass das Modell abgeschaltet wurde. Vier Ursachen sind typisch:

  • Beim OpenAI SDK wurde keine base_url gesetzt, die Anfrage ging an die Standardadresse von OpenAI und das Modell existiert dort nicht.
  • Der Modellname ist falsch geschrieben, oder das Konto hat keinen Zugriff auf diesen Typ.
  • Der Pfad enthält /v1 doppelt oder gar nicht, oder der Chat-Pfad wurde anders geschrieben.
  • China- und internationale Seite haben unterschiedliche Modellnamen und Berechtigungen.

Zuerst mit demselben Key die Modellliste abrufen und prüfen, was das Konto sieht:

curl "https://api.moonshot.cn/v1/models" \
  -H "Authorization: Bearer $MOONSHOT_API_KEY"

Modelle, die nicht in der Liste stehen, nicht erraten. Maßgeblich sind die tatsächliche Antwort des Kontos und unsere Modellpreise. Liefert die Modellliste Ergebnisse, der Chat aber weiterhin 404, prüfen Sie, ob im Pfad /v1 fehlt oder ob der Client base_url und vollständigen Pfad doppelt zusammensetzt.

4. 429: drei Typen, drei Reaktionen

error.type Bedeutung Retry sinnvoll Vorgehen
engine_overloaded_error Serverüberlast Ja Nach Retry-After zurückweichen, Parallelität senken
rate_limit_reached_error Parallelität, RPM, TPM, TPD auf Organisationsebene überschritten Teilweise Drosseln, Keys trennen, Stufe erhöhen
exceeded_current_quota_error Rückstand, Guthaben zu niedrig, Gutschein abgelaufen Nein Aufladen oder Abrechnung prüfen

Bei überschrittenem TPD hilft meist nur Warten bis zum nächsten Tag oder eine höhere Quote; weitere Retries sind sinnlos. Durch 429 unterbrochene Anfragen werden üblicherweise nicht berechnet, erfolgreiche Wiederholungen dagegen normal. Weder aus Angst vor Kosten endlos wiederholen noch aus einem 429 schließen, das Konto sei bereits belastet. Das OpenAI SDK wiederholt standardmäßig automatisch und kann einen 429 in mehrere Anfragen vervielfachen; im Produktivbetrieb max_retries explizit setzen und eigene Backoff-Logik verwenden.

import random
import time
from openai import OpenAI, RateLimitError

client = OpenAI(
    api_key="IHR_SCHLUESSEL",
    base_url="https://api.moonshot.cn/v1",
    max_retries=0,
)

def ask(prompt: str, retries: int = 4) -> str:
    for attempt in range(retries):
        try:
            resp = client.chat.completions.create(
                model="kimi-k2.6",
                messages=[{"role": "user", "content": prompt}],
                max_completion_tokens=1024,
            )
            return resp.choices[0].message.content
        except RateLimitError as exc:
            body = exc.body or {}
            etype = (body.get("error") or {}).get("type", "")
            if etype == "exceeded_current_quota_error":
                raise RuntimeError("Guthaben oder Kontingent erschöpft, bitte aufladen")
            wait = min(2 ** attempt, 20) + random.random()
            print(etype, "warte", round(wait, 1), "Sekunden")
            time.sleep(wait)
    raise RuntimeError("Maximale Wiederholungszahl erreicht")

Retries eignen sich nur für vorübergehende Fehler. Bei Vorgängen mit Nebenwirkungen zuerst mit Idempotenzschlüssel oder Statusprüfung feststellen, ob die Aktion bereits ausgeführt wurde, und erst dann erneut senden.

5. Timeouts und 504

Lange Textgenerierung, die Analyse langer Dokumente und Coding-Agenten laufen am häufigsten in Timeouts. Die Reihenfolge der Behandlung:

  1. Nicht gestreamte Anfragen auf stream=True umstellen, damit die Verbindung kontinuierlich Daten liefert.
  2. Sinnvolle Verbindungs- und Lese-Timeouts setzen, nicht die SDK-Standardwerte übernehmen.
  3. Prüfen, ob Firmenproxy, Gateway oder lokale Routing-Tools die Verbindung vorzeitig trennen; das kann sich als 499 zeigen.
  4. Mit max_completion_tokens die Ausgabelänge pro Anfrage begrenzen und sehr lange Aufgaben aufteilen.
  5. Request-ID und Dauer jedes Timeouts erfassen, um langsames Modell, Netz oder Gateway zu unterscheiden.
stream = client.chat.completions.create(
    model="kimi-k2.6",
    messages=[{"role": "user", "content": "Schreibe eine Checkliste für die Bereitstellung"}],
    max_completion_tokens=2048,
    stream=True,
    stream_options={"include_usage": True},
)

for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")

Streaming senkt den Stückpreis nicht, reduziert aber deutlich die Verschwendung durch „bis zum Timeout warten und dann wiederholen“. Der Verbindungs-Timeout darf kurz sein, der Lese-Timeout muss sich an der längsten Generierungszeit orientieren; im Streaming nicht den Lese-Timeout des nicht gestreamten Betriebs übernehmen, sonst trennt der Client eine normale Generierung selbst.

6. Diagnosereihenfolge

  1. Statuscode, error.type, request_id, Modellname und Zeitpunkt erfassen.
  2. Bei 401 und 403 Region, Key, Produktlinie, Rechte und Guthaben prüfen.
  3. Bei 404 base_url, Modellname und Kontorechte prüfen und mit der Modellliste verifizieren.
  4. Bei 400 Kontextlänge, Ausgabegrenze, Dateiformat und Inhaltssicherheit prüfen.
  5. Bei 429 nach error.type in Überlast, Rate-Limit und Zahlungsrückstand trennen.
  6. Bei 499 und 504 Streaming, Timeouts, Proxy und Verbindungshaltung prüfen.
  7. Bei 500 und 503 mit Backoff wiederholen; bei Dauerhaftigkeit request_id an den Anbieter geben.
  8. Nach jedem Vorfall Monitoring und Alarme ergänzen, nicht auf Nutzerfeedback warten.

Häufige Fragen

Worin unterscheiden sich 429 und 503?

429 kann Serverüberlast oder ein Konto-/Guthabenproblem sein; zuerst error.type prüfen. 503 bedeutet vorübergehende Nichtverfügbarkeit und wird meist nach Backoff wiederholt. Gemeinsam ist: nicht in festem Takt heftig wiederholen.

Was tun, wenn nach dem Aufladen weiterhin 401 kommt?

Prüfen Sie, ob Aufladung und Key zur selben Region und Produktlinie gehören. Testen Sie mit einem neu erstellten Key, um einen gelöschten alten Key oder zwischengespeicherte Umgebungsvariablen auszuschließen.

Welcher Fehler erscheint bei zu langem Kontext?

Meist 400 invalid_request_error mit dem Hinweis, dass die Eingabe-Token zu lang sind. Eingabe kürzen, Verlauf beschneiden oder ein Modell mit größerem Kontext verwenden.

Sollte die automatische SDK-Wiederholung aktiviert bleiben?

Sie kann aktiviert werden, braucht aber eine Obergrenze. Standard-Retries können 429 vervielfachen; im Produktivbetrieb besser deaktivieren und nach Fehlertyp eigene Backoff-Logik und Alarme einsetzen.

Wie unterscheidet man Gateway-Fehler von Anbieterfehlern?

Dieselbe Anfrage gegen Direktverbindung und Gateway senden und Statuscode, error.type und request_id vergleichen. So lässt sich schnell erkennen, ob Upstream, Netz, Key oder Gateway-Konfiguration betroffen ist.

Nächster Schritt

Erstellen Sie im ZSQH AI Gateway einen Test-Key und spielen Sie 401, 404, 429 und Timeout je einmal durch, bevor Sie das Produktionsmonitoring anbinden. Modellverfügbarkeit und Preise entnehmen Sie den Modellpreisen.

Weiterlesen: