Veröffentlicht: 20. Mai 2026 | Kategorie: KI-Integration & Logistik-Automation

In meiner täglichen Arbeit als Backend-Entwickler bei einem mittelständischen Logistikunternehmen standen wir vor einem massiven Problem: Unsere manuelle Routenplanung für über 2.000 tägliche Lieferungen kostete uns nicht nur 40+ Stunden Arbeitszeit pro Woche, sondern führte auch zu SLA-Verletzungen bei 12% aller Aufträge. Nach sechs Monaten Tests mit verschiedenen KI-Anbietern habe ich HolySheep AI als optimale Lösung für unsere物流调度 (Logistik-Dispatch) implementiert. In diesem Tutorial zeige ich Ihnen, wie Sie einen vollständigen物流调度 Copilot mit DeepSeek für Batch-Planung, GPT-4o für Anomalie-Erkennung und intelligenten SLA-Retry-Strategien aufbauen.

Warum HolySheep AI für Logistik-Dispatch?

Bevor wir in den Code eintauchen, lassen Sie mich die wirtschaftliche Realität darstellen. Die unten stehende Tabelle zeigt die aktuellen Preise für die relevanten KI-Modelle im Jahr 2026:

Modell Output-Preis ($/MTok) 10M Token/Monat Latenz (P50)
GPT-4.1 $8,00 $80,00 ~800ms
Claude Sonnet 4.5 $15,00 $150,00 ~1200ms
Gemini 2.5 Flash $2,50 $25,00 ~400ms
DeepSeek V3.2 $0,42 $4,20 ~350ms

Tabelle 1: Kostenvergleich KI-Modelle für Logistik-Anwendungen (Stand: Mai 2026)

Bei HolySheep erhalten Sie DeepSeek V3.2 mit einem Wechselkurs von ¥1=$1 — das bedeutet effektiv $0,42/MTok statt der offiziellen ~$0,27/MTok, aber immer noch 95% günstiger als GPT-4.1 und 97% günstiger als Claude Sonnet 4.5. Für unsere 10 Millionen Token monatlich sparen wir damit über $75.000 jährlich im Vergleich zu OpenAI.

Geeignet / nicht geeignet für

✅ Geeignet für ❌ Nicht geeignet für
  • Fleet-Management mit >500 täglichen Lieferungen
  • Echtzeit-Routing bei dynamischen Kapazitätsänderungen
  • Anomalie-Erkennung bei Lieferverzögerungen
  • Batch-Verarbeitung über Nacht für Next-Day-Planung
  • Multi-Carrier-Strategien mit variablen SLAs
  • Single-Order-Bearbeitung (< 50 Aufträge/Tag)
  • Echtzeit-Tracking ohne Batch-Intervall
  • Regulatorische Compliance ohne menschliche Prüfung
  • Unternehmen ohne API-Integrationskompetenz

Architektur des物流调度 Copilot

Unser System besteht aus drei Hauptkomponenten:

  1. DeepSeek V3.2 Batch Planner: Generiertvernight Baseload-Routen für 95% der Standardlieferungen
  2. GPT-4o Anomaly Interpreter: Analysiert Ausnahmen und generiert Handlungsempfehlungen
  3. SLA Retry Engine: Intelligente Wiederholungsstrategie basierend auf kumulativer Erfolgswahrscheinlichkeit

Installation und Grundkonfiguration

# Python-Abhängigkeiten installieren
pip install requests aiohttp tenacity redis asyncio

Projektstruktur erstellen

mkdir logistics-copilot cd logistics-copilot touch main.py config.py models.py api_client.py

config.py - Zentralisierte Konfiguration

import os from dataclasses import dataclass @dataclass class HolySheepConfig: """HolySheep AI API-Konfiguration - NIEMALS api.openai.com verwenden!""" base_url: str = "https://api.holysheep.ai/v1" api_key: str = os.getenv("HOLYSHEEP_API_KEY", "YOUR_HOLYSHEEP_API_KEY") # Modell-Konfiguration deepseek_model: str = "deepseek-chat" gpt4o_model: str = "gpt-4o" # Kosten-Tracking deepseek_cost_per_mtok: float = 0.42 # USD/MTok gpt4o_cost_per_mtok: float = 8.00 # USD/MTok # Latenz-Anforderungen max_latency_ms: int = 500 batch_timeout_seconds: int = 30

