Skip to content
· 15 min read

11 Tricks, damit deine KI-Anwendung schnell wird

Praktische Techniken, um Latenz zu reduzieren und die gefühlte Performance in KI-Anwendungen zu verbessern — von der Modellwahl bis zu UI-Patterns.

Jan Schulte
Jan Schulte

Founder, Betalyra

ai performance latency llm ux
11 Tricks, damit deine KI-Anwendung schnell wird

tl;dr: Die meiste KI-Latenz entsteht durch Modellwahl, Output-Token-Anzahl und Tool-Roundtrips. Das zuerst fixen — dann Caching, Thinking-Budgets und Kontextgröße optimieren. Die Gewinne multiplizieren sich.

Kernerkenntnisse

  • Modellwahl + Output-Limits haben das beste Verhältnis von Wirkung zu Aufwand
  • Alles streamen — Antworten, Tool-Ergebnisse, strukturierte Daten — Nutzer sollten nie auf einen leeren Bildschirm starren
  • Jeder Tool-Call unterbricht die Generierung und riskiert einen Cache-Miss — Tools für Use Cases designen, nicht CRUD-Wrapper
  • Prompt-Struktur bestimmt die Cache-Hit-Rate — Statisches oben, Dynamisches unten, 80–95% Cache-Hits erreichbar
  • Aggressiv komprimieren, früh abbrechen — History nach jedem Turn zusammenfassen, strukturierten Output mid-stream validieren, Post-Processing in Background-Queues auslagern

In den letzten zwei Jahren haben wir konversationelle KI-Interfaces für unsere Kunden gebaut — und kürzlich Cuttlekit vorgestellt, unsere Vision für die Zukunft von Generative UI. KI schnell wirken zu lassen war dabei immer eine Top-Priorität. Hier ist, was wir gelernt haben.


1. Wähle ein schnelles Modell

Die Modellwahl ist immer noch der größte Latenz-Hebel: Starte mit dem schnellsten Modell, das die Aufgabe zuverlässig erledigt, und route nur hoch, wenn die Qualität es erfordert.

Frontier-Modelle liefern oft die besten Ergebnisse, sind aber meist auch die langsamsten. Kleinere Modelle sind deutlich günstiger, schneller und oft gut genug für Formatierung, Extraktion, Klassifikation, kurze Antworten und viele UI-getriebene Tasks. Unser aktueller Favorit ist Gemini Flash — starke Qualität bei einem Bruchteil der Latenz. Hier ein Überblick über das aktuelle Angebot.

Kleine Modelle

Foundation-Model-Varianten

Jeder große Anbieter bietet kleinere, schnellere Varianten seiner Flagship-Modelle an. Sie tauschen etwas Reasoning-Tiefe gegen deutlich niedrigere Latenz ein:

  • Gemini Flash / Flash Lite — hervorragendes Qualitäts-Speed-Verhältnis, eines der besten Modelle für performante Anwendungen
  • OpenAI Mini & Nano — leichtgewichtige Modelle, optimiert für Speed und Kosten, stark bei strukturiertem Output
  • Anthropic Haiku — schnellstes Modell in der Claude-Familie, ideal für High-Throughput-Pipelines

Schnelle OSS-Modelle

Open-Source-Modelle sind oft eine starke Wahl für latenz-sensitive Anwendungen. Ihr könnt sie selbst hosten für minimale Latenz, die APIs der Modell-Ersteller nutzen oder sie über spezialisierte Inference-Provider laufen lassen (siehe unten). Besonders die chinesischen Modelle schneiden in Benchmarks häufig sehr gut ab:

  • Deepseek — starkes Reasoning bei kleinen Parameteranzahlen
  • Qwen — Alibabas Modellfamilie, konkurrenzfähig bei Code und multilingualen Tasks
  • Hermes von NousResearch — feingetunt für Instruction Following und Function Calling
  • Minimax — schnelle multimodale Modelle
  • GLM von Zhipu AI — multilinguale Modelle mit starkem chinesischem Sprachsupport
  • Mistral — europäische Open-Weight-Modelle, hervorragend für EU-gehostete Deployments

Performance-fokussierte Provider

