LiteLLM AI Gateway Architektur
🛠️ DIY & Open Source 🤖 AI & Automation

LiteLLM AI Gateway

Ein zentrales AI-Gateway für alle LLM-Anfragen — selbst gehostet mit Docker. Ein Model-Wechsel, und 20+ Agenten nutzen sofort das neue Modell. Volle Kostenkontrolle durch Virtual Keys und Admin-UI.

📅 Juni 2026 · Letztes Update: 07.06.2026

TL;DR

LiteLLM ist ein OpenAI-kompatibler Proxy, der als zentrale Schaltstelle zwischen KI-Agenten und LLM-Providern sitzt. Statt in 20 Agent-Konfigurationen einzeln Modelle zu ändern, reicht ein Klick in der Admin-UI. Virtual Keys geben jedem Agenten eine eigene API-Identität mit Budget-Limit und Nutzungstracking. Das Setup: 2 Docker-Container (LiteLLM + PostgreSQL), Host-Networking, Admin-UI auf Port 4000.

Stack: LiteLLM · PostgreSQL · Docker Compose · DeepSeek · Ollama · Admin-UI

1. Warum ein AI-Gateway?

Stell dir vor, du betreibst 20 KI-Agenten — jeder mit eigener Konfiguration, eigenem Modell, eigenem API-Key. Jetzt kommt ein neues, besseres Modell auf den Markt. Ohne Gateway: Du änderst 20 Konfigurationen einzeln, startest 20 Dienste neu, vergisst zwei davon und wunderst dich über Fehler.

Mit LiteLLM als zentralem Gateway änderst du ein Modell-Alias in der Admin-UI — und alle 20 Agenten nutzen beim nächsten Request automatisch das neue Modell. Kein Neustart, kein Konfigurations-Chaos.

