Wat LLM-evaluaties zijn en waarom je ze nodig hebt
Een eval is een automatische test voor een AI-functie. Je stuurt een vaste set inputs door je systeem, geeft de output een score en vergelijkt het resultaat met de vorige release. Dit artikel is voor product- en engineeringteams die LLM-functies uitbrengen en prompts, modellen en retrieval willen aanpassen zonder te gissen wat er kapot is gegaan.
Gewone unittests gaan ervan uit dat dezelfde input dezelfde output geeft. LLM-systemen werken met kansen, en kleine wijzigingen hebben grote gevolgen. Een aangepaste prompt die één klacht oplost, kan ongemerkt twintig andere cases breken. Een nieuwe modelversie kan tegelijk de toon, de opmaak en het weigergedrag veranderen. Zonder evals is elke release een inschatting op basis van een paar uitgekozen voorbeelden.
Met evals krijg je:
- Een kwaliteitsscore die je in de tijd kunt volgen.
- Een releasecontrole die regressies tegenhoudt voordat gebruikers ze zien.
- Het vertrouwen om van model te wisselen of kosten te verlagen, omdat je het effect kunt meten.
- Een gedeelde definitie van "goed" voor product, engineering en vakexperts.
Bouw de testset uit echte zaken
De bruikbaarste testsets komen uit echt verkeer en echt werk. Synthetische vragen van het team zijn vaak netjes en voorspelbaar. Echte gebruikers schrijven korte, dubbelzinnige vragen vol typfouten en plakken er een half document bij. Gebruik synthetische cases om gaten te vullen, nadat je de echte hebt verzameld.
Goede bronnen voor cases:
- 01Productielogs, als steekproef over verschillende gebruikers en vraagtypen, met de persoonsgegevens verwijderd.
- 02Supporttickets en escalaties, vooral die waarin de AI het fout had.
- 03Voorbeelden van vakexperts voor zeldzame cases die veel uitmaken, zoals een schadeclaim die moet worden afgewezen.
- 04Aanvallende cases: pogingen tot prompt injection, vragen buiten de scope en input in andere talen.
Begin met 50 tot 100 cases en groei naar een paar honderd. Label elke case op bedoeling, moeilijkheid en risico. Zo zie je wanneer een release eenvoudige vragen beter beantwoordt en tegelijk slechter scoort op risicovolle vragen. Maak van elke bug die je in productie vindt eerst een nieuwe case, en los hem daarna op.
Deterministische controles en beoordeling door een model
Gebruik de goedkoopste controle die de fout betrouwbaar vindt. Deterministische controles zijn snel, gratis en herhaalbaar. Beoordeling door een model werkt voor kwaliteiten die code niet kan beoordelen. Die is wel trager, kost geld en moet zelf ook worden gecontroleerd.
| Aspect | Deterministische controles | Beoordeling door een model |
|---|---|---|
| Voorbeelden | Geldige JSON, klopt met het schema, verplichte velden, exacte waarden, verboden zinnen, genoemde ID's bestaan | Juistheid ten opzichte van een referentie, trouw aan de bronnen, toon, volledigheid |
| Kosten en snelheid | Milliseconden, geen API-kosten | Seconden per case, modelkosten bij elke run |
| Herhaalbaarheid | Bij elke run identiek | Wisselt een beetje; zet het beoordelende model en de prompt vast |
| Grootste risico | Te letterlijk voor antwoorden in vrije tekst | Het beoordelende model kan fout zitten of langere antwoorden voortrekken |
In de praktijk combineren we ze. Controles in code draaien eerst en stoppen snel bij een fout. Daarna scoort een judge (een model dat beoordeelt) wat overblijft met een kort beoordelingsschema, met een referentieantwoord als dat er is. Beoordeel zo'n 50 cases met de hand en vergelijk, voordat je een judge vertrouwt. Is de judge het vaak oneens met je experts, verbeter dan eerst het beoordelingsschema. Pas daarna laat je releases van de judge afhangen. Ons artikel over RAG evalueren gaat dieper in op de valkuilen van judges.
Regressiecontroles in CI
Evals bewijzen hun waarde als ze automatisch draaien. We draaien een snelle suite bij elke pull request die prompts, tools, retrieval of modelconfiguratie raakt, en de volledige suite voor elke release. Een minimale runner ziet er zo uit:
Met een paar regels wordt die controle betrouwbaar:
- Vergelijk met de baseline en ook met een absolute drempel. Dan zie je een daling van 96% naar 93%, ook als 93% nog slaagt.
- Markeer kritieke cases die altijd moeten slagen, wat de totaalscore ook is.
- Draai niet-deterministische cases meer dan eens en neem de uitkomst van de meerderheid, zodat één afwijkende output geen release tegenhoudt.
- Bewaar elke run met de promptversie, het model-ID en de commit-hash, zodat je elke verandering in de score kunt herleiden.
Volg kosten en latency naast kwaliteit
Een release die de nauwkeurigheid met twee punten verhoogt en de kosten per request verdubbelt, is misschien geen goede release. Leg bij elke run input- en outputtokens, kosten per case en latency-percentielen vast, naast de kwaliteitsscores. Een modelwissel wordt dan een afweging die je met cijfers kunt bespreken. Een nieuwer model kan bijvoorbeeld hoger scoren op risicovolle cases en tegelijk trager en duurder zijn. Het evaluatierapport laat zien hoeveel.
Neem budgetten op in de controle, zoals een limiet voor de p95-latency en maximale kosten per 1.000 requests. Kun je aantonen dat de kwaliteit gelijk blijft, dan kunnen eenvoudige vragen vaak naar een kleiner en goedkoper model.
Steekproeven die mensen nakijken
Evals dekken wat je had voorzien. Productie laat je al het andere zien. Houd naast de automatische suite een kleine, vaste controleronde door mensen aan:
- Neem elke week een vast aantal gesprekken uit productie als steekproef, met extra gewicht voor cases met lage zekerheid, negatieve feedback en hoog risico.
- Laat vakexperts ze beoordelen met hetzelfde beoordelingsschema als de judge. Zo zie je ook hoe vaak de judge het met mensen eens is.
- Maak van elke bevestigde fout een nieuwe case in de testset.
De controle kost weinig tijd, en de testset blijft aansluiten bij hoe mensen het product in de praktijk gebruiken.
Een checklist om te beginnen
- 01Haal 50 echte cases uit logs of tickets en schrijf bij elke case de verwachte uitkomst op.
- 02Voeg deterministische controles toe voor opmaak, verplichte velden en verboden inhoud.
- 03Voeg één beoordeling door een model toe met een kort beoordelingsschema, en vergelijk die met beoordelingen door mensen.
- 04Draai de suite in CI bij wijzigingen in prompts, modellen en retrieval, met een drempel en kritieke cases.
- 05Leg bij elke run de kosten en latency vast.
- 06Begin met een wekelijkse steekproef en voeg fouten toe aan de set.
We zetten evals op aan het begin van elk AI-project, nog voordat we de eerste prompt bijstellen, omdat ze elk later besluit sneller maken. Onze case over een schadeassistent laat zien hoe wekelijkse releases met een evaluatiecontrole eruitzien, en onze aanpak legt uit waar evals in ons proces zitten.