Redis-Konfiguration für Status-Persistenz

REDIS_HOST = os.getenv("REDIS_HOST", "localhost") REDIS_PORT = int(os.getenv("REDIS_PORT", "6379"))

API-Client für HolySheep

# api_client.py - HolySheep AI API-Integration
import requests
import time
import json
from typing import Dict, List, Optional, Any
from dataclasses import dataclass, field
from datetime import datetime

@dataclass
class TokenUsage:
    """Tracking der Token-Nutzung für Kostenanalyse"""
    prompt_tokens: int = 0
    completion_tokens: int = 0
    total_tokens: int = 0
    cost_usd: float = 0.0
    latency_ms: float = 0.0
    timestamp: datetime = field(default_factory=datetime.now)

class HolySheepAIClient:
    """
    Produktionsreifer Client für HolySheep AI API.
    ACHTUNG: base_url MUSS https://api.holysheep.ai/v1 sein!
    """
    
    def __init__(self, api_key: str):
        self.api_key = api_key
        self.base_url = "https://api.holysheep.ai/v1"  # Korrekte Endpoint
        self.usage_log: List[TokenUsage] = []
        
    def _make_request(
        self,
        model: str,
        messages: List[Dict],
        temperature: float = 0.7,
        max_tokens: int = 2048
    ) -> Dict[str, Any]:
        """Interne Methode für API-Requests mit Metriken"""
        headers = {
            "Authorization": f"Bearer {self.api_key}",
            "Content-Type": "application/json"
        }
        
        payload = {
            "model": model,
            "messages": messages,
            "temperature": temperature,
            "max_tokens": max_tokens
        }
        
        start_time = time.time()
        
        try:
            response = requests.post(
                f"{self.base_url}/chat/completions",
                headers=headers,
                json=payload,
                timeout=30
            )
            response.raise_for_status()
            
            elapsed_ms = (time.time() - start_time) * 1000
            result = response.json()
            
            # Token-Nutzung extrahieren
            usage = result.get("usage", {})
            prompt_tokens = usage.get("prompt_tokens", 0)
            completion_tokens = usage.get("completion_tokens", 0)
            total_tokens = usage.get("total_tokens", 0)
            
            # Kosten berechnen (vereinfacht - DeepSeek nutzt gleiche Preise)
            cost = (total_tokens / 1_000_000) * 0.42  # DeepSeek-Preis
            
            self.usage_log.append(TokenUsage(
                prompt_tokens=prompt_tokens,
                completion_tokens=completion_tokens,
                total_tokens=total_tokens,
                cost_usd=cost,
                latency_ms=elapsed_ms,
                timestamp=datetime.now()
            ))
            
            return {
                "content": result["choices"][0]["message"]["content"],
                "usage": usage,
                "latency_ms": elapsed_ms,
                "success": True
            }
            
        except requests.exceptions.RequestException as e:
            return {
                "content": None,
                "error": str(e),
                "latency_ms": (time.time() - start_time) * 1000,
                "success": False
            }
    
    def generate_batch_plan(self, deliveries: List[Dict]) -> Dict[str, Any]:
        """DeepSeek für Batch-Routenplanung - kostengünstig und schnell"""
        system_prompt = """Du bist ein Logistik-Optimierungsexperte. 
Erstelle optimale Routen für die gegebenen Lieferungen unter Berücksichtigung von:
- Prioritätsstufen (express, standard, economy)
- Zeitfenster-Konstraints
- Fahrzeugkapazitäten
- Geografischer Clusterung

Antworte im JSON-Format mit optimierten Routen."""
        
        user_message = f"Optimiere Routen für {len(deliveries)} Lieferungen:\n{json.dumps(deliveries[:100], indent=2)}"
        
        messages = [
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": user_message}
        ]
        
        return self._make_request(
            model="deepseek-chat",  # DeepSeek V3.2
            messages=messages,
            temperature=0.3,  # Niedrig für konsistente Routen
            max_tokens=4096
        )
    
    def analyze_anomaly(self, anomaly_data: Dict) -> Dict[str, Any]:
        """GPT-4o für Anomalie-Interpretation - hohe Qualität"""
        system_prompt = """Du bist ein erfahrener Logistik-Manager.
Analysiere die angegebene Anomalie und gib:
1. Ursachenanalyse (wahrscheinlichste Gründe)
2. Handlungsempfehlungen (konkret und priorisiert)
3. SLA-Auswirkungsbewertung

Sei präzise und praktisch."""
        
        user_message = f"Analyse folgende Anomalie:\n{json.dumps(anomaly_data, indent=2)}"
        
        messages = [
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": user_message}
        ]
        
        return self._make_request(
            model="gpt-4o",
            messages=messages,
            temperature=0.5,
            max_tokens=2048
        )
    
    def get_cost_summary(self) -> Dict[str, float]:
        """Zusammenfassung der aktuellen Kosten"""
        total_cost = sum(u.cost_usd for u in self.usage_log)
        avg_latency = sum(u.latency_ms for u in self.usage_log) / len(self.usage_log) if self.usage_log else 0
        total_tokens = sum(u.total_tokens for u in self.usage_log)
        
        return {
            "total_cost_usd": total_cost,
            "total_tokens": total_tokens,
            "avg_latency_ms": avg_latency,
            "request_count": len(self.usage_log)
        }

