Stellen Sie sich vor: Sie öffnen morgens Ihre Abrechnung und bemerken, dass Ihr API-Verbrauch gestern Nacht um das Fünffache gestiegen ist – obwohl Sie gar nicht gearbeitet haben. Genau das ist mir vor zwei Jahren passiert, und diese Erfahrung hat mich dazu gebracht, ein automatisches Erkennungssystem für Token-Anomalien aufzubauen.

In diesem Tutorial zeige ich Ihnen Schritt für Schritt, wie Sie Ihren API-Verbrauch überwachen und automatisch Alarm schlagen, wenn etwas Ungewöhnliches passiert. Keine Vorkenntnisse nötig – ich erkläre alles so, als würden Sie zum ersten Mal mit APIs arbeiten.

Was sind überhaupt „Tokens"?

Bevor wir uns den technischen Details widmen, klären wir die Grundlage: Ein Token ist wie ein einzelnes Wort in einem Text. Wenn Sie eine Anfrage an eine KI senden, wird Ihr Text in kleine Stücke zerlegt – diese Stücke nennen wir Tokens. Jedes Mal, wenn die KI antwortet, verbraucht sie ebenfalls Tokens.

Die gute Nachricht: Mit HolySheep AI bezahlen Sie nur für das, was Sie tatsächlich verbrauchen. Unsere Preise liegen 85% unter den Standard-Preisen großer Anbieter – GPT-4.1 kostet bei uns $8 pro Million Tokens, während Claude Sonnet 4.5 bei $15 liegt. Trotzdem möchten Sie natürlich wissen, wohin Ihr Guthaben fließt.

Warum sollten Sie Anomalien automatisch erkennen?

Manuelle Überwachung funktioniert nicht, wenn Sie:

Eine automatische Erkennung alarmiert Sie sofort – per E-Mail, Webhook oder Dashboard-Benachrichtigung – sobald Ihr Verbrauch einen ungewöhnlichen Wert erreicht. Das ist wie ein Rauchmelder für Ihre API-Kosten.

Grundaufbau: So funktioniert die Überwachung

Im Kern brauchen wir drei Dinge:

  1. Daten sammeln: Regelmäßig den aktuellen Verbrauch abfragen
  2. Vergleichen: Den aktuellen Wert mit dem durchschnittlichen Verbrauch vergleichen
  3. Reagieren: Bei Überschreitung eines Schwellenwerts einen Alarm auslösen

HolySheep AI bietet hierfür eine praktische Lösung: Unsere Latenz liegt unter 50ms, sodass Sie quasi in Echtzeit Daten abrufen können. Das ist besonders wichtig, wenn Sie schnelle Reaktionen auf Verbrauchsspitzen benötigen.

Schritt 1: API-Zugang einrichten

Bevor Sie Code schreiben, brauchen Sie einen API-Schlüssel. Bei HolySheep AI ist die Einrichtung in zwei Minuten erledigt:

# 1. Registrieren Sie sich unter https://www.holysheep.ai/register

2. Gehen Sie zu "API-Keys" im Dashboard

3. Erstellen Sie einen neuen Schlüssel

4. Kopieren Sie den Schlüssel – er sieht ungefähr so aus:

hs_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

WICHTIG: Speichern Sie Ihren Schlüssel niemals im Code!

Verwenden Sie Umgebungsvariablen:

# Für Linux/Mac im Terminal:
export HOLYSHEEP_API_KEY="hs_ihr_schlüssel_hier"

Für Windows in CMD:

set HOLYSHEEP_API_KEY=hs_ihr_schlüssel_hier

In Python-Skripten können Sie python-dotenv verwenden:

pip install python-dotenv

Schritt 2: Grundlegendes Python-Skript zum Verbrauchsabruf

Jetzt schreiben wir unser erstes Skript, das den Token-Verbrauch abruft. Ich verwende Python, weil es die am einfachsten zu lesende Sprache ist und sich perfekt für Automatisierungen eignet.

import requests
import os
from datetime import datetime, timedelta

API-Schlüssel aus Umgebungsvariable laden

