intermediate
ai-ops
fehlerbehebung
betrieb

AI Ops Fehlerbehebung

Häufige Probleme mit der AI-Ops-Nachfragekarte, dem Empfehlungssystem und den Techniker-Routen — und wie Sie sie diagnostizieren.

Levy Fleets TeamMay 18, 20266 min read

AI Ops Fehlerbehebung

Diese Seite behandelt die häufigsten AI-Ops-Probleme und wie Sie sie lösen.

Die Heat Map ist leer

Symptom: /dashboard/analytics/heat-maps lädt, aber es werden keine Hex-Polygone gezeichnet.

Reihenfolge prüfen:

  1. Ist ai_ops_enabled = true für den Subaccount? Falls nicht, laufen keine Crons. Setzen Sie es auf true und warten Sie einen Zyklus.

  2. Wurde der Backfill ausgeführt? Ein neuer Subaccount hat keine Prognosen, bis der einmalige Backfill sie aufbaut. Führen Sie aus:

    curl -X POST "https://fleets.levyelectric.com/api/internal/forecast/backfill" \
      -H "Authorization: Bearer $AI_OPS_INTERNAL_TOKEN" \
      -d '{"subaccountId":"<uuid>"}'
    
  3. Hat der Subaccount mindestens 14 Tage Fahrthistorie? Ohne sie kann das Modell keine Per-Subaccount-Prognose anpassen. Prüfen Sie die Fahrtenzahl.

  4. Lief der Inference-Cron kürzlich? Schauen Sie auf demand_forecasts.created_at für den Subaccount. Ist die jüngste Zeile über 2 Stunden alt, hakt der Cron.

Das "Forecast may be stale"-Banner erscheint

Symptom: Gelbes Banner auf der Heat-Maps-Seite mit "Forecast may be stale — last refresh was X minutes ago."

Das Banner erscheint, wenn die jüngste Prognose mehr als 90 Minuten alt ist. Ursachen:

  • Der Inference-Cron (/api/cron/ai-ops-run-inference) schlägt fehl. Prüfen Sie die Vercel-Cron-Logs.
  • Modal ist nicht erreichbar, und der lokale Fallback-Forecaster läuft bei einem großen Subaccount in einen Timeout.
  • Der Feature-Builder (/api/cron/ai-ops-build-features) produziert keine Zeilen, sodass die Inference nichts zu verarbeiten hat.

Diagnostizieren Sie über die model_runs-Tabelle. Hat model_runs aktuelle Einträge, aber demand_forecasts nicht, läuft die Inference, aber die Schreibvorgänge schlagen fehl — prüfen Sie die DB-Verbindung.

Keine Rebalance-Empfehlungen erscheinen

Symptom: /dashboard/operations/rebalance ist leer.

Reihenfolge prüfen:

  1. Ist ai_ops_tier auf pro oder enterprise? Starter-Stufe erzeugt keine Empfehlungen.
  2. Lief der Empfehlungs-Cron schon? Er läuft zur Minute 25 jeder Stunde. Warten Sie einen Zyklus ab dem Setzen von ai_ops_tier.
  3. Gibt es Kandidatenzellen? Das Empfehlungssystem braucht sowohl eine unterversorgte Zelle (Prognose > Bestand) als auch eine überversorgte Zelle (Bestand > Prognose) im selben Subaccount. Ist Ihre Flotte gut ausbalanciert, werden keine Empfehlungen erzeugt — das ist korrektes Verhalten.
  4. Ist der erwartete Mehrertrag positiv? Jeder Kandidat wird verworfen, wenn (dest_gain - src_loss) * avg_fare - distance * tech_cost_per_mile_usd negativ wird. Ein hoher tech_cost_per_mile_usd kann alle Empfehlungen unterdrücken.

Vermuten Sie, dass die Rechnung zu konservativ ist, senken Sie tech_cost_per_mile_usd testweise auf 0.25 und warten Sie den nächsten Cron-Lauf ab.

Alle Fahrzeuge sprangen unerwartet auf Maintenance

Symptom: Ein Schwung Fahrzeuge in einem Subaccount ging auf den Status maintenance, ohne dass Sie das wollten.

Das ist die Auto-Maintenance-Regel in Aktion — Phase 3 markiert jedes Pickup-Stopp-Fahrzeug als maintenance, wenn ein Techniker eine Route akzeptiert. Es ist gewollt, aber begrenzt:

  • Es passiert nur, wenn ai_ops_tier='enterprise'.
  • Es passiert nur, nachdem ein Techniker auf Accept tippt.
  • Es wird automatisch zurückgesetzt, wenn die Route abgeschlossen oder abgebrochen wird.

