AI-architectuur
AI raakt vrijwel elk werkblad. Om te voorkomen dat dat neerkomt op vijftien plekken die elk hun eigen aanroep doen, loopt alles via één gateway.
Eén gateway voor alle generatie
Elke AI-aanroep gaat door één serverside gateway. Die regelt:
- Twee poorten vóór elke aanroep. De eerste toetst of de gebruiker op dit canvas mag schrijven: een lezer kan geen AI-functie starten, ook niet buiten het scherm om, en de poging kost niets. De tweede toetst of de organisatie nog budget heeft. Beide kijken naar hetzelfde canvas, en een aanroep die op een canvas werkt, kan niet stil terugvallen op het tegoed van de eigen organisatie.
- Promptresolutie serverside. Aanroepende code geeft nooit prompttekst mee, alleen een sleutel uit een vaste lijst. De bijbehorende prompt wordt op de server opgezocht — met een eventuele tenant-specifieke variant, anders de standaardversie. Een client kan dus geen eigen instructies aan het model meegeven.
- Modelkeuze per taaksoort. Zware redeneertaken krijgen het sterkste model; mechanisch werk zoals ontdubbelen, clusteren en labelen krijgt een sneller en goedkoper model. Die toewijzing staat centraal, niet verspreid over de code, en is in beheer per klasse en per AI-knop in te stellen: model, denkdiepte en tijdsbudget. Een nieuw model zet de beheerder op de lijst met zijn prijs, vergelijkt het op de testomgeving naast het oude model met een proefset, en zet de klasse of knop om; geeft het nieuwe model een fout, dan valt die knop terug op het vorige. Een nachtelijke controle vergelijkt de modellijst met die van de leverancier.
- Twee routes, één instelling. Een aanroep loopt rechtstreeks naar de modelleverancier of via de AI-gateway van Vercel; dat is een platforminstelling. Naast de route kent het platform de instelling regio: wereldwijd of EU. Bij EU gaat de aanroep uitsluitend via de gateway, naar aanbieders die in de EU verwerken, en weigert het platform de aanroep als dat niet waar te maken is. Route en regio staan bij elke aanroep in de verbruiksregistratie.
- Bestendigheid. Time-outs per taaksoort, en opnieuw proberen uitsluitend bij tijdelijke storingen aan leverancierszijde — nooit na een time-out, want dat garandeert alleen maar een tweede time-out.
- Terugval bij een weigering. Weigert een model een aanroep voordat er uitvoer is, of is het overbelast, dan volgt precies één nieuwe poging op een ander model dat actief staat, alleen als er nog tijd in het budget van de aanroep is. Na een time-out of afkapping volgt geen tweede poging, en nooit op een uitgefaseerd model.
- Budgetbewaking. Vóór elke aanroep wordt het verbruiksbudget van de tenant getoetst.
- Verbruiksregistratie. Model, tokens en kosten per aanroep worden vastgelegd voor inzicht en kostentoerekening.
De grounding-keten
Zo komt een onderbouwde AI-bewering tot stand:
- Opknippen. Een geüpload document wordt verdeeld in samenhangende blokken van ongeveer 400 tokens, zo'n 300 Nederlandse woorden, met respect voor zins- en kopgrenzen. Eerder werd met kleinere fragmenten gewerkt; die bleken te versnipperd voor bruikbare synthese.
- Betekenis vastleggen. Elk blok krijgt een numerieke representatie van zijn betekenis, opgeslagen in dezelfde database.
- Zoeken, begrensd op aantal. Bij een AI-vraag worden standaard de acht best passende blokken opgehaald, aangevuld met een lichte zoektak op namen en cijfers. Bij extractietaken groeit het aantal mee met een tekenbudget (veertigduizend tekens voor extractie). Een document dat de consultant voor een werkblad heeft gelabeld, gaat bij zo'n taak helemaal mee zolang het in het budget past.
- Alleen bronmateriaal. Het zoeken gebeurt over een afgeschermde weergave die uitsluitend aangeleverd bronmateriaal bevat. Eerder gegenereerde AI-output kan nooit als bewijs terugkomen — bewaakt met een eigen contracttest.
- Gecontroleerde verwijzing. Het model moet verwijzen naar de fragmenten die het daadwerkelijk kreeg. De server toetst elke verwijzing tegen die set. Een verwijzing die er niet in zat, wordt geweigerd of gemarkeerd.
- Vastleggen bij de bewering. Bestandsnaam, pagina en fragment worden meegeschreven, zodat de bronvermelding leesbaar blijft als het document later opnieuw wordt geïndexeerd.
Documenten hebben versies. Wie een nieuwe versie uploadt, ziet wat er veranderd is, en per onderdeel dat nog op de vorige versie rust laat de AI nakijken of het nog klopt en stelt een bijgewerkte tekst voor, die de consultant goedkeurt.
Stap 5 is het verschil tussen "vraag het model om bronnen" en een controleerbare bewijsketen.
Latency en betrouwbaarheid
Serverless functies hebben een harde bovengrens van 60 seconden. Toen voor kwaliteitsredenen op een sterker maar trager model werd overgestapt, liepen zware generaties daar tegenaan: de functie werd afgebroken en de gebruiker kreeg een onbegrijpelijke fout.
Dat is structureel opgelost in plaats van door terug te gaan naar een zwakker model:
- Streamen. Het antwoord komt binnen terwijl het geschreven wordt. Daarmee verdwijnt de time-outmuur én ziet de gebruiker voortgang.
- Regelgewijze uitvoer. Gegenereerde lijsten komen regel voor regel binnen en worden per stuk bewaard; de gebruiker kan een voorstel al accepteren, verwerpen of bewerken terwijl de rest nog binnenkomt. Wordt een generatie toch afgekapt, dan levert dat een bruikbaar deelresultaat op in plaats van een onbruikbaar half bericht, en telt wat al geschreven was mee in de kosten. Op het IT-werkblad stopt de generatie aan de serverkant zodra de gebruiker het onderdeel verlaat.
- Achtergrondtaken. Werk dat niet binnen één functie past, loopt als taak met eigen status en voortgang. De gebruiker kan wegklikken en terugkomen; een analyse van het vermogensmodel loopt op de server door en staat klaar met een rood bolletje bij terugkomst.
- Modelkeuze per taakzwaarte en hergebruik van vaste promptdelen, wat zowel tijd als kosten scheelt.
De budgetbewaking blijft in al deze paden actief, ook wanneer aanroepen parallel lopen. Is het tegoed op, dan leest de gebruiker dat in de taal van het canvas, in plaats van een technische foutmelding.