Wer nicht selbst hosten will — diese Anbieter sind auf Low-Latency-Inference mit Open-Source-Modellen spezialisiert:

  • Groq — eigener Chip (LPUs), speziell für Inference gebaut; bietet Llama, Qwen und Kimi mit außergewöhnlicher TPS
  • TogetherAI — breiter OSS-Modell-Katalog mit wettbewerbsfähigem Durchsatz und Serverless-Endpoints
  • Fireworks.ai — optimierte Inference-Plattform mit Low-Latency-Serving und Fine-Tuning-Support
  • OpenRouter — Meta-Router zum Vergleich von Latenz und Kosten über Provider hinweg, ohne Code zu ändern

Text-Diffusion-Modelle

Eine neue Modellklasse, die den gesamten Output auf einmal generiert statt Token für Token — dadurch grundsätzlich schneller als autoregressive Transformer. Noch früh, aber lohnt sich im Auge zu behalten:

Metrik: Tokens per second (TPS) — wie schnell das Modell Output produziert. Über Modelle und Provider vergleichen, um den optimalen Speed/Quality-Tradeoff zu finden.

Model Routing

Leg dich nicht auf ein einzelnes Modell fest. Routen nach Task-Komplexität: ein schnelles, günstiges Modell für einfache Anfragen, das Frontier-Modell für Tasks, die wirklich tiefes Reasoning brauchen. Das senkt die durchschnittliche Latenz erheblich, ohne dort Qualität zu opfern, wo sie zählt.

Model Router
live
What's the weather?
SIMPLE
Fast Model
~50ms TTFT
routed
Frontier
~800ms TTFT
routed

Es gibt verschiedene Ansätze, von einfach bis anspruchsvoll:

Einfach: LLM-basierte Klassifikation

Ein kleines, schnelles Modell mit einem Klassifikations-Prompt entscheidet, welches Modell die Anfrage bearbeiten soll:

System: Classify the user message as either SIMPLE or COMPLEX.
SIMPLE: greetings, factual lookups, short answers, formatting.
COMPLEX: multi-step reasoning, code generation, analysis, creative writing.
Respond with a single word: SIMPLE or COMPLEX.

Das fügt einen schnellen LLM-Call vor der eigentlichen Anfrage hinzu — aber dieser Call nutzt ein winziges Modell mit minimalen Output-Tokens, also ist der Overhead gering.

Smarter: Logprobs-basierte Klassifikation

Manche Provider (insbesondere OpenAI) stellen logprobs bereit — die Log-Wahrscheinlichkeit, die das Modell jedem Output-Token zuweist. Statt eine vollständige Antwort zu generieren, fordere ein einzelnes Token mit max_tokens: 1 und logprobs: true an und vergleiche die Wahrscheinlichkeiten deiner Klassifikations-Tokens direkt:

// Response with logprobs
{
  "token": "SIMPLE",
  "logprob": -0.12
}

Logprobs sind immer natürliche Logarithmen (Basis e) von Wahrscheinlichkeiten. Zum Umrechnen: e^(-0.12) ≈ 0.89, das Modell ist also 89% sicher, dass die Antwort SIMPLE ist. Liegt das über deinem Schwellwert, route zum schnellen Modell. Sonst nimm das Frontier-Modell.

Das ist schneller und günstiger als eine vollständige Klassifikations-Antwort, weil nur ein einziges Token produziert wird und die Entscheidung direkt aus der Wahrscheinlichkeitsverteilung kommt.

Fortgeschritten: Embedding-basierte Klassifikation

Nutze ein Encoder-Modell, um das Embedding des Input-Prompts zu berechnen und es per cosine similarity mit vorab berechneten Embeddings deiner Klassifikations-Kategorien zu vergleichen. Kein generativer LLM-Call zur Inferenz-Zeit nötig — nur ein Embedding-Pass plus ein schneller Vektorvergleich.

  1. Embeddings für repräsentative Prompts jeder Kategorie vorab berechnen
  2. Zur Laufzeit den eingehenden Prompt embedden
  3. Gegen die Referenz-Embeddings per cosine similarity vergleichen
  4. Basierend auf dem nächsten Match routen

