Rate limits, tokens en kosten: zo houd je je LLM-API-verbruik in de hand
Wanneer je webapplicaties bouwt die leunen op Large Language Models, kom je al snel uit bij de technische realiteit van API-integraties: tokens zijn niet gratis en de bandbreedte is niet oneindig. Vooral bij geavanceerde implementaties, zoals een RAG-architectuur (Retrieval-Augmented Generation) met vector search, kunnen de kosten en wachttijden ongemerkt oplopen. In deze gids ontleden we de mechanismen en bieden we concrete handvatten voor optimalisatie.
Wat is een token (en context vs. output)?
Grofweg staat één token gelijk aan driekwart van een woord. LLM-providers, of je nu modellen als Claude Pro-varianten of DeepSeek gebruikt, factureren op basis van twee stromen:
- Input tokens (Context): De tekst, instructies en context die jij naar het model stuurt.
- Output tokens (Completion): Het antwoord dat het model genereert.
Output-tokens zijn bij de meeste providers significant duurder dan input-tokens (soms wel een factor 3 tot 5). Bij het ontwerpen van je prompts is het dus essentieel om het model te sturen naar beknopte, gestructureerde output (zoals JSON) om de completion-kosten te drukken, zelfs als dit betekent dat je input-prompt wat langer wordt.
Rate limits: TPM en RPM begrijpen
Providers beschermen hun infrastructuur met limieten. Dit gebeurt meestal op twee assen:
- RPM (Requests Per Minute): Het aantal losse API-calls dat je mag maken.
- TPM (Tokens Per Minute): Het totale volume aan verwerkte tokens (input + output gecombineerd).
Als je deze limieten raakt, retourneert de API een HTTP 429 Too Many Requests foutmelding. Het domweg negeren hiervan leidt tot gebroken applicaties en slechte user experiences.
Caching, Batching en Routing
Om kosten te verlagen en rate limits te omzeilen, moet de architectuur slimmer worden opgebouwd:
- Semantic Caching: Sla antwoorden op veelgestelde, vergelijkbare vragen op. Als een user een vraag stelt die semantisch 95% overeenkomt met een eerdere vraag, serveer dan de cache in plaats van een nieuwe LLM-call te maken.
- API Orchestrators: Gebruik een gateway of orchestrator (bijvoorbeeld een setup met OpenClaw) om requests slim te routeren. Simpele classificatietaken kunnen naar een goedkoper, sneller model, terwijl complexe redeneringen naar het duurste flag-ship model gaan.
Pseudocode: Exponential Backoff & Caching
Hieronder een abstract voorbeeld van hoe je robuust omgaat met rate limits en caching in je applicatielaag:
function call_llm_api_met_backoff(prompt, max_retries=3):
# 1. Check lokale cache eerst
cache_result = controleer_semantische_cache(prompt)
if cache_result:
return cache_result
# 2. Voorbereiden API call
delay = 1
for poging in range(max_retries):
response = execute_request(prompt)
if response.status == 200:
sla_op_in_cache(prompt, response.data)
return response.data
if response.status == 429: # Rate limit geraakt
wacht(delay)
delay = delay * 2 # Exponentiële toename (1s, 2s, 4s...)
else:
breek_af_met_fout(response)
throw Error("Rate limit blijvend overschreden na retries")
Checklist Kostenbeheersing
- Max Tokens instellen: Definieer altijd een harde limiet voor
max_tokensin je API call om oneindige generatie-loops te voorkomen. - Slimme Model-Routing: Gebruik snelle, goedkope modellen voor simpele NLP-taken (zoals entiteit-extractie) en bewaar complexe modellen uitsluitend voor zware redenaties.
- RAG Optimalisatie: Verklein je chunk-size tijdens het vectoriseren en stel strenge drempelwaardes (similarity scores) in, zodat irrelevante context niet wordt meegestuurd.
- Batch Processing: Heb je asynchrone taken (bijv. achtergrond-samenvattingen)? Maak gebruik van de Batch-API endpoints die veel providers aanbieden tegen gereduceerde tarieven (vaak 50% korting).
- Monitor je Tiers: Upgrade op tijd naar hogere usage-tiers bij je provider door vooraf tegoed te storten, wat vaak direct je TPM/RPM plafonds verhoogt.
Hulp nodig bij het inrichten van een kostenefficiënte architectuur of het optimaliseren van je RAG-pipelines? Bekijk onze LLM Consultancy diensten voor technisch advies op maat.