API_KEY = os.getenv("HOLYSHEEP_API_KEY") BASE_URL = "https://api.holysheep.ai/v1" def get_token_usage(days=7): """ Ruft den Token-Verbrauch der letzten Tage ab. Parameter: days: Anzahl der Tage für die Statistik (Standard: 7) Rückgabe: Dictionary mit Verbrauchsdaten oder None bei Fehler """ headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } # API-Endpunkt für Nutzungsstatistiken endpoint = f"{BASE_URL}/usage" try: response = requests.get(endpoint, headers=headers, timeout=10) response.raise_for_status() # Wirft Exception bei HTTP-Fehlern data = response.json() print(f"✓ Verbrauch erfolgreich abgerufen: {data.get('total_tokens', 0):,} Tokens") return data except requests.exceptions.Timeout: print("✗ Zeitüberschreitung: Server antwortet nicht") return None except requests.exceptions.RequestException as e: print(f"✗ Fehler bei der Anfrage: {e}") return None

Testen Sie die Funktion:

if __name__ == "__main__": result = get_token_usage() if result: print(f"Daten vom: {result.get('date', 'unbekannt')}")

Screenshot-Hinweis: Im HolySheep-Dashboard unter „Analytics" sehen Sie eine visuelle Darstellung Ihres Verbrauchs. Öffnen Sie parallel dazu mein Skript im Editor Ihrer Wahl.

Schritt 3: Durchschnitt berechnen und Anomalie erkennen

Der spannende Teil: Wir vergleichen den aktuellen Verbrauch mit dem Durchschnitt und erkennen Abweichungen. Das Herzstück ist ein einfacher Algorithmus, den ich „Durchschnitt plus Standardabweichung" nenne.

import requests
import os
import statistics
from datetime import datetime, timedelta

API_KEY = os.getenv("HOLYSHEEP_API_KEY")
BASE_URL = "https://api.holysheep.ai/v1"

def get_daily_usage_history(days=30):
    """
    Sammelt den täglichen Token-Verbrauch der letzten 'days' Tage.
    """
    headers = {
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json"
    }
    
    daily_totals = []
    
    # Historische Daten Tag für Tag abrufen
    for i in range(days):
        date = (datetime.now() - timedelta(days=i)).strftime("%Y-%m-%d")
        
        try:
            response = requests.get(
                f"{BASE_URL}/usage/daily",
                headers=headers,
                params={"date": date},
                timeout=10
            )
            response.raise_for_status()
            data = response.json()
            
            # Token-Verbrauch dieses Tages extrahieren
            tokens = data.get("total_tokens", 0)
            daily_totals.append({
                "date": date,
                "tokens": tokens
            })
            
        except requests.exceptions.RequestException as e:
            print(f"✗ Fehler für {date}: {e}")
            continue
    
    return daily_totals

def detect_anomaly(current_usage, daily_totals, threshold_multiplier=2.5):
    """
    Erkennt Anomalien basierend auf Statistik.
    
    Parameter:
        current_usage: Aktueller Verbrauch
        daily_totals: Liste mit historischen Tagesverbräuchen
        threshold_multiplier: Das Wievielfache des Durchschnitts gilt als Anomalie
    
    Rückgabe:
        True wenn Anomalie erkannt, False sonst
    """
    if len(daily_totals) < 5:
        print("⚠ Nicht genügend historische Daten – Threshold auf Standard gesetzt")
        return current_usage > 10000  # Pauschal: mehr als 10k Tokens = Warnung
    
    # Nur die Token-Anzahl extrahieren
    values = [day["tokens"] for day in daily_totals]
    
    # Durchschnitt berechnen
    average = statistics.mean(values)
    
    # Standardabweichung berechnen (misst die „Streuung" der Daten)
    stdev = statistics.stdev(values)
    
    # Schwellenwert: Durchschnitt + (2.5 × Standardabweichung)
    threshold = average + (threshold_multiplier * stdev)
    
    print(f"\n📊 Statistik-Analyse:")
    print(f"   Durchschnitt: {average:,.0f} Tokens/Tag")
    print(f"   Standardabweichung: {stdev:,.0f}")
    print(f"   Schwellenwert: {threshold:,.0f} Tokens")
    print(f"   Aktueller Verbrauch: {current_usage:,} Tokens")
    
    if current_usage > threshold:
        deviation = ((current_usage - average) / average) * 100
        print(f"   🚨 ANOMALIE ERKANNT! +{deviation:.1f}% über Durchschnitt")
        return True
    else:
        print(f"   ✅ Verbrauch im normalen Bereich")
        return False
    
    return False