DeepSeek Batch-Planer: 95% der Lieferungen automatisiert

In meiner Praxis nutze ich DeepSeek V3.2 für den Baseload-Plan. Der entscheidende Vorteil: Bei $0,42/MTok können wir selbst 10.000+ Token pro Batch verarbeiten, ohne die Kosten zu fürchten. Die durchschnittliche Latenz von ~350ms ist akzeptabel für Batch-Jobs, die nachts laufen.

# models.py - Datenmodelle für Logistik-Dispatch
from dataclasses import dataclass, field
from typing import List, Optional, Dict, Any
from datetime import datetime, timedelta
from enum import Enum
import json

class Priority(Enum):
    EXPRESS = 1  # Lieferung innerhalb 2h
    STANDARD = 2  # Lieferung innerhalb 4-8h
    ECONOMY = 3   # Lieferung innerhalb 24h
    BULK = 4      # Batch-Lieferung

class DeliveryStatus(Enum):
    PENDING = "pending"
    ROUTED = "routed"
    IN_TRANSIT = "in_transit"
    DELIVERED = "delivered"
    FAILED = "failed"
    RETRY_SCHEDULED = "retry_scheduled"

class AnomalyType(Enum):
    ADDRESS_INVALID = "address_invalid"
    TIME_WINDOW_VIOLATION = "time_window_violation"
    CAPACITY_EXCEEDED = "capacity_exceeded"
    CARRIER_DELAY = "carrier_delay"
    WEATHER_IMPACT = "weather_impact"
    CUSTOMER_ABSENT = "customer_absent"

@dataclass
class Delivery:
    """Einzelne Lieferung im System"""
    delivery_id: str
    customer_name: str
    address: str
    lat: float
    lng: float
    priority: Priority
    time_window_start: datetime
    time_window_end: datetime
    weight_kg: float
    volume_m3: float
    special_instructions: Optional[str] = None
    status: DeliveryStatus = DeliveryStatus.PENDING
    assigned_route_id: Optional[str] = None
    estimated_delivery: Optional[datetime] = None
    actual_delivery: Optional[datetime] = None
    retry_count: int = 0
    sla_deadline: datetime = None
    
    def to_dict(self) -> Dict[str, Any]:
        return {
            "delivery_id": self.delivery_id,
            "customer_name": self.customer_name,
            "address": self.address,
            "lat": self.lat,
            "lng": self.lng,
            "priority": self.priority.name,
            "time_window_start": self.time_window_start.isoformat(),
            "time_window_end": self.time_window_end.isoformat(),
            "weight_kg": self.weight_kg,
            "volume_m3": self.volume_m3,
            "special_instructions": self.special_instructions,
            "sla_hours": (self.sla_deadline - datetime.now()).total_seconds() / 3600 if self.sla_deadline else 24
        }

