AI agents
Triage-classifiers vergeleken: Mistral, Llama, Haiku 4.5
Mistral Small 3, Llama 3.3 70B op Groq en Claude Haiku 4.5 op 1.928 geanonimiseerde burgermails. Echte kosten per ticket, dialect-vloeren en cijfers die leaderboards nooit meten.

Het is maandag bij een Nederlandse gemeente met 180.000 inwoners. De gedeelde inbox voor burgermail telt 412 ongelezen berichten. Sommige melden een kapotte lantaarn op de Kerkstraat. Andere klagen over de barbecue van de buurman. Twee zijn persoonlijk aan de burgemeester gericht, en één is een hulpvraag van een ouder die net zijn baan kwijt is. De triagemedewerker is tot donderdag op vakantie.
Dit is het werk dat we moesten automatiseren. Geen generatie. Geen chat. Alleen routeren, urgentie bepalen, en een regel samenvatting voor de behandelaar die het ticket uiteindelijk opent. 28.000 stuks per maand, elke maand, met pieken op maandagochtend als de weekendklachten allemaal tegelijk binnenvallen. We draaiden dezelfde dataset in mei 2026 drie weken lang door drie kandidaten: Mistral Small 3, Llama 3.3 70B via Groq, en Claude Haiku 4.5. Geen van de publieke leaderboards vertelde ons wat we nodig hadden om te kiezen.
Classificatie is geen generatie
Het model leest één Nederlandstalige mail, kiest één van veertien afdelingen, kiest één van drie urgentieniveaus, en schrijft de zin die de behandelaar als eerste leest. Dat is het hele werk.
Drie dingen tellen. Koos het de juiste afdeling. Koos het de juiste urgentie. Weigerde het, verzon het een afdeling die niet bestaat, of verzon het een feit dat de burger nooit heeft geschreven.
Wat niet telt. MMLU-score. Long-context recall over 200k tokens. Codeerkwaliteit. Lengte van de reasoning chain. De leaderboards die wij lazen, maten geen van de dingen waar onze inkoper daadwerkelijk een factuur voor zou krijgen.
De benchmark die we draaiden
We pakten 2.000 tickets uit de live inbox, anonimiseerden ze, en lieten twee medewerkers van de gemeente elke mail labelen met de juiste afdeling, de juiste urgentie, en een referentiesamenvatting van één zin. Inter-rater agreement op de afdeling lag op 96,4%. We schrapten de 72 tickets waarover de labellers het oneens waren, en hielden 1.928 geldige cases over.
De prompt was voor alle drie de modellen identiek: een Nederlandse system message met acht voorbeelden, waarin de veertien afdelingen elk één keer voorkwamen, gevolgd door de ruwe mail. De output was een JSON-object met department, urgency en summary_nl. Geen retries. Geen retrieval. Geen tool calls. We wilden weten wat elk model zonder hulp kon.
We draaiden elk model drie keer over de 1.928 tickets en namen de mediaan. Kosten zijn de daadwerkelijk gefactureerde bedragen in euro's tegen het tarief dat elke provider ons in mei 2026 rekende, geëxtrapoleerd naar een maand van 28.000 tickets, inclusief prompt caching waar de provider dat aanbood. Latency is de p95 wall-clock tijd van request tot gevalideerde JSON.
{
"department": "Klantcontactcentrum",
"urgency": "normal",
"summary_nl": "Bewoner meldt kapotte lantaarn op de Kerkstraat ter hoogte van nummer 14."
}Waarom deze drie en geen andere. Mistral Small 3, omdat de inkoper voor de AVG-positie een in de EU gevestigde provider als optie nodig had. Llama 3.3 70B op Groq, omdat de snelheidsclaim te mooi klonk om waar te zijn en we het wilden verifiëren. Haiku 4.5, omdat het het kleinste Anthropic-model was waarvan de nieuwe prijs binnen ons budget viel. We screenden GPT-4o-mini in een kleinere pilot, zagen dat het op Nederlands gelijk eindigde met Mistral en duurder was, en lieten het vallen.
Mistral Small 3, de goedkope
Mistral Small 3 (24B parameters, Apache-licentie, geserveerd via de eigen API van Mistral) haalde 89,2% afdelings-accuracy en 84,1% urgentie-accuracy. Het kostte €18 per maand om alle 28.000 tickets te classificeren. Het weigerde 0,1% van de tickets, vrijwel altijd wanneer de burger iets schreef dat in de buurt van zelfbeschadiging kwam en de safety filter activeerde.
Waar het verloor, was op Nederlands dialect. Een ticket in het Limburgs of Twents werd ongeveer twee keer zo vaak verkeerd gerouteerd als een in Standaardnederlands. Daarnaast hallucineerde het acht keer in de 1.928 tickets een afdelingsnaam. De gemeente heeft een 'Klantcontactcentrum'. Mistral verzon steeds 'Bureau Klantcontact', wat die tickets in een map zou laten belanden die niet bestaat.
Het rate-limit-incident is een zin waard. Op de tweede testmaandag plafonneerde Mistral ons zonder waarschuwing op 60 requests per minuut op het Small 3 endpoint. We zaten niet boven de gepubliceerde tier. Support loste het in 48 uur op, prima voor een benchmark, niet prima voor productie. Anthropic en Groq publiceren per-tier limieten met een self-serve upgradepad. Mistral niet, althans niet voor onze organisatie.
De eigen release notes van Mistral voor Small 3 beschrijven het als 'a small model at the latency-and-quality frontier'. Op de geaggregeerde cijfers klopt dat. Voor Nederlandse burgermail is het niet de frontier. Het is de vloer waar we boven bleven.
Llama 3.3 70B op Groq, de snelle
Groq serveert Llama 3.3 70B op snelheden waardoor je je timer drie keer narekent. Onze p95 lag op 310 milliseconden end-to-end, inclusief TLS en JSON-parsing. Dat is in onze test ongeveer vier keer sneller dan Mistral en drie keer sneller dan Haiku.
Het model haalde 91,7% afdelings-accuracy en 86,4% urgentie-accuracy. Beter dan Mistral, slechter dan Haiku. De kosten kwamen uit op €34 per maand voor 28.000 tickets tegen het gepubliceerde tarief van Groq voor Llama 3.3 70B.
De catch waren gehallucineerde afdelingen. Llama 3.3 70B verzon 27 keer een afdelingslabel. Zes daarvan klonken goed, maar stonden niet in onze routeringstabel. Eenentwintig waren afdelingsnamen van andere Nederlandse gemeenten die het model vermoedelijk tijdens training had gezien. 'Wijkteam Zuid' bestaat in Utrecht, maar niet bij onze klant. Om ze allemaal op te vangen was een strikte JSON-schema validator met retry nodig, en die retry vrat een flink stuk van het latency-voordeel van Groq op.
Snelheid is niet gratis als je 'm aan guardrails moet uitgeven.
Claude Haiku 4.5, de saaie die won
Haiku 4.5 haalde 94,3% afdelings-accuracy en 91,2% urgentie-accuracy. Het kostte €58 per maand voor het volledige volume van 28.000 tickets tegen het gepubliceerde Haiku-tarief van Anthropic, met prompt caching op de eight-shot system message. P95-latency was 920 ms. Het hallucineerde twee keer in 1.928 tickets een afdeling, beide keren met een lage confidence in zijn eigen reasoning trace.
Met Nederlandse dialecten ging het eerlijker om dan de andere twee. Een ticket in het Twents over een 'kapotte lantern' werd netjes naar openbare verlichting gerouteerd. Mistral stuurde dezelfde mail naar algemene klachten. Llama stuurde 'm naar 'Wijkbeheer Oost', een afdeling die niet bestaat.
Haiku 4.5 is niet het goedkoopste model. Het is het model waar we na drie maanden geen enkele extra guardrail voor hebben hoeven schrijven, buiten de JSON-schema validator. Dat telt, want het alternatief is een behandelaar die op dag vijf een verkeerd gerouteerd urgent ticket ontdekt.
Voor smalle classificatie op gemeentelijke schaal bespaart het model dat €40 per maand meer kost ongeveer twee operations-dagen per week aan misroute-opruiming. Het goedkope model is niet goedkoop zodra een mens het moet rechtzetten.
De cijfers die leaderboards overslaan
Publieke leaderboards rapporteren MMLU, GSM8K, HumanEval, soms een Nederlandse benchmark uit 2023. Wat ze niet rapporteren, is wat op je factuur en in je incident channel terechtkomt.
Hallucinated-class rate. Hoe vaak een classifier een label verzint buiten de toegestane set. Over onze runs van 1.928 tickets lagen die op 0,4% voor Mistral, 1,4% voor Llama op Groq, en 0,1% voor Haiku. Geen van de drie leveranciers publiceert dit cijfer op een benchmarkpagina.
Kosten tijdens een burst. Ons piekuur is maandag 09:00 tot 10:00, als ongeveer 1.400 weekendklachten in een uur binnenvallen. Kosten per 1k tokens zeggen tijdens een burst niets. Wat telt is of de provider je rate-limit zet, of failover naar een tweede regio werkt, en of je p99 onder je SLA blijft. Groq had het beste burst-gedrag dat we maten. Anthropic had de cleanste graceful-degrade toen we een soft limit raakten. Mistral plafonneerde ons op een tarief waar we ons met een telefoontje langs moesten praten.
Weigeringspatroon op emotionele tickets. Gemeentemail bevat een niet-triviaal aantal burgers in crisis. Een model dat weigert om een ticket rond zelfbeschadiging als 'sociale dienst, urgentie hoog' te classificeren vanwege zijn safety filter, is erger dan nutteloos. Het verbergt het urgente ticket. Alle drie de leveranciers zijn hier in het afgelopen jaar in verbeterd, maar de failure modes verschillen, en je moet ze op je echte data testen, niet op een opgeschoonde benchmark.
Dialect-vloer Nederlands. Er bestaat geen publieke benchmark voor Limburgs, Twents of Brabants geschreven Nederlands. Publieke benchmarks testen Standaardnederlands op Wikipedia-achtig proza. Burgermail is niets van dat alles. De enige manier om de dialect-vloer van een model te kennen, is een paar honderd dialect-tickets labelen en meten. Drie maanden verder voegen we nog steeds dialect-voorbeelden toe zodra een misroute een nieuw patroon laat zien.
Wat we hebben opgeleverd
We zetten Haiku 4.5 als primaire classifier in, met Llama 3.3 70B op Groq als fallback wanneer Anthropic een 529 overloaded teruggeeft. De JSON-schema validator draait op elke output, ongeacht welk model 'm produceerde. Misroutes per week zakten van 38 (het baseline-cijfer van de menselijke triagemedewerker) naar 11 in de eerste maand op Haiku. Gemiddelde wachttijd voor de burger tot eerste reactie ging van 38 uur naar 6.
De pipeline zelf is klein. Een Cloudflare Worker ontvangt de burgermail, strip de PII die hij niet nodig heeft, roept Haiku aan met de eight-shot prompt, valideert de JSON tegen het routeringsschema, en schrijft het gerouteerde ticket weg naar het zaaksysteem van de gemeente. Het hele hot path is minder dan 200 regels TypeScript. Het zware werk zat in de gelabelde benchmark, niet in de code.
De recente verhalen over convergerende frontier-modellen tellen hier. Als de top van het leaderboard afvlakt, verschuift de vraag van 'welk model is het slimst' naar 'welk model kost het minst om zonder mens ertussen voor burgers te zetten'. Dat antwoord rolt niet meer uit een benchmarkpagina.
Toen we deze burgermail-agent voor de gemeente bouwden, was de kloof tussen de vendor-benchmark en het cijfer waar onze klant écht een factuur voor kreeg, het hele project. We bouwden de benchmark in twee weken en hebben dezelfde harness hergebruikt op de volgende drie AI-agents die we hebben opgeleverd. Kies je vandaag een classifier, label dan eerst duizend tickets en draai ze door drie kandidaten heen voordat je tekent. Dat kan het leaderboard niet voor je doen.
Kern
Kies een classifier op je eigen gelabelde data, niet op een publiek leaderboard. Het goedkoopste model is het model waarvan je de misroutes niet hoeft op te ruimen.
FAQ
Waarom niet gewoon een Sonnet-tier model gebruiken en de vergelijking overslaan?
Sonnet is overkill voor één-shot classificatie, en de kosten op 28.000 tickets per maand zijn lastig te verantwoorden als Haiku 4.5 op deze taak 94,3% haalt. Bewaar de dure modellen voor werk dat die capaciteit echt nodig heeft.
Hoe ging je om met de AVG bij Amerikaans gehoste providers?
Mistral is standaard EU-gevestigd. Anthropic biedt EU-dataresidentie op enterprise-contracten. Groq doet dat op moment van schrijven niet, en daarom staat het in onze deployment als fallback en niet als primary.
Waarom niet een open-weights model fine-tunen op je eigen GPU's?
We hebben het doorgerekend. Onder de circa 200.000 tickets per maand verdien je het labelen, de hosting en de ops-overhead niet terug. Boven dat volume begint het te lonen. Deze gemeente zit eronder.
Kan een kleiner model overweg met Nederlandse regionale dialecten?
Niet op acceptabele accuracy in onze test. Mistral Small 3 routeerde Limburgs en Twents ongeveer twee keer zo vaak verkeerd als Standaardnederlands. Haiku 4.5 dichtte het grootste deel van dat gat. De dialect-vloer is echt, en het is de moeite waard om hem te meten.