Das ist extrem schnell, weil Embedding-Modelle deutlich günstiger und schneller sind als generative Modelle und der cosine-similarity-Vergleich selbst praktisch kostenlos ist.

Anbieter wie Jina AI bieten das bereits als schlüsselfertige Lösung an — Zero-Shot- und Few-Shot-Klassifikation ohne eigenes Training.

Anspruchsvollste Variante: Fine-getunter Classifier

Für maximale Genauigkeit: ein kleines Klassifikationsmodell fine-tunen, indem ein Dense Layer auf ein vortrainiertes Encoder-Modell gesetzt wird. Das Training erfolgt auf gelabelten Beispielen eures echten Traffics, sodass der Classifier eure spezifischen Routing-Muster lernt.

Gute Basis-Modelle dafür:

Das ergibt einen Sub-Millisekunden-Classifier, der auf CPU mit nahezu perfekter Accuracy auf eurem spezifischen Workload läuft — erfordert aber gelabelte Trainingsdaten und einen initialen Trainingsschritt.


2. Minimiere Output-Tokens

Output-Tokens sind der rechenintensivste Teil der Inferenz. Deshalb berechnen die meisten Provider 2–4x mehr für Output-Tokens als für Input-Tokens. Jeder Token, den das Modell nicht generiert, spart Zeit, Geld und Latenz.

Strukturierter Output: Schema optimieren

Bei strukturiertem Output (JSON, Function Calls) bestimmt euer Output-Schema direkt die Token-Anzahl. Kürzere Attributnamen und kompakte Werte bedeuten weniger Tokens. Nutzt den Tokenizer Playground, um zu prüfen, wie euer Schema tokenisiert wird — der Unterschied kann erheblich sein:

Token Comparison (GPT-4 tokenizer)
Verbose schema33 tokens
{"task_title":"Review quarterly report","assigned_to":"marketing","due_date":"2026-04-15","is_completed":false,"priority_level":"high"}
Compact schema28 tokens
{"t":"Review quarterly report","to":"marketing","due":"2026-04-15","done":false,"p":"h"}
Saved:5 tokens (−15%)× 1000 items = 5000 tokens saved

15% weniger Tokens pro Item — und das summiert sich schnell, wenn ihr hunderte Ergebnisse streamt. Ihr könnt den kompakten LLM-Output in einem Post-Processing-Schritt auf euer vollständiges Domain-Schema mappen. Das Modell braucht keine menschenlesbaren Keys — euer Code schon. Jeder nicht generierte Token ist ein guter Token.

Textgenerierung: Kürze anweisen

Bei Textantworten, sei explizit im System-Prompt:

Answer in 1–2 sentences max. No preamble, no filler, no "Sure! Here's...".
Skip summaries and recaps. Lead with the answer.
If a list, use short bullet points, not paragraphs.

Metrik: Number of output tokens (NOT) — generierte Tokens pro Antwort. Über eure Prompts tracken und die schlimmsten Fälle zuerst optimieren.


3. Streame alles

JSONL Streaming vs Blocking
Streaming JSONL
0/5 items
Blocking JSON
Generating full list...
same time, worse UX

Streaming ist Industriestandard — Nutzer erwarten es. Es reduziert nicht die Gesamtgenerierungszeit, aber verbessert die gefühlte Geschwindigkeit dramatisch, weil Nutzer anfangen zu lesen, während das Modell generiert. TTFT von 200–400ms fühlt sich sofort an; 3 Sekunden leerer Bildschirm fühlt sich kaputt an.

Für strukturierten Output: JSONL verwenden — ein Item pro Zeile statt eines vollständigen JSON-Arrays. Todo-Items, Tabellenzeilen, Suchergebnisse — jedes wird gerendert, sobald es generiert ist, kein Warten auf die schließende Klammer.

Tool-Call-Outputs auch streamen. Wenn euer Agent ein anderes LLM aufruft — einen Summariser, einen Sub-Agent — sollte dieser innere Call zum Nutzer zurückgestreamt werden. Sonst: schneller initialer Stream, Totpause während der Tool-Ausführung, dann wieder Text. Die gesamte Kette streamen, nicht nur das äußere Modell.

