Zum Inhalt springen
Zurück zu Artikel

LLM-API-Rate-Limiting und Kostenkontrolle: Token-Budgets, Per-Key-Throttling und Kosten-Dashboards verwalten

Byte Smith · · 14 Min. Lesezeit

LLM-API-Kosten verhalten sich anders als fast jede andere API-Kostenart, die Ihr Team zuvor gemanagt hat. Traditionelle API-Aufrufe haben ungefähr vorhersehbare Pro-Anfrage-Kosten. Eine Datenbankabfrage, eine Speicheroperation oder eine Webhook-Zustellung kostet mehr oder weniger gleich viel, unabhängig davon, was der Benutzer sendet. LLM-APIs brechen diese Annahme komplett, weil die Kosten sowohl mit der Anzahl der Eingabe- als auch der Ausgabe-Tokens skalieren, und diese Anzahlen können um Größenordnungen zwischen Anfragen variieren.

Ein einzelner agentischer Workflow kann in Minuten fünfzig Dollar oder mehr an Tokens verbrennen. Wenn ein Agent in Schleifen gerät, bei mehrdeutigen Ergebnissen Retries macht oder über mehrere Tool-Aufrufe hinweg auffächert, summiert sich der Token-Verbrauch auf Weisen, die schwer vorherzusagen und noch schwerer nachträglich zu stoppen sind. Ein Entwickler, der einen neuen Prompt gegen ein langes Kontextfenster testet, kann unwissentlich in einer Sitzung mehr ausgeben, als sein Team für den ganzen Tag budgetiert hat. Das sind keine Sonderfälle. Das sind normale Betriebsbedingungen für Teams, die mit Large Language Models arbeiten.

Das Prinzip, das hier am meisten zählt, ist einfach: Was man nicht misst, kann man nicht kontrollieren. Wenn Ihr Team OpenAI, Anthropic oder einen anderen Modellanbieter aufruft, ohne Per-Key-Tracking, Pro-Anfrage-Kostenschätzung und Budgetdurchsetzung, fliegen Sie blind. Die Rechnung kommt am Monatsende und das Gespräch wechselt von Engineering zu Buchhaltung.

Rate Limiting ist auch nicht nur eine Kostenkontrolle. Es ist eine Sicherheitskontrolle. Ein kompromittierter API-Key ohne Rate Limits gibt einem Angreifer unbegrenzten Zugang zu einer teuren Ressource. Per-Key-Throttling begrenzt den Schadensradius eines durchgesickerten Credentials. Per-Key-Budgets deckeln den finanziellen Schaden. Das sind dieselben Defense-in-Depth-Prinzipien, die für API-Sicherheit für KI-Apps und SaaS-Integrationen gelten, speziell auf LLM-Verbrauch angewandt.

Anatomie der LLM-API-Kosten

Das Verständnis der LLM-Preisgestaltung erfordert das Verständnis, wie tokenbasierte Abrechnung funktioniert, weil sie sich grundlegend von anfragebasierter Abrechnung unterscheidet.

Jeder LLM-API-Aufruf hat drei Kostenkomponenten: Eingabe-Tokens, Ausgabe-Tokens und in manchen Fällen gecachte Eingabe-Tokens. Eingabe-Tokens sind das, was Sie an das Modell senden, einschließlich System-Prompt, Konversationsverlauf und abgerufenem Kontext. Ausgabe-Tokens sind das, was das Modell als Antwort generiert. Gecachte Eingabe-Tokens gelten, wenn der Anbieter wiederholte Präfixe erkennt und einen ermäßigten Tarif berechnet.

Die Preisunterschiede zwischen Modellen sind dramatisch. Bei Nutzung ungefährer Zahlen aus einem aktuellen Preissnapshot: gpt-4o kostet etwa 2,50 Dollar pro Million Eingabe-Tokens und 10,00 Dollar pro Million Ausgabe-Tokens. gpt-4o-mini sinkt auf 0,15 Dollar pro Million Eingabe-Tokens und 0,60 Dollar pro Million Ausgabe-Tokens. gpt-3.5-turbo liegt bei 0,50 bzw. 1,50 Dollar. Die Reasoning-Modelle wie o1 sind deutlich teurer mit 15,00 Dollar pro Million Eingabe- und 60,00 Dollar pro Million Ausgabe-Tokens.