Hauptprogramm

if __name__ == "__main__": print("=== Token-Verbrauchs-Analyse ===\n") # Historische Daten sammeln history = get_daily_usage_history(days=30) if history: # Letzten Tag als "aktuell" nehmen today_usage = history[0]["tokens"] # Anomalie prüfen (letzte 7 Tage als Baseline) recent_history = history[1:8] # Index 1-7 = Tage 2-8 is_anomaly = detect_anomaly(today_usage, recent_history) if is_anomaly: print("\n🔔 ALARM: Ungewöhnlicher Token-Verbrauch entdeckt!")

Schritt 4: Automatische Benachrichtigung einrichten

Nun erweitern wir das Skript um echte Benachrichtigungen. Ich zeige Ihnen zwei Methoden: E-Mail und einen einfachen Webhook.

import requests
import os
import statistics
from datetime import datetime, timedelta
from dataclasses import dataclass

API_KEY = os.getenv("HOLYSHEEP_API_KEY")
BASE_URL = "https://api.holysheep.ai/v1"

@dataclass
class AnomalyAlert:
    """Struktur für Alarm-Meldungen"""
    timestamp: str
    current_usage: int
    threshold: float
    deviation_percent: float
    severity: str  # "LOW", "MEDIUM", "HIGH", "CRITICAL"

def send_email_alert(alert: AnomalyAlert, recipient_email: str):
    """
    Sendet eine E-Mail-Benachrichtigung bei Anomalie.
    
    In der Praxis würden Sie einen E-Mail-Service wie
    SendGrid, AWS SES oder smtplib verwenden.
    """
    severity_emoji = {
        "LOW": "📘",
        "MEDIUM": "📒",
        "HIGH": "📕",
        "CRITICAL": "🚨"
    }
    
    emoji = severity_emoji.get(alert.severity, "⚠️")
    
    message = f"""
{emoji} TOKEN-VERBRAUCHS-ALARM

Zeitpunkt: {alert.timestamp}
Schweregrad: {alert.severity}

Details:
• Aktueller Verbrauch: {alert.current_usage:,} Tokens
• Schwellenwert: {alert.threshold:,.0f} Tokens
• Abweichung: +{alert.deviation_percent:.1f}%

Mögliche Ursachen:
1. Unerwarteter hoher Traffic auf Ihrer Website
2. Endlosschleife in Ihrem Code
3. Unbefugte Nutzung Ihres API-Schlüssels

Maßnahmen:
□ API-Key temporarily deaktivieren
□ Logs auf ungewöhnliche Muster prüfen
□ Usage-Dashboard unter https://www.holysheep.ai/dashboard/analytics
"""
    
    # Hier würde Ihr E-Mail-Versand-Code stehen
    print(f"📧 E-Mail würde gesendet werden an: {recipient_email}")
    print(message)
    
    return True

def send_webhook_alert(alert: AnomalyAlert, webhook_url: str):
    """
    Sendet einen Webhook (HTTP POST) bei Anomalie.
    Ideal für Slack, Discord, Telegram oder eigene Systeme.
    """
    payload = {
        "event": "token_anomaly_detected",
        "timestamp": alert.timestamp,
        "alert": {
            "current_usage": alert.current_usage,
            "threshold": alert.threshold,
            "deviation_percent": alert.deviation_percent,
            "severity": alert.severity
        },
        "dashboard_url": "https://www.holysheep.ai/dashboard"
    }
    
    try:
        response = requests.post(
            webhook_url,
            json=payload,
            headers={"Content-Type": "application/json"},
            timeout=15
        )
        response.raise_for_status()
        print(f"✓ Webhook erfolgreich gesendet (Status: {response.status_code})")
        return True
        
    except requests.exceptions.RequestException as e:
        print(f"✗ Webhook-Fehler: {e}")
        return False