Metrik: Time to first token (TTFT) — wie lange, bis der Nutzer den ersten Output sieht. Streaming ändert nicht die Gesamtzeit, senkt aber TTFT auf nahezu null.


4. Halte deine Tool-Oberfläche klein

Jeder Tool-Call unterbricht die Generierung — das AI SDK verarbeitet den Call, führt das Tool aus und füttert das Ergebnis in den nächsten LLM-Call ein. Jeder Roundtrip addiert Latenz, und bei einem Prompt-Cache-Miss (andere Maschine, abgelaufener Cache) wird der gesamte Kontext neu berechnet. Minimiere die Anzahl der Tool-Calls.

Tools für Use Cases designen, nicht für CRUD

Stelle deine REST-API nicht 1:1 dem Modell bereit. Designe Tools um das, was die KI erreichen muss, nicht um eure Datenstruktur:

Tool Design: CRUD vs Use-Case
3 CRUD-style calls — 3 round-trips700ms + 3× cache recompute
getUser(id: 42)200ms
getOrders(userId: 42)350ms
getPreferences(userId: 42)150ms
1 use-case call — 1 round-trip180ms
getUserDashboard(id: 42)180ms
Returns only what the AI needs — pre-formatted, paginated
Overhead saved2 fewer round-trips + 520ms less tool execution

Regeln für Tool-Output:

  • Nur die Daten zurückgeben, die die KI für die aktuelle Aufgabe braucht — nie rohe API-Dumps
  • Ergebnisse paginieren — nicht 500 Items zurückgeben, wenn die KI 5 braucht
  • Daten im Tool vorformatieren — Geldbeträge, Daten, Übersetzungen — damit die KI keine Tokens für die Konvertierung verschwendet

MCP: Achtet auf euer Token-Budget

MCP (Model Context Protocol) kann ein massiver Token-Sink sein. Die Kosten summieren sich aus mehreren Richtungen:

  • Schema-Größe — jede Tool-Definition wird in den Prompt injiziert
  • Tool-Anzahl — eine einzelne MCP-Verbindung lädt alle ihre Tools, nicht nur die benötigten
  • Serialisierungs-Overhead — MCP fügt Protocol-Level-Wrapping um jeden Call und jedes Ergebnis hinzu
  • Payload-Größe der Ergebnisse — MCP-Tools liefern oft mehr Daten als das Modell braucht

Mehrere MCP-Provider können leicht Zehntausende von Tokens zu jeder Anfrage hinzufügen. Für Produktion direkte Tool-Integrationen bevorzugen, bei denen ihr exakt kontrolliert, welche Tools exponiert werden und wie viele Daten sie zurückgeben. MCP für Entwicklung und Prototyping nutzen.

Code-Ausführung in Sandboxes

Die Branche bewegt sich weg von tool-lastigen Architekturen hin dazu, das LLM Code schreiben und in einer Sandbox ausführen zu lassen. Statt 10 spezialisierter Tools gebt dem Modell eine Code-Sandbox und ein paar SDKs — es schreibt die Integration selbst. Anthropic hat diesen Ansatz pioniert und bis zu 98,7% Token-Reduktion gegenüber äquivalenten MCP-Tool-Chains demonstriert.

SaaS-Sandbox-Provider:

  • E2B — Firecracker-MicroVMs mit ~150ms Boot, Python/JS SDKs
  • Daytona — Docker-basierte Sandboxes mit ~90ms Startup
  • Vercel Sandbox — ephemere MicroVMs, integriert mit dem Vercel AI SDK
  • Cloudflare Workers — V8-Isolate-basiertes Sandboxing, extrem schnelle Cold Starts

Self-hosted / OSS:

  • Boxlite — Local-first Micro-VM-Sandbox, kein Daemon nötig
  • Microsandbox — Self-hosted MicroVM-Sandbox in Rust, unter 200ms Startup

Bleibt bei Python oder TypeScript — LLMs kennen sie gut, und sie brauchen keine Compile-Steps, die die Interaktionsschleife verlangsamen.

Metrik: Tool-Call-Overhead — Anzahl der Roundtrips und Gesamt-Tokens, die von Tool-Definitionen und -Ergebnissen pro Request verbraucht werden. Weniger Tools, schlankere Ergebnisse, schnellere Antworten.