Diese Preise ändern sich. Deshalb sollte ein Produktions-Kostenkontrollsystem Preise als versioniertes Manifest behandeln statt als hartcodierte Konstanten. Wenn OpenAI die Preise anpasst, aktualisieren Sie eine Konfigurationsdatei, nicht Anwendungscode.

Die Mathematik ist aufschlussreich. Bei gpt-4o-Preisen kauft ein Budget von 1.000 Dollar pro Monat ungefähr 400 Millionen Eingabe-Tokens oder 100 Millionen Ausgabe-Tokens. Das klingt nach viel, bis man bedenkt, dass ein einzelner agentischer Workflow mit einem 128k-Kontextfenster 100k+ Tokens pro Runde verbrauchen kann. Bei gpt-4o-mini-Preisen kaufen dieselben 1.000 Dollar ungefähr 6,7 Milliarden Eingabe-Tokens, weshalb Modellauswahl der größte einzelne Hebel für Kostenoptimierung ist.

Die versteckten Kosten sind oft gefährlicher als die sichtbaren. Retries bei transienten Fehlern verdoppeln oder verdreifachen den Token-Aufwand für eine einzelne logische Anfrage. Lange Kontextfenster bedeuten, dass jede Nachricht in einer Konversation den vollständigen Verlauf mitträgt. Agent-Schleifen, die Retries machen bis sie ein zufriedenstellendes Ergebnis erhalten, können unbegrenzte Kosten verursachen. Embedding-Aufrufe für RAG-Pipelines fügen einen separaten, leiseren Kostenstrom hinzu, der sich über die Zeit aufbaut.

Drei Säulen der LLM-Kostenkontrolle

Effektives LLM-Kostenmanagement ruht auf drei Säulen: Rate Limiting, Budgetdurchsetzung und Kostensichtbarkeit. Jede löst einen anderen Teil des Problems, und Sie brauchen alle drei.

Säule 1: Rate Limiting

Rate Limiting für LLM-APIs muss auf zwei Dimensionen gleichzeitig arbeiten. Anfragen pro Minute (RPM) verhindert Burst-Missbrauch und schützt gegen außer Kontrolle geratene Automatisierung, die zu viele Aufrufe zu schnell abfeuert. Tokens pro Minute (TPM) verhindert, dass teure Abfragen Kapazität monopolisieren, selbst bei niedrigen Anfrageraten. Eine einzelne Anfrage mit einem 100k-Token-Kontextfenster und einer 4k-Token-Antwort kann mehr kosten als tausend kleine Anfragen.

Die Wahl des Rate-Limiting-Algorithmus ist wichtig. Fixed-Window-Rate-Limiting ist einfach, leidet aber am Burst-an-der-Grenze-Problem: Ein Client kann die doppelte beabsichtigte Rate senden, indem er Anfragen am Ende eines Fensters und am Anfang des nächsten timed. Sliding-Window-Rate-Limiting vermeidet dies durch Glättung der Zählung über die Zeit. Token-Bucket-Algorithmen erlauben kontrollierte Bursts bei Beibehaltung eines langfristigen Durchschnitts. Für LLM-Traffic ist Sliding Window generell die beste Wahl, weil es vorhersehbares, gleichmäßiges Throttling bietet, ohne die Grenzausnutzung, die Fixed Windows erlauben.

Provider-seitige Rate Limits und anwendungsseitige Rate Limits dienen unterschiedlichen Zwecken. OpenAI erzwingt eigene Rate Limits basierend auf Ihrem Kontotier, aber diese Limits gelten für Ihre gesamte Organisation. Anwendungsseitiges Rate Limiting ermöglicht es Ihnen, diese Kapazität über Teams, Projekte und einzelne API-Keys aufzuteilen. Sie brauchen beide Schichten.

Säule 2: Budgetdurchsetzung

Budgetdurchsetzung übersetzt Rate Limits in finanzielle Kontrollen. Per-Key tägliche und monatliche Token-Budgets geben jedem Verbraucher eine klare Zuweisung und eine harte Grenze.

Das nützlichste Muster ist gestaffelte Durchsetzung statt eines einzelnen harten Cutoffs. Bei 80% des verbrauchten Budgets warnen, damit der Verbraucher seine Nutzung anpassen kann. Bei 95% optional das Modell von einem teureren Tier auf ein günstigeres downgraden. Bei 100% weitere Anfragen komplett blockieren. Das gibt Verbrauchern Zeit zu reagieren, bevor sie gegen eine Wand laufen.