Die konkreten Vorteile im Betrieb:

  • Zentraler Model-Switch: Ein Synonym (z.B. „Large Flash") zeigt auf ein echtes Modell — ändert sich das Ziel, merken es alle Agenten
  • Virtual Keys pro Agent: Jeder Agent bekommt einen eigenen Key mit Budget-Limit — Abrechnung pro Team/Agent statt pro Provider
  • Kostenkontrolle: Admin-UI zeigt Token-Verbrauch und Spend pro Key, Team und Modell — tagesaktuell
  • Provider-Agnostisch: DeepSeek, OpenAI, Anthropic, Ollama — alle hinter einer einzigen, OpenAI-kompatiblen API
  • Fallback & Load-Balancing: Automatisches Retry bei Fehlern, Verteilung auf mehrere Provider

💡 Praxisbeispiel Factory: In einer Agent-Factory mit 20+ Agenten (Coder, Reviewer, Researcher, Planner, Writer) musste vor LiteLLM jedes Model-Update in 20 Einzelkonfigurationen durchgeführt werden. Jetzt: Ein Klick in der UI, alle Agenten nutzen das neue Modell. Zeitaufwand: von 30 Minuten auf 30 Sekunden reduziert.

2. Architektur & Datenfluss

LiteLLM sitzt als Proxy zwischen allen KI-Agenten und den LLM-Providern. Jeder Request läuft durch denselben Endpunkt:

Agent A ──sk-aaa──┐
Agent B ──sk-bbb──┤              ┌──────────────┐
Agent C ──sk-ccc──┼─────────────►│   LiteLLM    │──► DeepSeek
Agent D ──sk-ddd──┤   Port 4000  │   Gateway    │──► Ollama (lokal)
                  ▼              │ + PostgreSQL │──► OpenAI / Anthropic
           Virtual Keys          └──────────────┘
           + Budget-Limits       Admin-UI :4000

Der Stack besteht aus nur zwei Docker-Containern:

🚦 LiteLLM Proxy

Port 4000 — Python/FastAPI. OpenAI-kompatible API, Admin-UI, Model-Routing. Läuft mit network_mode: host für direkten Zugriff auf lokale Dienste (Ollama, PostgreSQL auf localhost).

🗄️ PostgreSQL

Port 5433 (nur localhost) — Alpine-basiert. Speichert Virtual Keys, Teams, Usage-Logs, Spend-Tracking. Trust-Authentifizierung (kein Passwort nötig, nur lokal erreichbar).

ContainerImageRAM (Idle)Port
litellm-proxyberriai/litellm:main-stable~200 MB4000 (host)
litellm-dbpostgres:16-alpine~30 MB5433 (127.0.0.1)
Gesamt~230 MB

💡 Host-Networking: LiteLLM nutzt network_mode: host, um lokale Dienste zu erreichen. PostgreSQL ist nur auf 127.0.0.1:5433 gebunden — von außen nicht erreichbar. Ollama läuft auf localhost:11434 und ist direkt ansprechbar.

3. Setup: Docker Compose & Config

3.1 docker-compose.yml

services:
  postgres:
    image: postgres:16-alpine
    container_name: litellm-db
    environment:
      POSTGRES_USER: litellm
      POSTGRES_DB: litellm
      POSTGRES_HOST_AUTH_METHOD: trust
    ports:
      - "127.0.0.1:5433:5432"
    volumes:
      - litellm_pgdata:/var/lib/postgresql/data
    restart: unless-stopped
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U litellm"]

  litellm:
    image: docker.litellm.ai/berriai/litellm:main-stable
    container_name: litellm-proxy
    depends_on:
      postgres:
        condition: service_healthy
    network_mode: "host"
    volumes:
      - ./config.yaml:/app/config.yaml
    env_file:
      - .env
    restart: unless-stopped

volumes:
  litellm_pgdata:

⚠️ PostgreSQL Trust-Auth: POSTGRES_HOST_AUTH_METHOD: trust bedeutet: keine Passwort-Authentifizierung. Nur sicher, weil PostgreSQL ausschließlich auf 127.0.0.1 gebunden ist. Für externe Zugriffe unbedingt Passwort setzen.

3.2 config.yaml (Basis-Konfiguration)

general_settings:
  master_key: os.environ/LITELLM_MASTER_KEY
  database_url: os.environ/DATABASE_URL

litellm_settings:
  drop_params: true

model_list:
  - model_name: deepseek-v4-flash
    litellm_params:
      model: deepseek/deepseek-v4-flash
      api_key: os.environ/DEEPSEEK_API_KEY

  - model_name: Large Pro
    litellm_params:
      model: openai/Large Pro
      api_base: http://localhost:4000/v1
      api_key: os.environ/LITELLM_MASTER_KEY

💡 Synonyme & Aliase: Die Admin-UI erlaubt es, zusätzliche Model-Synonyme anzulegen, ohne die config.yaml zu ändern. „Large Flash", „Scheduler", „Vision" etc. werden per UI mit echten Modellen verknüpft — und lassen sich dort jederzeit umbiegen. In der config.yaml stehen nur die physischen Provider-Modelle.

3.3 .env (Umgebungsvariablen)

DEEPSEEK_API_KEY=sk-...
LITELLM_MASTER_KEY=sk-...
LITELLM_SALT_KEY=sk-...
DATABASE_URL=postgresql://litellm@localhost:5433/litellm

Master- und Salt-Key mit OpenSSL generieren:

LITELLM_MASTER_KEY="sk-$(openssl rand -hex 16)"
LITELLM_SALT_KEY="sk-$(openssl rand -hex 16)"

⚠️ Salt-Key ist permanent: LITELLM_SALT_KEY wird zur Verschlüsselung gespeicherter API-Keys in der Datenbank verwendet. Einmal gesetzt, darf er nicht mehr geändert werden — sonst sind alle verschlüsselten Keys unbrauchbar.

4. Model-Management mit der Admin-UI

Die Admin-UI ist das Herzstück des Setups — erreichbar unter http://<host>:4000, Login mit Benutzername admin und dem LITELLM_MASTER_KEY als Passwort.

Sie bietet:

  • 📊 Dashboard: Token-Verbrauch, Spend, Requests pro Key/Team/Modell
  • 🔑 Key-Management: Virtual Keys erstellen, Budgets setzen, widerrufen
  • 🏗️ Model-Übersicht: Alle konfigurierten Modelle mit Health-Status
  • 🔄 Synonyme: Modell-Aliase anlegen und Ziel-Modell jederzeit ändern

Das ist der entscheidende Vorteil: Synonyms erlauben es, ein Alias wie „Large Flash" zu definieren und später auf ein anderes physisches Modell umzubiegen — ohne dass ein einziger Agent seine Konfiguration ändern muss.

Synonym (Agent)Physisches ModellVerwendung
Large Flashdeepseek/deepseek-v4-flashHauptmodell für schnelle Tasks
Large Prodeepseek/deepseek-v4-proKomplexe Reasoning-Tasks
Schedulerdeepseek/deepseek-v4-flashLeichte Cron-Jobs, Heartbeats
Visionopenrouter/gemma-4-31bBildanalyse
Embedded Novaollama/nomic-embed-textEmbeddings für RAG

5. Virtual Keys & Kosten-Tracking

Jeder Agent bekommt einen eigenen Virtual Key — mit Budget-Limit, Modell-Beschränkung und Metadaten:

# Key für Coding-Agenten erstellen
curl -X POST http://localhost:4000/key/generate \
  -H "Authorization: Bearer <master-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "key_alias": "agent-benno",
    "team_id": "factory-devs",
    "models": ["Large Flash", "Large Pro"],
    "metadata": {"agent": "benno", "role": "coding"},
    "max_budget": 50.0,
    "budget_duration": "1mo"
  }'