5. Optimiere für Prompt Caching

Prompt Caching ist eine der wirkungsvollsten Latenz-Optimierungen. Provider cachen den KV-State (die internen Berechnungen) eures Prompt-Prefix. Bei der nächsten Anfrage, wenn der Prefix übereinstimmt, werden diese Berechnungen komplett übersprungen. Gecachte Tokens werden zu einem Bruchteil der Kosten und Latenz frischer Tokens verarbeitet.

Prompt Caching — KV Computation
System
You are a financial analyst. Answer concisely...
Docs
Q3 Report: Revenue €4.2M, EBITDA €1.1M...
History
User: Show Q3 results / AI: Revenue grew 12%...
User
Break down by region
KV cached
Computed
All 22 tokens computed

Provider-Support

Nicht alle Provider handhaben Caching gleich:

  • OpenAIautomatisch, kein Opt-in nötig. Minimum 1.024 Tokens Prefix.
  • AnthropicOpt-in über cache_control-Breakpoints im API-Request. Minimum 1.024 Tokens (Sonnet/Haiku), 2.048 (Opus).
  • Google GeminiOpt-in über explizite „Cached Content”-Ressourcen. Höherer Schwellwert: mindestens 32.768 Tokens.
  • Groqautomatisch, greift bei wiederholten Prefixes. Gute Einsteiger-Doku.

Cache-Hit-Rate maximieren

Prompt von am meisten statisch zu am meisten dynamisch strukturieren. Der Cache matcht von oben — sobald sich etwas ändert, ist alles danach ein Cache-Miss.

  1. System-Prompt (statisch) — Instruktionen, Output-Format, Tool-Definitionen. Ändert sich nie zwischen Requests und sollte immer oben stehen.
  2. Dokumente (semi-dynamisch) — Wissensbasis, Referenzdaten, abgerufener Kontext. Ändert sich gelegentlich.
  3. History (semi-dynamisch) — Konversations-Turns. Wächst, aber der Prefix bleibt stabil.
  4. User-Nachricht (dynamisch) — die aktuelle Anfrage. Immer ganz unten.

Dynamischen Inhalt nicht in den System-Prompt packen. Ein häufiger Fehler: einen Timestamp wie "Current time: 2026-04-01T19:45:00Z" in die System-Nachricht injizieren. Das invalidiert den gesamten Cache bei jeder Anfrage, weil sich der Prefix ändert. Wenn ihr die aktuelle Zeit braucht, packt sie in die User-Nachricht am Ende.

Cache vorwärmen — einen Priming-Request beim Session-Start senden (z.B. mit einer leeren User-Nachricht), damit die erste echte Nutzer-Interaktion bereits einen warmen Cache trifft.

Metrik: Cache-Hit-Rate — Prozentsatz der Input-Tokens, die aus dem Cache bedient werden. Das im Provider-Dashboard monitoren. Ein gut strukturierter Prompt kann 80–95% Cache-Hit-Rates in konversationellen Anwendungen erreichen.


6. Thinking deaktivieren (oder reduzieren)

Extended Thinking kann die Output-Qualität stark verbessern — aber auf Kosten der Latenz. Thinking ist bei den meisten großen Foundation-Modellen mittlerweile standardmäßig aktiviert — wer es nicht konfiguriert hat, zahlt diese Latenz-Tax bei jeder Anfrage.

Thinking Latency Calculator
Model speed100 tok/s
501002005001000
Thinking budget2.048k tokens
off5122.048k8.192k32.768k
Added latency before first token+20.5s

Thinking deaktivieren für einfache Tasks, oder ein knappes Token-Budget setzen für Tasks, die von etwas Reasoning profitieren. Manche Modelle (z.B. Gemini 2.5 Pro) erlauben kein vollständiges Deaktivieren — man kann nur das Budget reduzieren. Testet, wo die Qualität unter das akzeptable Niveau für euren Use Case fällt. Das lässt sich auch mit der Model-Routing-Technik aus Abschnitt 1 kombinieren — ein Classifier passt das Thinking-Budget dynamisch pro Request an: einfache Anfragen mit deaktiviertem Thinking, komplexe mit höherem Budget.