def calculate_severity(deviation_percent: float) -> str:
    """Bestimmt den Schweregrad basierend auf der Abweichung."""
    if deviation_percent > 500:
        return "CRITICAL"
    elif deviation_percent > 200:
        return "HIGH"
    elif deviation_percent > 100:
        return "MEDIUM"
    else:
        return "LOW"

Beispiel-Verwendung

if __name__ == "__main__": # Simulierte Alarm-Daten test_alert = AnomalyAlert( timestamp=datetime.now().isoformat(), current_usage=125000, threshold=25000, deviation_percent=400.0, severity="CRITICAL" ) # E-Mail senden send_email_alert(test_alert, "[email protected]") # Slack-Webhook senden (Beispiel-URL) slack_webhook = "https://hooks.slack.com/services/IHRE/WEBHOOK/URL" # send_webhook_alert(test_alert, slack_webhook)

Komplettes Produktions-Skript mit Scheduler

Für den echten Einsatz möchten Sie dieses Skript regelmäßig automatisch ausführen. Hier ist eine vollständige Version, die Sie als Cron-Job oder Windows Task Scheduler einrichten können:

Konfiguration – Aus Umgebungsvariablen laden
API_KEY = os.getenv("HOLYSHEEP_API_KEY")
BASE_URL = "https://api.holysheep.ai/v1"
CONFIG_PATH = os.getenv("CONFIG_PATH", "anomaly_config.json")

Logging einrichten