Spend-Tracking pro Key und Team:

# Verbrauch pro Team
curl http://localhost:4000/team/info?team_id=factory-devs \
  -H "Authorization: Bearer <master-key>"

# Verbrauch pro Key
curl http://localhost:4000/key/info?key=sk-... \
  -H "Authorization: Bearer <master-key>"

⚠️ Keys sofort speichern: /key/generate zeigt den Key nur einmal an. /key/list gibt nur SHA-256-Hashes zurück — keine Möglichkeit, einen verlorenen Key wiederherzustellen. Sofort in einem sicheren Vault speichern.

6. Hermes-Integration

KI-Agenten (in diesem Beispiel Hermes-Agenten) nutzen LiteLLM über das OpenAI-Provider-Interface. Die Konfiguration im Profil:

# config.yaml (Hermes-Profil)
model:
  provider: openai
  base_url: http://<litellm-host>:4000
  default: Large Flash

providers:
  openai:
    base_url: http://<litellm-host>:4000
    key_env: OPENAI_API_KEY

credential_pool_strategies:
  openai: fill_first
# .env (Hermes-Profil)
OPENAI_API_KEY=sk-<virtual-key>

Das Schöne daran: In der .env steht nur noch der Virtual Key. Welches Modell dahinter steckt, entscheidet LiteLLM. Möchte man für einen bestimmten Agenten ein anderes Modell, ändert man das Synonym in der Admin-UI — oder vergibt einen anderen Virtual Key mit anderer Modell-Zuordnung.

💡 20+ Profile, ein Model-Switch: In der Factory laufen über 20 Agenten mit individuellen Profilen. Ein Modell-Wechsel auf der LiteLLM-Admin-UI — und alle Agenten nutzen beim nächsten Request das neue Modell. Kein SSH, kein Config-Edit, kein Gateway-Neustart.

7. Betrieb & Lessons Learned