Modell-Downgrade verdient sorgfältiges Handling. Automatisch eine Anfrage von gpt-4o auf gpt-4o-mini umzuschalten, kann erheblich Geld sparen, aber die Fähigkeitsunterschiede zwischen Modellen sind real. Eine Aufgabe, die starkes Reasoning oder präzises Instruction Following erfordert, kann auf einem kleineren Modell scheitern oder qualitativ minderwertige Ergebnisse liefern. Deshalb sollte Modell-Downgrade nie ein Standardverhalten sein. Es muss explizit per Key eingewilligt, in einer Richtliniendatei konfiguriert und klar an den Client über Response-Header signalisiert werden, damit die Anwendung die Fähigkeitsänderung angemessen handhaben kann.

Säule 3: Kostensichtbarkeit

Kosten können nicht ohne Sichtbarkeit darüber verwaltet werden, wohin das Geld fließt. Echtzeit-Nutzungstracking nach Key, Team und Modell ist die Grundlage.

Kostenschätzung vor dem Senden einer Anfrage ist wertvoll, aber inhärent ungenau. Sie können Eingabekosten schätzen, indem Sie Tokens mit einem Tokenizer wie tiktoken zählen, und Sie können eine Worst-Case-Ausgabeobergrenze basierend auf dem max_tokens-Parameter berechnen. Aber die tatsächlichen Ausgabekosten hängen davon ab, wie viele Tokens das Modell zur Laufzeit generiert, was pro Anfrage variiert. Der richtige Ansatz ist, die Schätzung für Pre-Flight-Budgetprüfungen zu verwenden und die tatsächlichen Kosten nach Abschluss der Antwort zu erfassen.

Anomalieerkennung fügt eine Schutzschicht hinzu, die statische Budgets nicht bieten können. Wenn ein Key, der normalerweise 5 Dollar pro Tag ausgibt, plötzlich 50 Dollar in einer Stunde ausgibt, sollte dieses Muster unabhängig davon einen Alert auslösen, ob das Budget überschritten wurde. Die Baseline kann so einfach sein wie ein gleitender Durchschnitt mit einem Multiplikatorschwellenwert.

Für Dashboards decken drei Visualisierungen die meisten Bedürfnisse ab: Kosten nach Key als Balkendiagramm zur Identifizierung der größten Verbraucher, Kosten über Zeit als Liniendiagramm zum Erkennen von Trends und Anomalien, und verbleibendes Budget als Doughnut-Diagramm für den schnellen Statusüberblick. Das sind operative Dashboards, keine Eitelkeitsmetriken. Sie sollten das Erste sein, was ein Plattformteam prüft, wenn sich etwas komisch anfühlt.

Architektur: Das Reverse-Proxy-Muster

Die effektivste Architektur für LLM-Kostenkontrolle ist ein Reverse Proxy, der zwischen Ihrer Anwendung und dem Modellanbieter sitzt. Jede Anfrage fließt durch den Proxy, der Kontrollen anwendet, bevor er an die Upstream-API weiterleitet.

Das Reverse-Proxy-Muster hat mehrere Vorteile gegenüber clientseitiger SDK-Integration. Zentrale Kontrolle bedeutet ein Durchsetzungspunkt statt der Aktualisierung jedes Clients. Es funktioniert mit jedem Client, der HTTP-Anfragen stellen kann, ob das ein Python-Skript, eine TypeScript-Anwendung oder ein curl-Befehl ist. Es bietet einen einzelnen Sichtbarkeitspunkt für den gesamten LLM-Traffic. Und es kann nicht von einem Entwickler umgangen werden, der vergisst, das SDK zu verwenden oder sich entscheidet, den Anbieter direkt aufzurufen.

Die Middleware-Kette in einem gut gestalteten Proxy folgt einer klaren Sequenz: die Anfrage mit API-Keys authentifizieren, Rate Limits prüfen, Budgetverfügbarkeit verifizieren, den Cache auf einen exakten Treffer prüfen, die Anfrage an den Upstream-Anbieter weiterleiten und die tatsächliche Token-Nutzung und Kosten nach Abschluss der Antwort erfassen.

