Aantoonbaar besloten
Zes toetsen voor AI waarbij de mens het laatste woord heeft en dat ook kan laten zien.
Niels Roest, co-founder van Expeditionair
“De mens beslist.” Die zin staat in bijna elk AI-beleid dat ik lees. In een beleidsstuk, in een offerte van een leverancier, in de notulen van een directieoverleg. De zin is waar bedoeld en zegt toch weinig. Het is een belofte. Wat er bijna nooit bij staat, is hoe u die controleert.
Dat verschil wordt pas voelbaar als iemand ernaar vraagt. Een klant die wil weten waarom hij een bepaalde mail kreeg. Een accountant die vraagt wie een uitzondering heeft goedgekeurd. Uw eigen bestuur, dat na een incident wil weten sinds wanneer een systeem iets deed. Op dat moment helpt “de mens beslist” u niet verder. Dan wilt u kunnen aanwijzen wie besliste, op welk moment en over welke versie. En hoe u weet dat het systeem niet om die beslissing heen kon.
Dit stuk gaat over dat laatste. Niet over de vraag óf u mensen laat beslissen, maar over hoe u laat zien dat u dat doet. Ik gebruik daarvoor ons eigen werk. We gebruiken bij Expeditionair intern een AI-agent, Tara (meer over haar). Ze werkt in onze eigen Slack, heeft geen contact met klanten en is software: geen medewerker en geen adviseur. Ze zet concept-mails klaar, houdt onze pijplijn bij en doet voorstellen. Alles wat naar buiten gaat of wordt vastgelegd, gaat eerst langs Jeffrey of mij.
In de afgelopen maanden liepen we tegen een handvol situaties aan waarin die belofte op de proef werd gesteld. Niet in theorie, maar in ons eigen systeem, soms door onze eigen fouten. Daaruit komen zes toetsen. Ze zijn niet uitputtend, maar wel precies de vragen die ik zou stellen aan elk team of elke leverancier die zegt dat de mens beslist.
Toets 1: staat de poort vóór de handeling?
De eenvoudigste toets is ook de meest overgeslagen. Een controle die náást of ná een handeling zit, is een registratie. Pas een controle die ervóór zit, is een beslissing.
Tara zet opvolgmails klaar. Versturen doet ze niet. Een mail gaat pas de deur uit als Jeffrey of ik op akkoord klik. Dat kan iedereen opschrijven, dus we toetsen het. Een van onze tests controleert niet alleen dát er om akkoord wordt gevraagd, maar ook dat de controle in de code staat vóór het moment van versturen. Een tweede test kijkt naar het geval dat het misgaat: lukt het niet om ons het akkoordverzoek te tonen, dan moet Tara zeggen dat er niets is verstuurd. Stilte mag nooit lijken op “gelukt”.
Het verschil lijkt klein, maar is het niet. Een systeem dat eerst verstuurt en daarna netjes vastlegt wie er “akkoord” heeft gegeven, heeft een mooi logboek en geen enkele beslissing.
Hoe het eruitziet als het goed is: u kunt aanwijzen waar in het proces de handeling stopt tot er een mens klikt en wat er gebeurt als die klik niet kan worden gevraagd.
Toets 2: heeft de controle een uitkomst voor haar eigen mislukking?
Deze toets is subtieler. We leerden die op de moeilijke manier.
Eind augustus bouwden we een functie waarmee Tara op verzoek een eerder gesprek kan teruglezen. Voordat die aan mocht, moest er een reeks stappen zijn afgewerkt, waaronder een toets door onze jurist. De functie stond klaar in de code. Tussen “uit” en “aan” zat één instelling. Niets hield die instelling mechanisch tegen. Wat erop lette, was een dagelijkse controle: die zocht in ons register het vinkje bij de juristtoets en legde dat naast de werkelijke stand van de functie.
Op een middag kwam er een eerste akkoord binnen. Dat was ons eigen interne akkoord, niet dat van de jurist. Juist toen keken we opnieuw naar die dagelijkse controle en zagen we een gat. De controle kende een antwoord voor “vinkje staat uit” en een voor “vinkje staat aan”, maar niet voor “ik kan het vinkje niet vinden”. Was dat punt in het register ooit hernummerd of anders opgemaakt, dan had de zoekopdracht niets opgeleverd. Geen foutmelding, gewoon niets. En niets las in dat overzicht als “in orde”.
Dat is de faalvorm waar ik het meest voor waarschuw: een controle die bij haar eigen mislukking zwijgt, terwijl dat zwijgen eruitziet als groen. We hebben de controle aangepast: ze moet nu precies één vinkje vinden en wordt rood bij nul of bij twee. Die rode uitkomst hebben we eerst zelf gezien voordat we erop vertrouwden.
Hoe het eruitziet als het goed is: voor elke controle weet u wat die meldt als ze niet kan meten. Dat is iets anders dan wat ze meldt als alles goed is.
Toets 3: hoort het akkoord bij een versie?
Diezelfde week kwam er een tweede akkoord binnen, nu van de jurist. Getekend en klaar om de functie aan te zetten.
Alleen hoorde dat akkoord bij een versie van onze privacytekst die we intussen al hadden herschreven. En in de eerdere versie stond een belofte over een bewaartermijn die niet klopte. Het akkoord was te goeder trouw gegeven, op wat wij hadden aangeleverd. Het dekte alleen niet meer wat we gingen bouwen.
We zagen het zelf, bij onze dagelijkse controle. Het derde akkoord, op de herziene tekst, was het eerste dat telde. Pas toen ging de functie aan. Het kostte ons bijna twee dagen.
De les zit niet in de fout zelf. Teksten veranderen, dat hoort zo. De les is dat mensen een akkoord onthouden als een gevoel (“dat was toch goedgekeurd?”) en niet als een feit over één document. Wij lazen “akkoord” en vulden zelf in dat het nog gold. Dat is menselijk. Juist daarom moet het niet van ons geheugen afhangen.
Hoe het eruitziet als het goed is: elk akkoord verwijst naar een versie. Verandert die versie, dan vervalt het akkoord. Dat valt op zonder dat iemand het zich hoeft te herinneren.
Tussendoor: wat het spoor níét mag onthouden
Wie aantoonbaar wil beslissen, denkt al snel: dan leg ik gewoon alles vast. Dat is de verkeerde reflex. Een logboek is zelf ook een verzameling gegevens. Een spoor dat “voor de zekerheid” de volledige tekst meeneemt, is een tweede kopie van het gesprek, op een plek waar niemand meer kijkt.
Als Tara een gesprek terugleest, blijft er daarom in ons logboek één regel over: in welk gesprek, wie erom vroeg, wanneer en hoeveel berichten het waren. Geen tekst. In die regel is ook geen plek waar tekst in past. Dat staat in ons ontwerp, maar een ontwerpdocument bewijst alleen wat we ooit bedoelden. Onze dagelijkse controle kijkt daarom naar de draaiende database zelf. Krijgt die regel ongemerkt een veld bij, dan wordt het rood. Omdat ook een controle blind kan zijn, moet die tegelijk de ene plek vinden waar we bewust wél een kort tekstfragment bewaren. Lukt dat niet, dan kijkt de controle niet echt en wordt ook dat rood.
Aantoonbaar beslissen gaat dus over twee dingen tegelijk: vastleggen wat u moet kunnen verantwoorden en aantonen dat u niet meer vastlegt dan dat.
Toets 4: staat nieuw standaard uit en is aanzetten een besluit met een datum?
Deze zomer kreeg Tara drie functies die iets nieuws met onze gesprekken doen. Alle drie gingen de code in met de schakelaar uit. En niet “uit, tenzij”: uit totdat iemand letterlijk het woord “on” invult. Een tikfout of een “true” laat de functie uit staan. Bij twijfel gebeurt er niets.
Aanzetten is bij ons daarom geen technische stap maar een besluit. Elke omzetting krijgt een regel in ons register: wie de schakelaar omzette, op welke dag en hoe laat. Dat lezen we af uit het systeem zelf, niet uit het hoofd. Erbij staat het bewijs dat de draaiende versie de nieuwe stand ook echt heeft. Bij het teruglezen stond onze publieke privacytekst anderhalf uur eerder live dan de functie. Eerst zeggen wat we gaan doen en pas daarna doen.
Het klinkt als administratie, tot iemand vraagt sinds wanneer uw AI iets doet. Dan is er één antwoord, met een datum en een naam erbij.
Hoe het eruitziet als het goed is: voor elke functie die mensen of gegevens raakt, kunt u aanwijzen wanneer die aanging en wie dat besloot. Heeft niemand het besloten, dan staat de functie uit.
Toets 5: is het bewezen in productie, of alleen getest?
Na het aanzetten van de terugleesfunctie stonden al onze tests twee dagen lang groen. In diezelfde twee dagen kon de functie precies niets.
Om een gesprek terug te lezen, moet Tara aanwijzen welk bericht ze bedoelt. Voor die aanwijzingen is een vaste hoeveelheid ruimte gereserveerd. Een vast stuk uitleg in diezelfde ruimte was gegroeid. Met de functie aan bleef er geen plek over voor ook maar één aanwijzing. Onze testomgeving draait zonder database. Daardoor viel daar één regel weg die in het echt wél meetelt. In de test paste het net, in productie nooit.
We vonden het omdat we voor deze functie een extra eis hadden gesteld: één echte herlezing in productie als bewijs, voordat we de functie af noemen. De eerste echte poging leverde niets op. Daar begon het zoeken. De reparatie was klein. Het belangrijkste deel is de nieuwe test, die nu rekent zoals productie rekent.
Getest betekent dat het werkt waar wij keken. Aantoonbaar betekent dat het werkt waar het draait.
Hoe het eruitziet als het goed is: voor elke functie die ertoe doet, is er minstens één bewijs uit de echte omgeving. Een groene testrun geldt als voorwaarde en niet als eindpunt.
Toets 6: kan de controle falen?
De laatste toets gaat over alle vorige. Elke controle hierboven kan zelf stuk zijn zonder dat u het ziet. In augustus vonden we er een bij onszelf, in code die er zorgvuldig uitzag. Die controle moest bewaken dat een logboek er geen veld bij kreeg. Kwam er een veld bij van een net iets ander type, dan werd dat stil overgeslagen. Groen, elke keer.
Sindsdien breken we onze eigen code expres. We nemen één belofte, halen die in de code weg en draaien de tests. Worden ze rood, dan bewaakt de test die belofte echt. Blijven ze groen, dan hebben we een gat gevonden voordat iemand anders het vond. Elke breuk heeft een naam in gewone taal: “een mail kan zonder goedkeuring de deur uit” is er een van. Past een breuk niet meer op de code, omdat die intussen veranderd is, dan faalt de proef luid in plaats van zichzelf stil over te slaan.
Bij elke wijziging draaien de proeven op wat die wijziging raakt. Elke maandag draaien ze allemaal. Het zijn er op dit moment 171.
Hoe het eruitziet als het goed is: voor de beloften die er echt toe doen, hebt u gezien dat de controle rood wordt als u de belofte breekt.
Waarom het model zelf geen toets is
U mist misschien een zevende toets: gedraagt de AI zich goed? Die laat ik bewust weg.
Toen Tara voor het eerst in het echt een gesprek teruglas, stond daarin een zin die zich rechtstreeks tot haar richtte. Ze deed er niets mee en noemde die zin uit zichzelf “data over hoe dit gesprek eerder liep” in plaats van een opdracht. Dat was een mooi moment, maar het is niet waar onze veiligheid op rust.
Tekst die een AI leest, kan proberen die AI te sturen. Een model dat zich meestal goed gedraagt, is dan een meevaller en geen waarborg. De harde grenzen zitten daarom niet in wat Tara besluit, maar eromheen. Staat er in een teruggelezen bericht een regel die doet alsof die van mij komt, dan blijft het tekst van de echte afzender. Heeft ze in een gesprek een document gelezen, dan kan ze in dat gesprek niet meer in onze eigen software kijken. En voor beide grenzen hebben we gezien dat de test omvalt als we ze eruit halen.
Het gedrag van het model is dus geen toets. Het is wat u toetst.
Wat het kost
Eerlijk is eerlijk: dit maakt langzamer. De terugleesfunctie ging bijna twee dagen later aan dan had gekund. Elke nieuwe functie begint uit. Elke omzetting kost een regel in een register en een controle achteraf. En de proeven waarbij we onze eigen code breken, moeten worden onderhouden.
Daartegenover staat dat we op elke vraag van de soort “wie besliste dit en hoe weet u dat” een antwoord hebben dat niet van iemands geheugen afhangt. Voor een organisatie die AI inzet in werk dat klanten, medewerkers of geld raakt, vind ik dat een lage prijs.
Zes vragen voor uw eigen team of uw leverancier
- Waar in het proces stopt de handeling tot er een mens klikt? En wat gebeurt er als die klik niet gevraagd kan worden?
- Wat meldt uw controle als ze niet kan meten? En hoe verschilt dat van “alles goed”?
- Bij welke versie hoort dit akkoord? En wat gebeurt er met dat akkoord als de versie verandert?
- Welke functies staan standaard uit? En wie besloot wanneer ze aangingen?
- Wat is het bewijs uit de echte omgeving, naast de groene testrun?
- Heeft iemand gezien dat de controle rood wordt als u de belofte breekt?
Kan uw leverancier op vraag 6 geen voorbeeld geven, stel dan de andere vijf opnieuw.
Wilt u weten waar uw organisatie staat? De Oriëntatieis onze gratis scan van twaalf minuten. Vier van de vragen gaan over governance en compliance: afspraken over AI-gebruik, wie verantwoordelijk is voor de risico’s, bekendheid met de regelgeving en de omgang met data en privacy.