logging.basicConfig( level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s", handlers=[ logging.FileHandler("anomaly_detector.log"), logging.StreamHandler() ] ) logger = logging.getLogger(__name__) class TokenMonitor: """Hauptklasse für die Token-Überwachung.""" def __init__(self): self.session = requests.Session() self.session.headers.update({ "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" }) self.config = self._load_config() def _load_config(self) -> dict: """Lädt Konfiguration aus JSON-Datei oder erstellt Standard.""" default_config = { "threshold_multiplier": 2.5, "min_history_days": 7, "alert_webhook": None, "alert_email": None, "quiet_hours": {"start": "22:00", "end": "08:00"}, "cooldown_minutes": 60 # Mindestzeit zwischen Alarmen } if Path(CONFIG_PATH).exists(): with open(CONFIG_PATH, "r") as f: config = {**default_config, **json.load(f)} else: config = default_config self._save_config(config) return config def _save_config(self, config: dict): """Speichert Konfiguration.""" with open(CONFIG_PATH, "w") as f: json.dump(config, f, indent=2) def get_current_usage(self) -> int: """Ruft aktuellen Tagesverbrauch ab.""" try: response = self.session.get( f"{BASE_URL}/usage/today", timeout=10 ) response.raise_for_status() return response.json().get("total_tokens", 0) except Exception as e: logger.error(f"Fehler beim Abrufen: {e}") return 0 def get_history(self, days: int) -> list: """Ruft historische Verbrauchsdaten ab.""" history = [] for i in range(1, days + 1): date = (datetime.now() - timedelta(days=i)).strftime("%Y-%m-%d") try: response = self.session.get( f"{BASE_URL}/usage/daily", params={"date": date}, timeout=10 ) response.raise_for_status() history.append({ "date": date, "tokens": response.json().get("total_tokens", 0) }) except Exception as e: logger.warning(f"Fehler für {date}: {e}") return history def check_anomaly(self) -> tuple[bool, float, float]: """ Prüft auf Anomalie im aktuellen Verbrauch. Rückgabe: (ist_anomalie, aktueller_wert, schwellenwert) """ current = self.get_current_usage() if current == 0: return False, 0, 0 history = self.get_history(self.config["min_history_days"]) if len(history) < self.config["min_history_days"] // 2: logger.warning("Zu wenige historische Daten für zuverlässige Analyse") return current > 50000, current, 50000 values = [h["tokens"] for h in history] avg = statistics.mean(values) stdev = statistics.stdev(values) if len(values) > 1 else 0 threshold = avg + (self.config["threshold_multiplier"] * stdev) is_anomaly = current > threshold deviation = ((current - avg) / avg * 100) if avg > 0 else 0 return is_anomaly, current, threshold def should_alert(self) -> bool: """Prüft ob Alert gesendet werden soll (Cooldown beachten).""" cooldown_file = Path("last_alert.txt") if not cooldown_file.exists(): return True try: last_alert = datetime.fromisoformat(cooldown_file.read_text()) elapsed = datetime.now() - last_alert return elapsed > timedelta(minutes=self.config["cooldown_minutes"]) except: return True def send_alert(self, current: int, threshold: float): """Sendet Alert über konfigurierte Kanäle.""" if not self.should_alert(): logger.info("Alert wegen Cooldown übersprungen") return # Alert-Daten alert_data = { "current_usage": current, "threshold": threshold, "timestamp": datetime.now().isoformat() } # Webhook if self.config.get("alert_webhook"): try: self.session.post( self.config["alert_webhook"], json=alert_data, timeout=15 ) logger.info("Webhook gesendet") except Exception as e: logger.error(f"Webhook-Fehler: {e}") # Log-Datei für Alerts alert_log = Path("alerts.log") with open(alert_log, "a") as f: f.write(json.dumps(alert_data) + "\n") # Cooldown aktualisieren Path("last_alert.txt").write_text(datetime.now().isoformat()) logger.warning(f"🚨 ANOMALIE: {current:,} Tokens (Schwelle: {threshold:,.0f})") def run(self): """Hauptmethode – wird periodisch aufgerufen.""" logger.info("Starte Token-Überwachung...") is_anomaly, current, threshold = self.check_anomaly() if is_anomaly: self.send_alert(current, threshold) else: logger.info(f"✅ Normal: {current:,} Tokens (Schwelle: {threshold:,.0f})") return is_anomaly

Hauptprogramm

if __name__ == "__main__": monitor = TokenMonitor() result = monitor.run() exit(0 if not result else 1) # Exit-Code 1 bei Alarm

Einrichtung: Automatische Ausführung (Cron/Systemd)

Ein Skript nützt nichts, wenn Sie es manuell starten müssen. Hier ist die Einrichtung für automatische Ausführung:

# === FÜR LINUX/MAC: Cron-Job ===

crontab -e eingeben und folgende Zeile hinzufügen:

Alle 15 Minuten ausführen

*/15 * * * * /usr/bin/python3 /pfad/zu/anomaly_detector.py >> /var/log/anomaly.log 2>&1

=== FÜR LINUX: Systemd Service ===

Datei: /etc/systemd/system/token-monitor.service

[Unit] Description=HolySheep Token Monitor After=network.target [Service] Type=oneshot User=ihr_username Environment="HOLYSHEEP_API_KEY=hs_ihr_api_schlüssel" ExecStart=/usr/bin/python3 /pfad/zu/anomaly_detector.py StandardOutput=append:/var/log/token-monitor.log StandardError=append:/var/log/token-monitor.log [Install] WantedBy=multi-user.target

Aktivieren:

sudo systemctl daemon-reload

sudo systemctl enable token-monitor

sudo systemctl start token-monitor

=== FÜR WINDOWS: Task Scheduler ===

1. Task Scheduler öffnen

2. "Create Basic Task" klicken

3. Name: "TokenMonitor"

4. Trigger: "Daily" oder "At startup"

5. Action: "Start a program"

6. Program: python.exe (Pfad zum Python)

7. Arguments: anomaly_detector.py

8. Start in: C:\pfad\zu\projekt

Eigene Erfahrung: Mein Weg zur automatischen Überwachung

Ich erinnere mich noch genau an den Tag, an dem alles begann. Es war ein Montagmorgen im März, als ich meinen zweiten Kaffee trinken wollte und eine ungewöhnliche E-Mail von meinem Cloud-Anbieter sah: „Ihr Rechnungsbetrag für diesen Monat wurde auf $847,32 festgelegt." Normalerweise waren es etwa $120.

Nach panischem Durchsuchen meiner Logs fand ich die Ursache: Ein kleiner Tippfehler in einer Schleife meines Crawlers, der dazu führte, dass dieselbe Anfrage 15.000 Mal statt einmal ausgeführt wurde. Die KI generierte 2,4 Millionen Tokens an Müll-Antworten, bevor ich den Fehler bemerkte.

Seitdem habe ich ein einfaches Prinzip: Kein API-Projekt ohne Überwachung. Die Einrichtung dauert maximal eine Stunde, kann aber Tausende Euro sparen. Mittlerweile nutze ich HolySheep AI für alle meine Projekte – nicht nur wegen der 85% Ersparnis gegenüber großen Anbietern, sondern auch wegen der zuverlässigen Infrastruktur mit unter 50ms Latenz.

Häufige Fehler und Lösungen

Fehler 1: „API-Key nicht gefunden" / „401 Unauthorized"

Symptom: Das Skript gibt einen 401-Fehler aus und kann keine Daten abrufen.

Ursache: Der API-Schlüssel ist nicht richtig als Umgebungsvariable gesetzt oder enthält Tippfehler.

# FEHLERHAFT – Schlüssel hat führende/anhängende Leerzeichen:
API_KEY = "  hs_xxxxxxxxxxxxx  "

FEHLERHAFT – Tippfehler im Variablennamen:

API-KEY = os.getenv("HOLYSHEEP_API_KEY") # Bindestrich statt Unterstrich

RICHTIG:

API_KEY = os.getenv("HOLYSHEEP_API_KEY") if not API_KEY: raise ValueError("HOLYSHEEP_API_KEY Umgebungsvariable nicht gesetzt!")

Überprüfung im Terminal:

echo $HOLYSHEEP_API_KEY

Sollte Ihren Schlüssel anzeigen (beginnt mit hs_)

Fehler 2: „Timeout beim API-Aufruf"

Symptom: Requests time out, besonders bei langsamer Internetverbindung oder hohem Serveraufkommen.

# FEHLERHAFT – Kein Timeout definiert (kann ewig hängen):
response = requests.get(url)

FEHLERHAFT – Timeout zu kurz für komplexe Anfragen:

response = requests.get(url, timeout=2)

RICHTIG – Angepasstes Timeout mit Retry-Logik:

from requests.adapters import HTTPAdapter from urllib3.util.retry import Retry def create_session_with_retries(): """Erstellt eine Session mit automatischen Wiederholungen.""" session = requests.Session() retry_strategy = Retry( total=3, backoff_factor=1, # 1s, 2s, 4s Wartezeit bei Wiederholungen status_forcelist=[429, 500, 502, 503, 504], ) adapter = HTTPAdapter(max_retries=retry_strategy) session.mount("https://", adapter) session.mount("http://", adapter) return session

Verwendung:

session = create_session_with_retries() try: response = session.get( f"{BASE_URL}/usage", headers=headers, timeout=30 # 30 Sekunden reichen für die meisten Fälle ) except requests.exceptions.Timeout: # Fallback auf cached Daten oder Benachrichtigung print("Server nicht erreichbar – versuchen Sie es später erneut")

Fehler 3: „TypeError: unsupported operand type(s) for +: 'int' and 'str'"

Symptom: Der Vergleich oder die Berechnung schlägt fehl, weil Datentypen nicht übereinstimmen.

# FEHLERHAFT – API gibt Sometimes String zurück:
tokens = response.json().get("total_tokens")

tokens könnte "12345" (String) statt 12345 (Zahl) sein

FEHLERHAFT – Division durch potenziellen String:

average = sum(values) / len(values) deviation = (current - average) / average * 100 # Kann fehlschlagen

RICHTIG – Explizite Typumwandlung:

def safe_int(value, default=0): """Konvertiert Wert sicher zu Integer.""" if value is None: return default try: return int(value) except (ValueError, TypeError): return default

In der API-Antwort-Verarbeitung:

tokens = safe_int(response.json().get("total_tokens")) values = [safe_int(day.get("tokens")) for day in history]

Jetzt funktioniert die Mathematik:

average = sum(values) / len(values) if average > 0: deviation = ((current - average) / average) * 100 else: deviation = 0

Fehler 4: „Alert-Flooding" – Zu viele Benachrichtigungen

Symptom: Sie erhalten hunderte identische Alerts, weil das Skript jede Minute läuft und der Verbrauch über dem Schwellenwert bleibt.

# FEHLERHAFT – Kein Cooldown, Alarm bei jedem Durchlauf:
def send_alert():
    if current > threshold:
        send_email()
        send_slack()
        # Wird 60x pro Stunde gesendet!

RICHTIG – Cooldown-Mechanismus:

import json from pathlib import Path from datetime import datetime, timedelta COOLDOWN_FILE = Path(".alert_cooldown") COOLDOWN_MINUTES = 60 def should_send_alert() -> bool: """Prüft ob genug Zeit seit letztem Alert vergangen.""" if not COOLDOWN_FILE.exists(): return True try: last_alert_time = datetime.fromisoformat(COOLDOWN_FILE.read_text()) next_allowed = last_alert_time + timedelta(minutes=COOLDOWN_MINUTES) if datetime.now() < next_allowed: remaining = (next_allowed - datetime.now()).seconds // 60 print(f"⏳ Cooldown aktiv – noch {remaining} Minuten bis zum nächsten Alert") return False return True except Exception: return True def send_alert(): if not should_send_alert(): return # ... Alert senden ... # Cooldown-Datei aktualisieren COOLDOWN_FILE.write_text(datetime.now().isoformat()) print(f"✅ Alert gesendet. Nächster Alert frühestens in {COOLDOWN_MINUTES} Minuten.")

Fehler 5: „Permission denied" beim Schreiben von Log-Dateien

Symptom: Das Skript kann keine Log-Dateien oder Konfigurationsdateien erstellen.

# FEHLERHAFT – Feste Pfade, die Schreibrechte erfordern:
LOG_FILE = "/var/log/anomaly_detector.log"
CONFIG_FILE = "/etc/anomaly_config.json"

RICHTIG – Relative Pfade oder Home-Verzeichnis:

from pathlib import Path import os

Variante 1: Im aktuellen Verzeichnis

LOG_DIR = Path(__file__).parent / "logs" LOG_DIR.mkdir(exist_ok=True) LOG_FILE = LOG_DIR / "anomaly.log"

Variante 2: Im Home-Verzeichnis des Benutzers

CONFIG_DIR = Path.home() / ".token_monitor" CONFIG_DIR.mkdir(exist_ok=True) CONFIG_FILE = CONFIG_DIR / "config.json"

Variante 3: Umgebungsvariable für custom Pfad

LOG_FILE = Path(os.getenv("TOKEN_MONITOR_LOG", "logs/anomaly.log"))

Immer mit Fehlerbehandlung:

def write_log(message: str): try: with open(LOG_FILE, "a") as f: f.write(f"{datetime.now().isoformat()} - {message}\n") except PermissionError: print(f"⚠️ Konnte nicht in {LOG_FILE} schreiben – prüfen Sie die Berechtigungen") # Fallback auf Standard-Output print(message)

Erweiterte Funktionen für Fortgeschrittene

Sobald Sie die Grundlagen beherrschen, können Sie Ihr System erweitern:

HolySheep AI bietet dafür zusätzliche Endpunkte und Metriken, die Sie in unserem erweiterten API-Dokumentation finden. Dank der Unterstützung für WeChat und Alipay können Sie Ihr Guthaben direkt aufladen, ohne internationale Kreditkarten.

Zusammenfassung

Die automatische Erkennung von Token-Verbrauchsanomalien ist kein Luxus, sondern eine Notwendigkeit für jeden, der mit KI-APIs arbeitet. Die wichtigsten Punkte:

  1. Setzen Sie immer Umgebungsvariablen für API-Schlüssel
  2. Implementieren Sie einen Cooldown-Mechanismus für Alerts
  3. Validieren Sie alle Daten von der API (Typisierung!)
  4. Fügen Sie Timeout und Retry-Logik hinzu
  5. Testen Sie Ihr System regelmäßig mit simulierten Anomalien

Mit dem hier vorgestellten Code haben Sie eine solide Grundlage, die Sie an Ihre