API-Key-Management verdient Aufmerksamkeit. Keys sollten ein erkennbares Präfix wie lbp_ verwenden, damit sie in Logs und Konfigurationsdateien leicht identifizierbar sind. Sie sollten als SHA-256-Hashes gespeichert werden, nicht als Klartext, und dem Benutzer genau einmal bei der Erstellung angezeigt werden. Das ist dasselbe Muster, das GitHub, Stripe und andere Plattformen mit ausgereiftem Key-Management verwenden. Echte API-Keys, die serverseitig validiert werden, sind weit sicherer als spoofbare Header oder client-behauptete Identität.

Für ein Single-Instance-Deployment ist SQLite eine pragmatische Wahl für den Backing Store. Es ist schnell, erfordert keinen separaten Server und handhabt die Gleichzeitigkeitsbedürfnisse eines Single-Node-Proxy gut. Der Upgrade-Pfad zu Redis oder Postgres existiert für Teams, die Multi-Instance-Deployments brauchen, aber der Start mit SQLite hält den operativen Fußabdruck minimal und das Deployment einfach.

Exact-Match-Caching

Das Caching von LLM-Antworten kann die Kosten für Workloads mit repetitiven Abfragen dramatisch reduzieren. Der einfachste effektive Ansatz ist Exact-Match-Caching: den vollständigen Request-Body mit sortierten Keys für deterministisches Hashing hashen und die gecachte Antwort zurückgeben, wenn ein Match existiert.

Das ist bewusst kein semantisches Caching. Semantisches Caching, bei dem Sie „ähnlich genug”-Abfragen finden und eine vorherige Antwort zurückgeben, erfordert ein Embedding-Modell, einen Vektorsuchindex, Ähnlichkeitsschwellen und Cache-Invalidierungsregeln, die selbst eine erhebliche Engineering-Herausforderung darstellen. Es ist ein separates System mit eigenen Fehlermodi. Exact-Match-Caching ist einfach, vorhersehbar und konstruktionsbedingt korrekt. Wenn die Anfrage identisch ist, ist die gecachte Antwort gültig.

TTL-Strategien sollten nach Anwendungsfall variieren. Konversationsabfragen, bei denen sich die Antwort mit neuen Informationen ändern könnte, verdienen kürzere TTLs, vielleicht 5 bis 15 Minuten. Embedding-Generierungsaufrufe, die deterministische Ausgaben für denselben Input produzieren, können viel längere TTLs verwenden, potenziell Stunden oder sogar Tage. System-Prompts, die über Anfragen hinweg identisch sind, sind exzellente Cache-Kandidaten.

Die echten Einsparungen zeigen sich bei Workloads mit natürlicher Wiederholung: Embedding-Generierung für Dokumenten-Ingestion, wo dieselben Chunks über Durchläufe hinweg erscheinen, wiederholte System-Prompts in Multi-Turn-Konversationen, Batch-Klassifizierungsaufgaben, wo viele Inputs dieselbe Struktur teilen, und Entwicklungs-Workflows, wo Ingenieure Prompts gegen dieselben Test-Inputs iterieren. Für diese Muster sind Cache-Hit-Raten von 30-60% üblich, was sich direkt in Kosteneinsparungen übersetzt.

Streaming und Abrechnung

Die meisten Produktions-LLM-Integrationen verwenden Streaming-Antworten via Server-Sent Events (SSE). Streaming verbessert die wahrgenommene Latenz, weil der Client Tokens sieht, während sie generiert werden, anstatt auf die vollständige Antwort zu warten. Aber Streaming verkompliziert die Kostenabrechnung erheblich.

Die Schlüsseltechnik ist, stream_options.include_usage = true in den Request-Body zu injizieren, bevor er an OpenAI weitergeleitet wird. Das sagt der API, die tatsächlichen Token-Zählungen im letzten SSE-Chunk einzuschließen. Ohne dieses Flag berichten Streaming-Antworten keine Nutzung, und der Proxy müsste Token-Zählungen schätzen, indem er den gestreamten Inhalt parst, was fehleranfällig ist.

// Inject usage reporting into streaming requests
if (!body.stream_options || typeof body.stream_options !== "object") {
  body.stream_options = {};
}
(body.stream_options as Record<string, unknown>).include_usage = true;