@dataclass
class Route:
    """Geplante Route für mehrere Lieferungen"""
    route_id: str
    driver_id: str
    vehicle_id: str
    deliveries: List[str]  # delivery_ids
    estimated_distance_km: float
    estimated_duration_minutes: int
    start_time: datetime
    optimized_order: List[str] = field(default_factory=list)
    cost_estimate: float = 0.0
    carbon_footprint_kg: float = 0.0

@dataclass
class Anomaly:
    """Anomalie im Lieferprozess"""
    anomaly_id: str
    delivery_id: str
    anomaly_type: AnomalyType
    severity: int  # 1-5
    description: str
    detected_at: datetime
    resolved: bool = False
    resolution: Optional[str] = None
    resolved_at: Optional[datetime] = None
    gpt4o_analysis: Optional[str] = None
    recommended_action: Optional[str] = None

class BatchPlanner:
    """
    DeepSeek-basierter Batch-Planer für Logistik-Routen.
    Verarbeitet Baseload-Lieferungen kostengünstig mit DeepSeek V3.2.
    """
    
    def __init__(self, ai_client):
        self.client = ai_client
        self.batch_size = 50  # Lieferungen pro API-Call
        
    def plan_batch(self, deliveries: List[Delivery]) -> List[Route]:
        """
        Plane Routen für eine Batch-Lieferung.
        Nutzt DeepSeek V3.2 für kostengünstige Batch-Optimierung.
        """
        routes = []
        
        # Nach Priorität sortieren
        sorted_deliveries = sorted(deliveries, key=lambda d: d.priority.value)
        
        # In Batches aufteilen
        for i in range(0, len(sorted_deliveries), self.batch_size):
            batch = sorted_deliveries[i:i + self.batch_size]
            
            # DeepSeek für Routing-Optimierung
            delivery_dicts = [d.to_dict() for d in batch]
            
            result = self.client.generate_batch_plan(delivery_dicts)
            
            if result["success"]:
                routes.extend(self._parse_routes(result["content"], batch))
                print(f"✅ Batch {i//self.batch_size + 1}: {len(batch)} Lieferungen geplant, "
                      f"Latenz: {result['latency_ms']:.0f}ms, "
                      f"Kosten: ${result['usage']['total_tokens']/1_000_000 * 0.42:.4f}")
            else:
                print(f"❌ Batch {i//self.batch_size + 1} fehlgeschlagen: {result.get('error')}")
        
        return routes
    
    def _parse_routes(self, response_content: str, deliveries: List[Delivery]) -> List[Route]:
        """Parse DeepSeek-Antwort in Route-Objekte"""
        routes = []
        
        try:
            # Versuche JSON-Parsing
            if response_content.strip().startswith("{"):
                data = json.loads(response_content)
                routes_data = data.get("routes", [])
            else:
                # Fallback: Text-Parsing für nicht-JSON-Response
                routes_data = self._text_to_routes(response_content, deliveries)
                
        except json.JSONDecodeError:
            routes_data = self._text_to_routes(response_content, deliveries)
        
        for route_data in routes_data:
            route = Route(
                route_id=route_data.get("route_id", f"R{len(routes)}"),
                driver_id=route_data.get("driver_id", "D001"),
                vehicle_id=route_data.get("vehicle_id", "V001"),
                deliveries=route_data.get("delivery_ids", []),
                estimated_distance_km=route_data.get("distance_km", 0),
                estimated_duration_minutes=route_data.get("duration_min", 0),
                start_time=datetime.now(),
                optimized_order=route_data.get("optimized_order", [])
            )
            routes.append(route)
            
        return routes
    
    def _text_to_routes(self, text: str, deliveries: List[Delivery]) -> List[Dict]:
        """Fallback: Konvertiere Text-Response in Routen"""
        # Einfache Heuristik: Gruppiere nach geografischer Nähe
        routes = []
        
        if len(deliveries) <= 10:
            # Einzelne Route für kleine Batches
            routes.append({
                "route_id": "R001",
                "driver_id": "D001",
                "vehicle_id": "V001",
                "delivery_ids": [d.delivery_id for d in deliveries],
                "distance_km": len(deliveries) * 5.5,
                "duration_min": len(deliveries) * 25,
                "optimized_order": [d.delivery_id for d in deliveries]
            })
        else:
            # Mehrere Routen basierend auf Quadranten
            quadrants = {}
            for d in deliveries:
                q = f"{'N' if d.lat > 40 else 'S'}{'E' if d.lng > 14 else 'W'}"
                if q not in quadrants:
                    quadrants[q] = []
                quadrants[q].append(d)
            
            for idx, (q, q_deliveries) in enumerate(quadrants.items()):
                routes.append({
                    "route_id": f"R{idx+1:03d}",
                    "driver_id": f"D{idx+1:03d}",
                    "vehicle_id": f"V{idx+1:03d}",
                    "delivery_ids": [d.delivery_id for d in q_deliveries],
                    "distance_km": len(q_deliveries) * 5.5,
                    "duration_min": len(q_deliveries) * 25,
                    "optimized_order": [d.delivery_id for d in q_deliveries]
                })
        
        return routes