Provider-Konfiguration

  • OpenAIreasoning_effort-Parameter: low, medium, high. Für einfache Tasks auf low setzen oder deaktivieren. Unterstützt auch max_completion_tokens zum Deckeln des gesamten Outputs inklusive Reasoning.
  • Anthropicthinking-Parameter mit konfigurierbarem budget_tokens. Auf type: "disabled" setzen zum Deaktivieren, oder ein niedriges Budget (z.B. 1024 Tokens) für leichtes Reasoning.
  • Google Geminithinking_config mit thinking_budget. Auf 0 setzen zum Deaktivieren, oder Token-Anzahl deckeln.

Metrik: Number of thinking tokens (NTT) — Tokens, die für Reasoning vor dem ersten Output-Token verbraucht werden. Das monitoren — es ist oft der größte Einzelbeitrag zur TTFT bei modernen Modellen.


7. Aggressive Memory-Kompaktierung

Ihr müsst nicht die exakte Konversationshistorie speichern — eine kompakte Zusammenfassung reicht oft aus. LLMs tendieren zu langen Antworten, und diese Antworten werden Teil des Kontexts für jede folgende Anfrage. Eine 6-Turn-Konversation kann leicht 1.000+ Tokens an History erreichen, wovon das meiste redundant ist.

Memory Compaction
YouWhat were Q3 results?
45t
AIRevenue grew 12% YoY driven by...
320t
YouCompare to Q2
38t
AIQ2 showed 8% growth, so Q3...
280t
YouBreak down by region
52t
AIEU +18%, US +6%, APAC +14%...
410t
Context size
1145 tokens

Konversation nach jeder Interaktion komprimieren — den Austausch zusammenfassen und die vollständige History ersetzen. Kompaktierung asynchron nach der Antwort ausführen, damit sie den Nutzer nicht blockiert, mit einem schnellen, günstigen Modell. Tool-Call-Ergebnisse sind oft die schlimmsten Verursacher — die aggressiv kürzen.

Was die Kompaktierung überleben muss: Nutzerziele, aktive Einschränkungen, referenzierte Entitäten, unerledigte Aufgaben und Präferenzen. Verlustbehaftete Zusammenfassung, die diese fallen lässt, verschlechtert die Qualität schleichend. Euer Compaction-Prompt sollte explizit deren Erhalt sicherstellen.

Manche Provider unterstützen das out of the box — siehe Anthropics Compaction-API und ihr Session-Memory-Cookbook.

Das kann die Prompt-Cache-Hit-Rate senken, aber weniger Tokens zu verarbeiten überwiegt den Cache-Miss meist — besonders wenn sich die Konversationshistorie ohnehin ändert und ein Miss verursacht hätte.

Metrik: Average context length (ACL) — durchschnittliche Token-Anzahl eures gesamten Prompts über Requests. Wenn er über die Zeit wächst, aggressiver komprimieren.


8. Sei ein Höhlenmensch

Weniger Input-Tokens = weniger Verarbeitung = schnellere Antwort. Das gilt für euren System-Prompt (wo der meiste Ballast steckt) und die nutzergerichteten Teile des Prompts. Füllwörter, blumige Sprache, übermäßige Beispiele und doppelte Instruktionen entfernen. LLMs sind erstaunlich gut darin, komprimierte Prompts zu verstehen.

System Prompt Compression
Original46 tokens
You are a helpful assistant that specializes in analyzing financial data. When the user asks you a question, you should provide a clear, concise, and well-structured response. Always make sure to include relevant numbers and percentages where applicable.
Savings46t16t(−65%)

Caveman Compression ist ein praktisches Framework dafür. Die Kernidee: Artikel, Konjunktionen und redundante Qualifizierer streichen — nur die bedeutungstragenden Wörter behalten. „You are a helpful assistant that should always provide” wird zu „Provide”. Hässlich, effektiv.

Nicht blind anwenden: Aggressive Kompression funktioniert am besten bei repetitivem Instruktions-Scaffolding, aber Vorsicht bei Safety-Rules, Edge-Case-Handling und allem, wo Formulierungspräzision wichtig ist.

