Strategy
Reserved-capacity AI-contracten: een veldgids met 16 fouten
Vrijdag, 23:47, tweede mok decaf, de HN-thread is 612 reacties diep, en maandag tekent de agency-eigenaar een tweejarige reserved-capacity commit die hij niet zou moeten tekenen.

Vrijdag, 23:47. De agency-eigenaar zit aan zijn tweede mok decaf en scrollt door Hacker News op een iPad in dock op het keukenblad. De thread is 612 reacties diep en heet iets als ACE-spec compute quotas: wat je echt betaalt na de kortingsstaffel. Iemand heeft een screenshot geplakt van een vendor-offerte: tweejarige reserved-capacity commit, drie cijfers achter de duizend per maand, "guaranteed throughput". De CFO vraagt al een tijdje, vriendelijk, waarom de OpEx-regel voor AI in Q1 verdubbeld is. De eigenaar slaapt slecht en tekent maandag de term sheet.
Het contract overleeft twee van zijn klanten.
Dit is een veldgids voor de zestien plekken waar die beslissing misgaat. We hebben het patroon vaak genoeg gezien — veertien agents in productie voor onze eigen klanten, plus de audits die we voor andere studios doen — om te weten dat de faalpatronen saai voorspelbaar zijn. We hebben ze gesorteerd op wat het kost om ze te repareren: een config-PR die je voor de lunch kunt shippen, een sprintje refactoren, of een ronde herkontraktering met klanten die je een kwartaal en een relatie kost.
Wat de thread eigenlijk zei
Voordat we naar de zestien fouten gaan, een waarschuwing over het bronmateriaal. De meeste HN-threads over compute-quotas zijn geen argumenten vóór of tegen reserved capacity. Het zijn argumenten over één specifieke rekensom: bij welke maandelijkse verbranding wint een committed-throughput tarief van pay-as-you-go, en wat telt de vendor als jouw tokens wanneer hij meet tegen de commit. Die rekensom verschuift elke twee maanden. De thread die je in mei las klopt in juli niet meer.
Een Nederlands agency onder de €12M draait, in onze ervaring, tussen de 8 en 22 klant-facing agents. De gemiddelde sustained burn is klein: een paar miljoen tokens per dag over alle klanten heen, bijna allemaal cacheable. De som voor een reserved commit op die schaal valt zelden in je voordeel uit. De som voor een dunne router voor drie providers, met een Hetzner GPU-node die embeddings en de lange staart aan goedkope calls afhandelt, valt bijna altijd wél in je voordeel uit. Hetzners GPU dedicated servers beginnen ruim onder de €200 per maand voor een instap-RTX 4000 SFF Ada; voor een agency van jouw formaat vervangt die ene regel al de embedding-rekening.
Dus: zestien fouten. Genummerd omdat ze telbaar zijn, geordend op kosten om te repareren.
Tier één — fixbaar in een config-PR vóór de standup
Deze vind je als eerste. Ze vragen geen klantgesprek. De CTO opent de router-config, opent een PR, shipt voor de lunch.
1. De modelnaam staat hardcoded op drie plekken. Grep de repo op de letterlijke modelstring. Vind je 'm in code in plaats van in één config-map, dan kun je geen spend tussen providers verschuiven zonder deploy. Hernoem naar een alias (tier-fast, tier-deep, tier-cheap) en resolve aan de edge.
2. Geen token-budget per klant. De runaway loop van één klant betaalt de commit van alle anderen. Voeg een maandelijks token-plafond per klant toe, log overschrijdingen naar Slack, val terug op de goedkope tier zodra die overschreden is.
3. Prompt caching staat uit. Is je system prompt 4.000 tokens en heb je geen caching aanstaan, dan betaal je elke beurt het volle input-tarief. De vendors die het ondersteunen documenteren het netjes — Anthropics prompt caching docs zijn het duidelijkst. Eén header omzetten en je input-kosten op long-context agents zakken een orde van grootte.
4. Alle calls gaan naar het vlaggenschip. Email-triage voor een klant heeft geen frontier model nodig. Route op taak: classify en samenvatten op een klein model, escaleer pas naar het vlaggenschip als de confidence van het kleine model laag is. Twee routing-regels, twintig regels code.
5. Geen fallback-URL. Als de provider om 14:00 CET 5xx-errors gooit — en dat gebeurt — sterft jouw agent en ziet de klant het. De router moet per task-tier een secundaire base URL hebben. De fallback hoeft niet goedkoop te zijn. Hij moet er gewoon zijn.
6. Eval-verkeer raakt prod-endpoints. Je nachtelijke regression-suite vreet hetzelfde quotum als de live klant-agents. Verplaats evals naar een aparte API-key met een eigen budget. Je wilt de alert wanneer evals overschrijden; je wilt niet dat ze je commit opeten.
Als je niet 30% van je spend tussen providers kunt verschuiven door één bestand aan te passen, heb je geen AI-architectuur. Je hebt een vendor lock-in vermomd als architectuur.
Tier twee — een sprintje refactoren
Deze kosten een developer-week. Ze breken geen klantcontract, maar ze vragen testen, staging-tijd en een echte uitrol.
7. Helemaal geen router. De SDK wordt in elf service-files geïmporteerd, elk met directe calls. Er is geen plek om een model, een fallback, een budget of een log-redactor toe te voegen. Bouw de router: één functie die (tier, messages, customer_id) aanneemt en een completion teruggeeft. Al het andere loopt erdoorheen. Zodra hij bestaat, worden de komende twaalf maanden optimalisatie config-wijzigingen.
8. Embeddings worden tegen API-tarief afgerekend. Een 1024-dim embedding model draait comfortabel op een enkele GPU die je voor ongeveer €200 per maand huurt. Betaal je per-token API-tarieven om elke nacht dezelfde productcatalogus te embedden, dan is de GPU binnen een maand terugverdiend. Pak een recent open-weights model, batch het werk, hang het achter dezelfde router.
# ruwe sizing — jouw cijfers zullen verschillen
# 10M embed tokens/dag @ €0.10/1M = €30/dag = €900/maand
# vs Hetzner GPU node = ~€184/maand, met ruimte over
9. De goedkope tier is een goedkoop model. Het moet een goedkoop pad zijn. De meeste calls in een klantenservice-agent zijn niet creatief. Het is retrieval plus formatteren. Draai die tegen je eigen RAG met een klein model en raak de foundation-vendor nooit aan. Het vlaggenschip is voor de ambigue 8% van de beurten.
10. Volledige prompts en completions worden onbeperkt gelogd. Strikt genomen is dit een tier-één fix, maar met tier-drie gevolgen als je hem overslaat. Redact PII bij de router, zet retentie op 30 dagen, leg het beleid vast. De dag dat je moet herkontracteren is de dag dat een klant vraagt waar zijn data is gebleven. Heb een antwoord klaar dat niet "ehm" is.
11. Model-versies gepind op strings die de vendor gaat deprecaten. Foundation-model vendors retireren snapshots op rolling schemas. Noemt jouw contract een specifieke snapshot, roept jouw code diezelfde snapshot aan, en sunset de vendor 'm volgend kwartaal, dan heb je twee crises die niet dezelfde crisis hoefden te zijn. Pin de alias, niet de versie, in taal richting klant.
12. Fine-tuning artefacten die je niet kunt meenemen. Sommige vendors fine-tunen op jouw data en noemen het resultaat "van jou". Lees de export-clausule. Kun je de weights of de equivalente prompt-distillatie niet downloaden, dan is het niet van jou. We hebben twee klanten hier uitgehaald. Het is een trage, beleefde, dure scheiding. Vermijd de bruiloft.
Tier drie — de ronde herkontraktering met klanten
Deze zijn de dure. Ze dwingen meestal een gesprek af met elke klant wiens SOW de agent raakt, en vaak ook een prijsonderhandeling, omdat de oorspronkelijke prijs uitging van de commit-rekensom van de vendor.
13. De SOW noemt een model op merk. "Powered by [Vendor X]'s [Model Y]" leest fijn in een sales deck. Het leest slecht in de rechtszaal als Vendor X de prijzen 40% verhoogt en jouw klant zegt dat hij voor Model Y getekend heeft, niet voor Model Z. Verkoop de uitkomst (response time, nauwkeurigheid op de eval-set, uitgespaarde uren). Verkoop nooit het merk op de binnenkant van de doos.
14. Data-residency clausules die één regio van één vendor noemen. Toen je "data verwerkt in EU-Frankfurt door [Vendor]" schreef, sloot je de deur voor de andere twee providers, die allebei óók Frankfurt-verwerking aanbieden onder andere namen. Schrijf de clausule rond de residency, niet rond de route.
15. Per-seat-pricing gebakken op volume-discount math. Jouw klant betaalt €X per seat. Die prijs ging uit van de tier-drie commit-korting van de vendor. Komt het gebruik van die klant niet opdagen — of op de verkeerde tier — dan is jouw marge een afrondingsfout. Reken af op tokens-verbruikt-door-de-klant, met een ruime included bundel, niet op een statische seat fee die de vendor-kosten verbergt.
16. De reserved-capacity commit zelf. De grote. Meerjarig, throughput-guaranteed, take-or-pay. Heb je dit getekend voordat je zes maanden router-data had die je echte burn-verdeling per klant en per task-tier liet zien, dan tekende je blind. De fix is niet technisch. De fix is het account team van de vendor bellen en eerlijk vragen om een herstructurering naar een korter termijn met conversie naar usage credits. Sommigen doen het. Sommigen niet. Binnen een week weet je waar je staat.
De reserved commit is zelden de grootste fout in absoluut geld. Het is bijna altijd de grootste fout in optionaliteit. Optionaliteit stapelt zich op; geld is een regel op een factuur.
De volgorde waarin je ze fixt
Niet de volgorde waarin ze genummerd staan. Fix tier-één eerst, volledig, in één PR-cyclus. Je herwint genoeg marge in week één om tier twee mee te financieren. Tier twee bouwt de router en de GPU-node — twee tot drie sprints. Pas dan, met echte data in de hand, open je de tier-drie gesprekken met klanten en vendor.
Doe je het andersom — beginnen met de pijnlijke klantgesprekken omdat die het meest urgent voelen — dan voer je die gesprekken zonder leverage, want je kunt klant noch vendor nog een geloofwaardig alternatief laten zien.
Wat we blijven leren
Een verkoper van een foundation-model vendor wordt betaald op commit-volume. Een HN-thread wordt betaald op engagement. Jouw CFO wordt betaald op de kaspositie. Geen van deze drie wordt betaald op de lange-termijn vorm van jouw agency. Jij wel. De router is de goedkoopste verzekering die je ooit zult kopen voor je recht om van gedachten te veranderen.
Toen we vorig najaar de agent-stack voor een Nederlandse verzekeringsmakelaar herbouwden, was wat we tegenkwamen een eerdere vendor-commit die de routing aan één provider-regio vastpinde — dus zetten we een dunne router ervoor, behandelden we de bestaande commit als een betaalde bucket om leeg te trekken, en verplaatsten we embeddings naar een Hetzner GPU-bak. Zes maanden later was de spend van de makelaar 46% lager op hetzelfde aantal agents; dat werk valt binnen onze AI-agents-praktijk.
Vijf minuten, morgenochtend
Open de router-config. Heb je er geen, open dan het bestand dat de SDK importeert. Grep op de letterlijke modelnaam. Tel de hits. Dat aantal is je tier-één-foutenscore, nog voordat je de contracten überhaupt hebt opengeslagen.
Kern
Als je niet 30% van je AI-spend tussen providers kunt verschuiven door één bestand aan te passen, heb je een vendor lock-in vermomd als architectuur.
FAQ
Zou een agency onder de €12M ooit een reserved-capacity AI-commit moeten tekenen?
Zelden, en nooit voordat je zes maanden router-telemetrie hebt. De meeste agencies van jouw formaat zijn beter af met pay-as-you-go over twee of drie providers, plus een kleine GPU-node voor embeddings.
Tussen welke providers route je in de praktijk?
We noemen ze bewust niet in klant-SOWs. Het punt van een router is dat het antwoord elk kwartaal kan veranderen zonder dat er een contract breekt. Drie is de praktische sweet spot: één vlaggenschip, één snelle, één goedkope.
Is een Hetzner GPU van €200 per maand écht genoeg voor productie-embeddings?
Voor de meeste agency-workloads, ja. Eén instapkaart verwerkt miljoenen embedding-tokens per dag als je de catalogus 's nachts in batches ververst. Live query-verkeer is daar een fractie van.
Hoe lang kost het om de router te bouwen?
Voor een team dat de SDK kent, één tot twee sprints tot een productieklare versie met fallback, budgettering en PII-redaction. Het dure deel zit in het herbedraden van elf verspreide call sites, niet in de router zelf.
Wat als we de meerjarige commit al getekend hebben?
Bel deze week het account team. Veel vendors herstructureren naar een kortere termijn of converteren de resterende commit naar usage credits, vooral als je kunt laten zien dat je de relatie wilt laten groeien in plaats van eruit te lopen.