De AI-agent die ik heb gelanceerd, slaagde voor 23 unit tests, maar binnen een uur na livegang verzon hij een productfunctie en noemde hij een prijs die drie keer lager lag dan de werkelijkheid. Toen de gebruiker dit erop wees, hield de bot voet bij stuk, eindigde het gesprek en verloor ik een klant. De fout bewees dat een reeks deterministische unit tests de betrouwbaarheid van een agent niet kan garanderen.
Waarom unit tests tekortschieten voor AI-agents
Unit tests werken voor traditionele code omdat dezelfde input altijd dezelfde output oplevert. “2 + 2 = 4” is een garantie die je kunt verifiëren met een eenvoudige gelijkheidscontrole. Een LLM-gestuurde agent verandert echter zijn output op basis van de prompt, de omringende context en de status van eventuele externe tools die hij aanroept. Een test die controleert op exacte string-gelijkheid mist hallucinaties, toonveranderingen of schendingen van de guardrails. De stille fout die een klant kostte, laat zien dat je de hele interactie moet evalueren, niet alleen geïsoleerde functies.
Een evaluation harness bouwen voordat er feature-code wordt geschreven
Ik draaide de volgorde van de ontwikkeling om: eerst ontwerp ik een evaluation harness met vier lagen, en daarna schrijf ik de agent. De harness voert 131 tests uit in één keer, kost ongeveer drie cent per run en is in ongeveer elf minuten klaar. Ik wijs elke test toe aan het kleinste model dat het aankan, en bewaar grotere, duurdere modellen voor momenten waarop ze echt waarde toevoegen.
Laag 1 – Tool-functionaliteit
De eerste verdedigingslinie controleert of de agent zijn tools correct kan aanroepen. Tests dekken succesvolle zoekopdrachten, opzettelijk foutieve queries en gesimuleerde API-fouten. Omdat het gebruik van tools grotendeels deterministisch is — de aanvraag is ofwel correct geformatteerd, of de API geeft een foutmelding — volstaan eenvoudige Python-assertions. Het opvangen van een foutief geformatteerde aanvraag voorkomt verwarring in latere stappen.
Laag 2 – Instructieopvolging
Vervolgens verifieert de harness of de agent de guardrails respecteert. Een kleiner LLM fungeert als evaluator en scant de reactie van de agent op naleving: in karakter blijven, verboden onderwerpen vermijden en het vereiste JSON-schema produceren. Deze laag vangt semantische afwijkingen op die unit tests missen, zoals het in een onbedoelde persona glippen of het lekken van interne prompts.
Laag 3 – Doelgericht gedrag
De derde laag is de meest kritieke. Het stelt de vraag of de agent daadwerkelijk zijn doel bereikt. Voor een lead-generatiebot betekent dit bevestigen dat hij de juiste kwalificerende vragen stelt en op het juiste moment doorverbindt met een mens. Ik gebruik hier een reasoning-georiënteerd model, omdat dit de algehele flow kan beoordelen zonder de kosten op te drijven. Als de bot er niet in slaagt zijn doel te bereiken — zelfs als hij de eerste twee lagen passeert — wordt hij gemarkeerd voor een redesign.
Laag 4 – Prestaties
Tot slot registreert de harness de latentie en de snelheid van token-generatie. Trage reacties schaden de gebruikerservaring, vooral in real-time chat. Door deze metrieken naast de functionele juistheid bij te houden, zorg ik ervoor dat de agent zowel accuraat als responsief is.
Kostenbesparende keuzes
Het bedrag van $0,03 per run is geen marketingtruc; het komt voort uit het afstemmen van de testcomplexiteit op de modelgrootte. Deterministische tool-checks draaien op de goedkoopste runtime, instructie-naleving gebruikt een lichtgewicht model, en alleen de doelgerichte beoordelingen roepen een krachtiger, zij het duurder, model aan. Deze gelaagde aanpak houdt de totale kosten laag genoeg om de volledige suite bij elke codewijziging uit te voeren.
De afweging: snelheid versus veiligheid
Het introduceren van een harness zorgde voor extra wrijving aan het begin. De ontwikkelcycli werden langer en de tijdlijn voor de lancering verschoof.
Waar je op moet letten
- Model-gestuurde evaluatoren: Naarmate LLM's verbeteren, kan de evaluator in Laag 2 genuanceerder worden, waardoor het aantal vals-positieven afneemt terwijl subtiele beleidsschendingen nog steeds worden opgemerkt.
Conclusie
Als je AI-agents bouwt voor productie, is een gelaagde evaluation harness niet optioneel; het is fundamenteel. Door de kosten van uitgebreid testen naar voren te halen — $0,03 per run, elf minuten per suite — bescherm je jezelf tegen de stille fouten die unit tests simpelweg niet kunnen detecteren.