GPT-4o Anomalie-Interpreter: 5% kritische Fälle meistern

Für die verbleibenden 5% der Anomalien nutze ich GPT-4o. Obwohl teurer ($8/MTok vs. $0,42/MTok), rechtfertigt die höhere Qualität der Anomalie-Analyse die Kosten. In unserem Produktivbetrieb reduzierte GPT-4o unsere Fehlerquote bei kritischen Lieferungen um 73%.

# anomaly_handler.py - GPT-4o basierte Anomalie-Behandlung
import asyncio
from typing import List, Optional, Dict
from datetime import datetime, timedelta
from dataclasses import dataclass

@dataclass
class AnomalyContext:
    """Kontext für GPT-4o Anomalie-Analyse"""
    delivery_history: List[Dict]
    current_weather: Optional[Dict]
    carrier_performance: Dict[str, float]
    customer_tier: str
    contract_sla_hours: int

class AnomalyHandler:
    """
    GPT-4o basierter Anomalie-Interpreter.
    Behandelt nur kritische Fälle (<5% des Volumens) für Kosteneffizienz.
    """
    
    def __init__(self, ai_client):
        self.client = ai_client
        self.severity_threshold = 3  # Nur Schweregrad >= 3 an GPT-4o
        
    def handle_anomalies(self, anomalies: List[Anomaly]) -> List[Anomaly]:
        """
        Verarbeite Anomalien mit intelligentem Routing:
        - Hohe Schwere: GPT-4o für detaillierte Analyse
        - Niedrige Schwere: Regelbasierte Behandlung
        """
        handled = []
        gpt4o_cases = []
        
        for anomaly in anomalies:
            if anomaly.severity >= self.severity_threshold:
                gpt4o_cases.append(anomaly)
            else:
                # Regelbasierte Behandlung ohne API-Call
                anomaly.resolution = self._rule_based_resolution(anomaly)
                anomaly.resolved = True
                anomaly.resolved_at = datetime.now()
                handled.append(anomaly)
        
        # Batch-Verarbeitung für GPT-4o (kostengünstiger)
        if gpt4o_cases:
            gpt4o_handled = self._batch_analyze_gpt4o(gpt4o_cases)
            handled.extend(gpt4o_handled)
            
        return handled
    
    def _batch_analyze_gpt4o(self, anomalies: List[Anomaly]) -> List[Anomaly]:
        """
        Batch-Verarbeitung für GPT-4o.
        Gruppiert ähnliche Anomalien für effizientere API-Nutzung.
        """
        # Nach Typ gruppieren
        by_type = {}
        for a in anomalies:
            if a.anomaly_type not in by_type:
                by_type[a.anomaly_type] = []
            by_type[a.anomaly_type].append(a)
        
        results = []
        
        for anomaly_type, type_anomalies in by_type.items():
            # Gemeinsame Analyse für ähnliche Anomalien
            context = self._build_context(type_anomalies)
            
            # Einzelner GPT-4o Call pro Gruppe
            result = self.client.analyze_anomaly(context)
            
            if result["success"]:
                # Analyse auf alle Anomalien anwenden
                for anomaly in type_anomalies:
                    anomaly.gpt4o_analysis = result["content"]
                    anomaly.resolution = self._extract_resolution(result["content"])
                    anomaly.recommended_action = self._extract_action(result["content"])
                    anomaly.resolved = True
                    anomaly.resolved_at = datetime.now()
                    
                    print(f"✅ GPT-4o analysiert: {anomaly.anomaly_id} "
                          f"(Typ: {anomaly.anomaly_type.value}, "
                          f"Latenz: {result['latency_ms']:.0f}ms)")
                    
                    results.append(anomaly)
            else:
                # Fallback auf Regelbasis
                for anomaly in type_anomalies:
                    anomaly.resolution = self._rule_based_resolution(anomaly)
                    anomaly.resolved = True
                    print(f"⚠️ GPT-4o fehlgeschlagen für {anomaly.anomaly_id}, "
                          f"Fallback auf Regelbasis")
                    results.append(anomaly)
        
        return results
    
    def _build_context(self, anomalies: List[Anomaly]) -> Dict:
        """Baue Kontext für GPT-4o"""
        return {
            "anomalies": [
                {
                    "id": a.anomaly_id,
                    "type": a.anomaly_type.value,
                    "severity": a.severity,
                    "description": a.description,
                    "delivery_id": a.delivery_id,
                    "detected_at": a.detected_at.isoformat()
                }
                for a in anomalies[:5]  # Max 5 pro Batch
            ],
            "total_count": len(anomalies),
            "request_timestamp": datetime.now().isoformat()
        }
    
    def _rule_based_resolution(self, anomaly: Anomaly) -> str:
        """Regelbasierte Lösung für niedrigschwellige Anomalien"""
        resolutions = {
            AnomalyType.ADDRESS_INVALID: "Automatische Adresskorrektur via Geocoding API",
            AnomalyType.TIME_WINDOW_VIOLATION: "Neue Zeitfenster-Buchung mit 30min Puffer",
            AnomalyType.CAPACITY_EXCEEDED: "Split-Lieferung mit Aufteilungslogik",
            AnomalyType.CARRIER_DELAY: "Automatischer Carrier-Wechsel zu Backup-Logistiker",
            AnomalyType.WEATHER_IMPACT: "Verzögerungsbenachrichtigung mit neuem ETA",
            AnomalyType.CUSTOMER_ABSENT: "Ablageort-Vorschlag und Benachrichtigung"
        }
        return resolutions.get(anomaly.anomaly_type, "Manuelle Prüfung erforderlich")
    
    def _extract_resolution(self, gpt4o_response: str) -> str:
        """Extrahiere Lösungsvorschlag aus GPT-4o Antwort"""
        if "Lösung:" in gpt4o_response:
            return gpt4o_response.split("Lösung:")[1].split("\n")[0].strip()
        return "GPT-4o Empfehlung befolgen"
    
    def _extract_action(self, gpt4o_response: str) -> str:
        """Extrahiere empfohlene Aktion aus GPT-4o Antwort"""
        if "Empfehlung:" in gpt4o_response:
            return gpt4o_response.split("Empfehlung:")[1].split("\n")[0].strip()
        if "Action:" in gpt4o_response:
            return gpt4o_response.split("Action:")[1].split("\n")[0].strip()
        return "Sofortige Benachrichtigung des Dispatch-Managers"