Mit Embeddings verifizieren

Woher wisst ihr, dass euer komprimierter Prompt noch dieselbe Information transportiert? Nutzt ein Embedding-Modell, um die semantische Ähnlichkeit zwischen Original und komprimierter Version zu vergleichen. Beide Prompts (oder einzelne Sätze/Absätze) embedden und cosine similarity berechnen — liegt sie über 0,95, habt ihr keine Bedeutung verloren. So könnt ihr aggressiv komprimieren und trotzdem sicher sein.

Metrik: Number of input tokens (NIT) — Gesamt-Input-Tokens pro Request. Euren System-Prompt regelmäßig auditieren — er tendiert dazu, über die Zeit zu wachsen, weil sich Instruktionen ansammeln.


9. Teure Arbeit in Background-Queues auslagern

Die Interaktionsschleife kurz halten. Nur die Antwort selbst sollte den Nutzer blockieren. Langlaufende Tool-Calls und jegliches Post-Processing in eine Background-Queue auslagern.

Sync vs Background
Main loop
Generate responsewaiting
User sees response immediately
Background queue
Compact memoryqueued
Update embeddingsqueued
Log analyticsqueued

Wenn ein Tool eine Side-Effect-Operation ausführt (DB-Write, API-Call), mach es async — sofort bestätigen, im Hintergrund ausführen. Post-Processing wie Memory-Kompaktierung, Embedding-Updates, Analytics und Logging gehören in die Queue. Unabhängige Tasks parallel feuern, nicht sequentiell.


10. Früh abbrechen und retrien

Wenn ihr strukturierten Output generiert, um eine UI zu treiben — konversationell, agentisch oder generativ — kann das LLM ungültige Daten produzieren, die Dinge kaputt machen. Nicht warten, bis die vollständige Antwort generiert ist, um zu validieren. Jeden strukturierten Chunk validieren, sobald er im Stream ankommt. Sobald etwas Ungültiges durchkommt, den Stream sofort stoppen und retrien. Es hat keinen Sinn, hunderte weitere Output-Tokens einer kaputten Antwort zu generieren.

Fail Fast — Validate While Streaming
Attempt 1streaming...
Retrywaiting
Validating each chunk as it arrives...

In der Praxis: Jede JSONL-Zeile oder jeden strukturierten Chunk beim Eintreffen parsen und gegen euer Schema validieren. Sobald ein Chunk fehlschlägt, Stream abbrechen, den Fehler an den Prompt anhängen (damit das Modell aus dem Fehler lernt) und retrien. Das ist schneller, als eine vollständig kaputte Antwort zu generieren und von vorne zu starten.


11. Schnelle Requests buffern

Das ist vor allem relevant für IDE-Copilots, Echtzeit-Editoren und UIs mit schnellen Änderungen, wo Nutzer mehrere Inputs in kurzer Folge abfeuern. Weniger relevant für Standard-Chat oder transaktionale Flows.

Eingehende Requests in einer Queue buffern und zu einem einzigen LLM-Call zusammenfassen, statt jeden einzeln sequentiell zu verarbeiten.

Request Buffering
Message queueempty
LLM
Idle — waiting for queue

Wenn ein neuer Request den aktuellen überholt, erwägt, die laufende Generierung abzubrechen — es lohnt sich möglicherweise nicht, eine veraltete Antwort zu Ende zu generieren. Fortgeschritten: Tool-Call-Unterbrechungen als Checkpoints nutzen — jeder Tool-Call pausiert die Generierung und bietet einen natürlichen Moment, die Queue auf neue Nachrichten zu prüfen. Das ist das Pattern, das Cursor verwendet.


Alle elf Techniken sind heute anwendbar, und die meisten lassen sich schrittweise einführen. Nicht alle auf einmal anwenden: den langsamsten Teil eurer Interaktionsschleife identifizieren und den zuerst fixen.

Wenn ihr KI-Interfaces baut und über diese Tradeoffs sprechen wollt — meldet euch.

Möchtest du mehr darüber erfahren, wie KI dein Unternehmen transformieren kann?

Termin vereinbaren