Partial-Failure-Handling ist, wo Streaming wirklich schwierig wird. Wenn die Upstream-Verbindung mitten im Stream abbricht, muss der Proxy die Tokens berücksichtigen, die bis zum Fehlerpunkt verbraucht wurden. Der finale Usage-Chunk kommt in diesem Fall nie an, also muss der Proxy auf das Zählen der Tokens in den empfangenen Chunks zurückfallen. Das ist eine Schätzung, aber besser als null Nutzung für eine Anfrage zu erfassen, die tatsächlich Tokens verbraucht hat und Geld gekostet hat.

Client-Abbruch ist das Spiegelproblem. Wenn der Client die Verbindung trennt, bevor die Antwort vollständig ist, sollte der Proxy die Upstream-Anfrage abbrechen, um weitere Token-Generierung zu stoppen und teilweise Nutzung zu erfassen. Das Ignorieren des Abbruchs verschwendet Tokens für eine Antwort, die niemand lesen wird.

Das ist schwieriger als es klingt, weil Fehler nach einem 200-Statuscode bei Streaming-Antworten auftreten können. Die HTTP-Verbindung wird hergestellt und der anfängliche Status gesendet, bevor das Modell beginnt, Tokens zu generieren. Ein Fehler mitten in der Generierung sieht aus wie eine erfolgreiche Verbindung, die aufhört, Daten zu produzieren, nicht wie eine saubere Fehlerantwort. Der Proxy muss sowohl den Happy Path als auch diese unordentlichen Partial-Failure-Szenarien handhaben.

Die llm-budget-proxy-Referenzimplementierung

Der llm-budget-proxy ist eine Open-Source-Referenzimplementierung, die diese Konzepte in ein deploybares System umsetzt. Es ist ein Single-Container-Reverse-Proxy, gebaut mit Fastify und SQLite, der Rate Limiting, Budgetdurchsetzung, Exact-Match-Caching und Kosten-Tracking für OpenAI-kompatible APIs bietet.

Die Architektur folgt der oben beschriebenen Middleware-Kette. Die Konfiguration wird durch zwei YAML-Dateien gesteuert: eine Haupt-Konfigurationsdatei, die Rate Limits, Budget-Schwellenwerte, Modell-Downgrade-Regeln, Cache-Einstellungen und Alert-Webhooks definiert, und ein Pricing-Manifest, das Modellnamen auf Pro-Token-Kosten mit einem Versionsdatum abbildet, damit Sie wissen, wann die Preise zuletzt aktualisiert wurden.

Der Proxy ist derzeit nur OpenAI-kompatibel. Anthropics Messages API verwendet ein anderes Request- und Response-Schema, einschließlich unterschiedlicher Feldnamen für Token-Zählungen, unterschiedlicher Streaming-Formate und unterschiedlicher Fehlerstrukturen. Die Unterstützung von Anthropic würde entweder separate Route-Handler oder eine Normalisierungsschicht erfordern, die zwischen Schemata übersetzt. Das ist eine dokumentierte zukünftige Erweiterung, nicht etwas, das das MVP versucht. Den Scope eng zu halten, hält die Implementierung verständlich und die Codebasis klein genug, dass ein einzelner Ingenieur das Ganze an einem Nachmittag lesen kann.

Das Deployment dauert etwa fünf Minuten mit Docker:

// Clone and deploy
// git clone https://github.com/InkByteStudio/llm-budget-proxy
// cp .env.example .env  (add your OpenAI key and admin key)
// docker compose up -d

Die Admin-API bietet Endpunkte zum Erstellen und Verwalten von API-Keys, zum Anzeigen von Nutzungsstatistiken und zum Prüfen des Budgetstatus. Jeder Key erhält eigene Rate Limits und Budget-Zuweisungen, die die in der Konfigurationsdatei definierten Defaults überschreiben können.

Build vs. Buy: Ehrlicher Vergleich

Der LLM-Proxy-Bereich ist nicht leer. LiteLLM hat ungefähr 39.000 GitHub-Stars und unterstützt über 100 Provider-Integrationen. Es bietet virtuelle Keys, Per-Key-Budgets, ein Spend-Management-Dashboard und wird von Postgres und Redis unterstützt. Es ist eine ausgereifte, bewährte Plattform, auf die viele Produktionsteams setzen. Helicone und Portkey bieten verwaltete Lösungen mit zusätzlicher Analytik, Prompt-Management und Compliance-Funktionen.