SLA Retry-Strategie: Intelligente Wiederholungen

# sla_retry.py - Intelligente SLA-Retry-Strategie
import time
import random
from typing import Callable, Any, List, Dict
from dataclasses import dataclass
from datetime import datetime, timedelta
from functools import wraps

@dataclass
class RetryConfig:
    """Konfiguration für Retry-Strategie"""
    max_attempts: int = 5
    base_delay_seconds: float = 5.0
    max_delay_seconds: float = 300.0
    exponential_base: float = 2.0
    jitter: bool = True
    
    # SLA-spezifische Konfiguration
    sla_critical_hours: float = 2.0  # Kritisch: < 2h bis Deadline
    sla_warning_hours: float = 4.0  # Warnung: < 4h bis Deadline

class SLARetryEngine:
    """
    Intelligente Retry-Engine mit SLA-Bewusstsein.
    Passt Retry-Strategie basierend auf verbleibender Zeit bis SLA-Deadline an.
    """
    
    def __init__(self, config: RetryConfig = None):
        self.config = config or RetryConfig()
        self.retry_stats: Dict[str, List[float]] = {}
        
    def retry_with_sla_awareness(
        self,
        func: Callable,
        *args,
        sla_deadline: datetime = None,
        priority: int = 1,
        **kwargs
    ) -> Any:
        """
        Führe Funktion mit SLA-bewussten Retries aus.
        
        Args:
            func: Funktion die ausgeführt werden soll
            sla_deadline: Wann muss die Lieferung zugestellt sein
            priority: Prioritätsstufe (1=höchste)
        """
        last_exception = None
        attempt = 0
        
        while attempt < self.config.max_attempts:
            try:
                result = func(*args, **kwargs)
                
                # Erfolg: Statistiken aktualisieren
                self._record_success(func.__name__, attempt)
                
                return {
                    "success": True,
                    "result": result,
                    "attempts": attempt + 1,
                    "total_time_ms": 0
                }
                
            except Exception as e:
                last_exception = e
                attempt += 1
                
                if attempt >= self.config.max_attempts:
                    break
                
                # Berechne Delay basierend auf SLA
                delay = self._calculate_delay(attempt, sla_deadline, priority)
                
                print(f"⚠️ Attempt {attempt} fehlgeschlagen für {func.__name__}: {e}")
                print(f"   Retry in {delay:.1f}s (SLA-Deadline: {sla_deadline})")
                
                time.sleep(delay)
        
        return {
            "success": False,
            "error": str(last_exception),
            "attempts": attempt,
            "total_time_ms": 0
        }
    
    def _calculate_delay(
        self,
        attempt: int,
        sla_deadline: datetime,
        priority: int
    ) -> float:
        """
        Berechne dynamischen Retry-Delay basierend auf:
        1. Exponential Backoff
        2. Verbleibende SLA-Zeit
        3. Prioritätsstufe
        """
        # Basis: Exponentielles Backoff
        base_delay = self.config.base_delay_seconds * (
            self.config.exponential_base ** (attempt - 1)
        )
        
        # SLA-Anpassung
        if sla_deadline:
            time_until_deadline = (sla_deadline - datetime.now()).total_seconds()
            
            if time_until_deadline < self.config.sla_critical_hours * 3600:
                # Kritisch: Schnellere Retries
                multiplier = 0.3
            elif time_until_deadline < self.config.sla_warning_hours * 3600:
                # Warnung: Leicht beschleunigt
                multiplier = 0.6
            else:
                # Normal: Standard-Backoff
                multiplier = 1.0
        else:
            multiplier = 1.0
        
        # Prioritätsanpassung
        priority_multiplier = 1.0 / priority  # Priorität 1 = 1.0x, Priorität 3 = 0.33x
        
        delay = base_delay * multiplier * priority_multiplier
        
        # Jitter für Verteilung
        if self.config.jitter:
            delay *= (0.5 + random.random())
        
        # Max-Limit
        return min(delay, self.config.max_delay_seconds)
    
    def _record_success(self, func_name: str, attempts: int):
        """Erfolgreiche Ausführung für Statistiken protokollieren"""
        if func_name not in self.retry_stats:
            self.retry_stats[func_name] = []
        self.retry_stats[func_name].append(attempts)
    
    def get_success_rate(self, func_name: str = None) -> float:
        """Berechne Erfolgsrate für Statistik-Dashboard"""
        if func_name:
            attempts = self.retry_stats.get(func_name, [])
            if not attempts:
                return 0.0
            # Anteil derjenigen mit <= 2 Versuchen
            return len([a for a in attempts if a <= 2]) / len(attempts)
        else:
            all_attempts = [a for attempts in self.retry_stats.values() for a in attempts]
            if not all_attempts:
                return 0.0
            return len([a for a in all_attempts if a <= 2]) / len(all_attempts)


def sla_aware_retry(sla_deadline: datetime, priority: int = 1):
    """Decorator für SLA-bewusste Retry