Möchten Sie es deaktivieren, stufen Sie den Subaccount auf ai_ops_tier='pro' zurück. Routen werden nicht mehr erzeugt, und die Regel greift nicht.

Um gestrandete Fahrzeuge sofort zurückzuholen, finden Sie die Route in rebalance_routes (Status in_progress) und brechen Sie sie ab. Auto-Maintenance-Fahrzeuge fallen zurück auf available.

Route-Tab des Technikers ist leer

Symptom: Der Techniker öffnet den Route-Tab, aber es wird keine Route gezeigt.

Reihenfolge prüfen:

  1. Ist der Subaccount auf ai_ops_tier='enterprise'? Falls nicht, werden keine Routen erzeugt.
  2. Ist der Techniker im richtigen Subaccount eingeloggt? Der Tab ist subaccount-scoped.
  3. Lief der Routen-Solver-Cron heute schon? Er läuft alle 30 Min zwischen 06:00 und 22:00 Ortszeit. Außerhalb dieser Zeiten werden keine neuen Routen gebaut.
  4. Gibt es überhaupt Stopps zum Routen? Der Solver braucht mindestens ein Fahrzeug mit niedrigem Akku oder eine akzeptierte Empfehlung, um eine Route zu erzeugen. Ist die Flotte gesund und sind keine Empfehlungen akzeptiert, wird keine Route gebaut.
  5. Ist der Techniker der heutigen Schicht zugewiesen? Routen sind technikerspezifisch — nur dieser technician_id zugewiesene Routen sind sichtbar.

Offline-Abschlüsse synchronisieren nie

Symptom: Ein Techniker hat Stopps ohne Verbindung abgeschlossen, ist wieder online, aber die Stopps zeigen weiter "pending sync."

Die operator-app leert die Offline-Queue beim Fokus-Event und alle 60 Sekunden. Schlägt das Sync über mehrere Minuten fehl:

  • Pull-to-refresh am Route-Tab erzwingt einen Sync.
  • App force-close und neu öffnen.
  • Prüfen Sie, dass die Auth-Session des Technikers nicht abgelaufen ist. Bei Bedarf neu einloggen.

Liefert die API 4xx auf complete-stop-Aufrufe, prüfen Sie Sentry zur Routen-ID — üblicher Grund ist, dass die Route inzwischen abgebrochen wurde.

Empfehlungen sehen offensichtlich falsch aus

Symptom: Das Empfehlungssystem schlägt vor, Fahrzeuge in eine Zelle zu verschieben, von der Sie wissen, dass sie unbefahrbar ist (Straßensperre, Genehmigungsstreit usw.).

Das Modell kennt keine Straßensperren oder Genehmigungseinschränkungen. Zwei Wege:

  1. Empfehlung verwerfen. Das Modell lernt aus Dismiss-Mustern — wiederholtes Verwerfen derselben Zielzelle senkt die zukünftige Konfidenz dort.
  2. Parkzonen nutzen. Liegt eine Zelle außerhalb gültiger Parkzonen, akkumuliert sich dort kein Bestand, und das Empfehlungssystem schlägt keine Bewegungen mehr dorthin vor. Achten Sie darauf, dass Ihre Zonengeometrie die aktuelle Betriebsrealität widerspiegelt.

Symptom: Modal-Abrechnungs-Alert hat ausgelöst.

Das nächtliche Retraining über alle Subaccounts sollte bei unserem Volumen ~15-30 $/Monat kosten. Spikes bedeuten meist:

  • Ein Subaccount mit ungewöhnlich großem Feature-Volumen dominiert die Trainingszeit.
  • Modal skaliert mehr Container automatisch hoch als erwartet.

Prüfen Sie die model_runs-Tabelle auf ungewöhnlich lange duration_ms-Zeilen. Begrenzen oder sharden Sie den betroffenen Subaccount im Trainingsskript.

Wo Sie Hilfe bekommen

  • Sentry — die meisten AI-Ops-Fehler sind mit ai-ops getaggt. Nach diesem Tag filtern.
  • Vercel-Cron-Logs — Ausführungsstatus aller fünf AI-Ops-Crons prüfen.
  • model_runs-Tabelle — Audit-Zeile pro Inference-Aufruf, mit MAPE, RMSE, Dauer.
  • Support — schreiben Sie an support@levyelectric.com.