Was gut läuft

  • Admin-UI ist Gold wert: Modell-Aliase umbiegen, neue Keys anlegen, Spend tracken — alles ohne Config-Dateien oder Neustarts. Die UI zeigt tagesaktuell, welcher Agent wie viele Tokens verbraucht.
  • Zwei Container, minimaler Overhead: ~230 MB RAM im Idle. PostgreSQL auf Alpine hält den Footprint klein.
  • Host-Networking spart Konfiguration: Kein Bridge-Netzwerk-Debugging — LiteLLM sieht localhost und erreicht PostgreSQL und Ollama direkt.
  • OpenAI-Kompatibilität: Jedes Tool, das OpenAI-APIs spricht, funktioniert mit LiteLLM — ohne Adapter.

Lessons Learned

  • Salt-Key ist heilig: Einmal gesetzt, nie ändern. Ein verlorener Salt-Key bedeutet: alle verschlüsselten Provider-Keys in der DB sind unbrauchbar. Backup des Keys ist Pflicht.
  • Virtual Keys nur über API generieren: Direkte SQL-Inserts in die LiteLLM_VerificationToken-Tabelle funktionieren nicht — LiteLLM hasht die Keys mit sk--Präfix und der Hash stimmt nicht mit rohen DB-Tokens überein.
  • UI-Managed Models bevorzugen: Models per Admin-UI anlegen statt in config.yaml — sie bekommen dann kein „Defined in config"-Badge und lassen sich flexibler verwalten. config.yaml nur für die physischen Provider-Modelle nutzen.
  • Entrypoint für Custom Callbacks: Für produktionsrelevante Fixes (z.B. DeepSeek-null-content-Fix) braucht man einen eigenen Entrypoint, der vor dem Start einen Callback registriert. LiteLLM's callbacks-Feld in config.yaml unterstützt nur ~50 Built-in-Integrationen — Custom Python-Callbacks brauchen einen Wrapper.
  • Trust-Auth nur mit localhost-Bindung: PostgreSQL ohne Passwort ist nur sicher, solange der Port ausschließlich auf 127.0.0.1 gebunden ist. docker compose ps regelmäßig prüfen, dass kein 0.0.0.0:5433 auftaucht.

Monitoring

  • Health-Check: curl http://localhost:4000/health/readiness{"status":"healthy","db":"connected"}
  • Model-Liste: curl -H "Authorization: Bearer <mk>" http://localhost:4000/v1/models
  • Admin-UI: http://<host>:4000 → Login mit admin / Master-Key

8. Fazit & Ausblick

✅ Das funktioniert

  • Zentraler Model-Switch für 20+ Agenten
  • Virtual Keys mit Budgets pro Agent
  • Kosten-Transparenz per Admin-UI
  • OpenAI-kompatibel — kein Tool-Umbau nötig
  • Minimaler Footprint: 230 MB RAM, 2 Container

🔜 Geplant

  • Automatische Failover-Ketten
  • Prompt-Versioning & Caching
  • Guardrails/Content-Filter
  • Externes Monitoring per Uptime Kuma

LiteLLM als zentrales AI-Gateway ist eine der besten Infrastruktur-Entscheidungen für Multi-Agent-Setups. Der initiale Aufwand (15 Minuten Setup) amortisiert sich beim ersten Model-Wechsel, der statt 30 Minuten Config-Arbeit nur noch einen Klick braucht. Für Teams und Agent-Factories mit mehr als 5 regelmäßig genutzten LLM-Endpunkten ist ein Gateway praktisch Pflicht.

🤖 KI-Agenten-Integration

In meiner Agent-Factory steuert LiteLLM sämtliche LLM-Zugriffe für 20+ Agenten — vom Coding-Agenten über Research-Worker bis zum Social-Media-Publisher. Jeder Agent hat einen Virtual Key mit rollenbasiertem Budget. Das Admin-Dashboard zeigt tagesaktuell, welcher Agent wie viele Tokens verbraucht.


Disclaimer: Persönliches Projekt. LiteLLM ist Open Source (MIT). Keine Affiliate-Links, keine gesponserten Empfehlungen.