Der Differenzierungsfaktor für llm-budget-proxy ist operative Einfachheit. Er läuft als einzelner Container mit SQLite. Es gibt kein Postgres zum Bereitstellen, kein Redis zum Verwalten, keine Admin-UI zum separat Deployen. Die Konfiguration ist eine YAML-Datei. Das Deployment ist docker compose up. Die gesamte Codebasis ist klein genug, um sie in einer Sitzung zu auditieren. Das ist wichtig, wenn Sie genau verstehen müssen, was der Proxy mit Ihren API-Keys und Anfragedaten macht.

Wann llm-budget-proxy nutzen: Sie sind ein kleines Team, Sie betreiben Dev- oder Staging-Umgebungen, Sie nutzen einen einzelnen Provider und wollen die Interna der LLM-Kostenkontrolle verstehen, statt sie als Black Box zu behandeln. Es passt auch gut für Teams, die eine Referenzimplementierung zum Lernen wollen, bevor sie größere Plattformen evaluieren.

Wann LiteLLM, Helicone oder Portkey nutzen: Sie brauchen Multi-Provider-Unterstützung über OpenAI, Anthropic, Google und andere. Sie brauchen Enterprise-Skalierung mit mehreren Proxy-Instanzen. Sie brauchen Vendor-Support, SLAs oder Compliance-Zertifizierungen. Sie brauchen Features wie Prompt-Management, A/B-Testing oder erweiterte Analytik, die über Kostenkontrolle hinausgehen.

Ein hybrider Ansatz funktioniert für viele Organisationen gut: llm-budget-proxy für Entwicklungs- und Staging-Umgebungen, wo Einfachheit und Kosten am meisten zählen, und eine Vendor-Lösung für die Produktion, wo Skalierung, Support und Multi-Provider-Routing den operativen Overhead rechtfertigen.

Wie es weitergeht

Wenn Sie diese Kontrollen hands-on implementieren möchten, folgen Sie dem Begleittutorial: LLM-Rate-Limiting und Kostenkontrollen implementieren. Es führt durch das Deployen des Proxys, das Erstellen von API-Keys, das Konfigurieren von Budgets und Rate Limits sowie das Validieren jeder Kontrolle mit echten OpenAI-API-Aufrufen.

Für mehr zu den in diesem Leitfaden behandelten Themen:

Holen Sie sich den llm-budget-proxy →

Holen Sie sich die kostenlose LLM-Kostenkontroll-Checkliste →

Häufig gestellte Fragen

Wie unterscheidet sich LLM-Rate-Limiting von traditionellem API-Rate-Limiting?

LLM-Rate-Limiting verfolgt sowohl Anfragen pro Minute (RPM) als auch Tokens pro Minute (TPM), weil die Kosten mit der Anzahl der Eingabe- und Ausgabe-Tokens skalieren, nicht nur mit der Anzahl der Anfragen. Eine einzelne LLM-Anfrage kann Tausende von Tokens verbrauchen und mehrere Dollar kosten, weshalb tokenbasierte Limits neben anfragebasierten Limits unerlässlich sind.

Kann man die genauen LLM-API-Kosten vor dem Senden einer Anfrage berechnen?

Nicht exakt. Sie können Eingabekosten schätzen, indem Sie Tokens mit tiktoken zählen, und eine Worst-Case-Ausgabeobergrenze mit dem max_tokens-Parameter berechnen, aber die tatsächlichen Ausgabekosten hängen davon ab, wie viele Tokens das Modell zur Laufzeit generiert. Genaue Kosten werden nach Abschluss der Antwort erfasst.

Wann sollte man seinen eigenen LLM-Proxy bauen vs. eine verwaltete Lösung nutzen?

Bauen Sie Ihren eigenen, wenn Sie einen leichtgewichtigen Single-Provider-Proxy für Dev/Staging brauchen, die Interna verstehen wollen oder volle Kontrolle über ein einfaches Deployment brauchen. Nutzen Sie eine verwaltete Lösung wie LiteLLM, Helicone oder Portkey, wenn Sie Multi-Provider-Unterstützung, Enterprise-Skalierung, Vendor-Support oder Compliance-Zertifizierungen brauchen.