Sofortantwort
LLM Router einfach erklärt
Verteilt LLM-Anfragen automatisch ans optimale Modell – nach Komplexität und Kosten.
- Kurz gesagt
- Leitet Anfragen basierend auf Komplexität, Kosten oder Latenz an verschiedene Modelle
- Typischer Einsatz
- Kostenoptimierung, Latenz-Optimierung, Fallback-Strategie
- Wichtig zu wissen
- Kann die Inferenzkosten spürbar senken, wenn ein großer Teil der Anfragen einfach ist
LLM Router im Überblick
Ein Frontier-Modell kostet pro Token deutlich mehr als ein kleines Schnell-Modell derselben Familie. Aber braucht jede Anfrage das stärkste Modell? Eine einfache FAQ-Antwort, eine kurze Zusammenfassung oder eine Klassifizierungsaufgabe – das kann ein kleines Modell genauso gut.
Ein LLM Router analysiert jede eingehende Anfrage und entscheidet: Welches Modell ist gut genug und gleichzeitig günstig? Das Ergebnis: Gleiche oder bessere Gesamtqualität bei deutlich geringeren Kosten.
Routing-Strategien:
| Strategie | Funktionsweise | Vorteil |
|---|---|---|
| Regelbasiert | Token-Länge, Keywords | Einfach, vorhersehbar |
| Classifier | ML-Modell schätzt Komplexität | Genauer |
| Cascade | Klein → Groß bei Unsicherheit | Qualitätssicherung |
| Cost-based | Günstigstes Modell mit Mindestqualität | Maximale Ersparnis |
Technisch betrachtet
LiteLLM als Router
import litellm
from litellm import Router
router = Router(
model_list=[
{
"model_name": "fast-model",
"litellm_params": {
"model": "gpt-5.6-luna",
"api_key": os.getenv("OPENAI_API_KEY"),
},
},
{
"model_name": "powerful-model",
"litellm_params": {
"model": "claude-sonnet-4-6",
"api_key": os.getenv("ANTHROPIC_API_KEY"),
},
},
],
routing_strategy="cost-based-routing",
)
# Einfache Anfrage → günstiges Modell
response = await router.acompletion(
model="fast-model",
messages=[{"role": "user", "content": "Was ist die Hauptstadt von Frankreich?"}],
)
Eigener Complexity-Router
def route_request(prompt: str) -> str:
token_count = len(prompt.split())
has_code = "```" in prompt or "def " in prompt
needs_reasoning = any(w in prompt.lower() for w in ["analysiere", "vergleiche", "erkläre warum"])
if token_count > 2000 or has_code or needs_reasoning:
return "gpt-5.6-sol" # Komplex → starkes Modell
elif token_count > 500:
return "gpt-5.6-terra" # Mittel → ausgewogenes Modell
else:
return "gpt-5.6-luna" # Einfach → günstigstes Modell
Fallback-Konfiguration
router = Router(
model_list=[...],
fallbacks=[
{"gpt-5.6-sol": ["claude-sonnet-4-6"]}, # OpenAI down → Anthropic
{"claude-sonnet-4-6": ["gpt-5.6-sol"]},
],
context_window_fallbacks=[
{"gpt-5.6-sol": ["claude-sonnet-4-6"]}, # Context zu lang → größeres Fenster
],
)