Dirk Odeurs · AI Transformation
Referentiearchitectuur · Case study

Bestuurde agentische datatoegang

Hoe je autonome AI-agenten een open vraagbereik geeft over bedrijfsdata, zonder de controle over rechten, herkomst, kosten en risico op te geven — en hoe je dat zo bouwt dat het blijft werken wanneer de modellen erachter onherkenbaar veel capabeler zijn geworden.

Technology is the variable.
Trust is the constant.
AI transformation  ·  Change  ·  Governance
AuteurDirk Odeurs
Versie1.0 — augustus 2026
Reference implementationVediCore (multi-tenant ERP)
ToepassingsdomeinDomein- en vendorneutraal

§Managementsamenvatting

Organisaties willen AI-agenten die vragen over hun eigen data beantwoorden. De gangbare implementaties kiezen tussen twee kwaden: ofwel beperk je wat gevraagd mag worden (een vaste catalogus tools of rapporten — veilig maar dom), ofwel geef je het model vrije toegang (schema plus SQL-generatie — slim maar onbestuurbaar). Deze architectuur weigert die keuze.

Bevries de datazijde. Laat de vraagzijde vrij. Handhaaf deterministisch, buiten het model.

De kern is een gateway: één doorgang tussen redeneerders en data, waar rechten, tenant-afbakening, volume, herkomst en kosten worden afgedwongen — niet door instructies aan het model, maar door code die draait ongeacht wat het model probeert. Daarboven staat een semantische laag die vastlegt welke entiteiten, velden, relaties en gecertificeerde metrieken bestaan, elk met een gevoeligheidsklasse. De agent stelt binnen die laag vrij zijn eigen bevragingen samen — ook vragen die niemand vooraf bedacht heeft — terwijl hij nooit een SQL-string aanraakt en zijn eigen afbakening niet kan uitbreiden.

Vraagbereik
Open
Elke vraag die uitdrukbaar is in de semantische laag — geen vooraf gedefinieerde rapporten
SQL-injectie
Onmogelijk
Structureel: er is geen tekstpad van model naar database
Modelwissel
Configuratie
Geen enkele veiligheidscontrole zit in het model of de prompt
Verantwoording
Volledig
Elk cijfer herleidbaar tot beslissing, query en bronrij; herspeelbaar

De vier stellingen die dit document verdedigt

  1. Alleen deterministische handhaving is capaciteitsonafhankelijk. Controles die in de prompt zitten worden zwakker naarmate modellen sterker worden; controles die in de infrastructuur zitten niet. Dat is de enige betrouwbare toets voor "houdt dit stand".
  2. De semantische laag én de kennislaag zijn het waardevaste bezit. Modellen, prompts en integraties depreciëren binnen maanden. Wat appreciëert zijn de twee lagen die betekenis dragen: het semantisch register met classificatie, policy en metriekdefinities (wat de data is en wie ze mag zien), en de kennislaag met domeinregels en precedenten (wat ze betekent en hoe deze organisatie beslist). Een betere redeneerder haalt uit beide méér, niet minder. Investeer navenant.
  3. Autonomie is een bestuurde as, geen herbouw. Van ophalen tot zelfstandig handelen is één ladder met zes treden op dezelfde gateway. Meer capaciteit betekent hoger op de ladder, niet een nieuwe architectuur.
  4. Bij superieure modellen verschuift verificatie van redenering naar bewijs. Je kan de gedachtegang van een systeem dat je overtreft niet nalezen. Wat wél controleerbaar blijft is de bewijsketen: welke rechten, welke query, welke rijen, welke definitie.
Over de reference implementation De architectuur is domein- en vendorneutraal beschreven. Waar het concreet moet worden, verwijst dit document naar VediCore — een multi-tenant ERP voor de bouw-/schoonmaaksector met ±60 domeinmodules, meerdere juridische entiteiten en zeven rollen — waarin de bouwstenen bestaan of gepland zijn. §3.3 vertaalt dezelfde architectuur naar een internationale verzekeraar, om te tonen dat de generalisatie geen belofte maar een afbeelding is.
Hoofdstuk 1 — Stelling
1.1Het probleem op het juiste niveau 1.2Drie klassen van controle 1.3Capaciteitsonafhankelijkheid 1.4Tien ontwerpprincipes
Hoofdstuk 2 — De vijf lagen
2.1Overzicht van de vijf lagen 2.2Laag 1 · Kennislaag — tier 0 t/m 3 2.3Laag 2 · Bestuurslaag — overzicht 2.3.ALaag 2 · Bestuurslaag — het semantisch register 2.3.BLaag 2 · Bestuurslaag — policy en verplichtingen 2.3.CLaag 2 · Bestuurslaag — het handelingsregister 2.3.DLaag 2 · Bestuurslaag — routering als bestuur 2.4Laag 3 · Gateway — overzicht 2.4.ALaag 3 · Gateway — API en de negen stappen 2.4.BLaag 3 · Gateway — bevragingstaal en compilatie 2.4.CLaag 3 · Gateway — weigeren als onderhandeling 2.5Laag 4 · Redeneerlaag — overzicht 2.5.ALaag 4 · Redeneerlaag — orkestratie 2.5.BLaag 4 · Redeneerlaag — provider-adapters 2.5.CLaag 4 · Redeneerlaag — de agentlus 2.5.DLaag 4 · Redeneerlaag — het antwoordcontract 2.5.ELaag 4 · Redeneerlaag — de autonomieladder 2.6Laag 5 · Bewijslaag
Hoofdstuk 3 — Onderneming
3.1Toezicht en regelgeving 3.2Kostentransparantie 3.3Eén architectuur, twee contexten 3.4Operating model 3.5Aansluiting bij het industriepatroon
Hoofdstuk 4 — Bestendigheid
4.1Wat er verandert bij superieure modellen 4.2Anti-patronen 4.3Eerlijke grenzen 4.4Invoeringstraject
Bijlagen
AUitgewerkt voorbeeld — ERP BUitgewerkt voorbeeld — verzekeren
Hoofdstuk 1
Stelling

1.1Het probleem op het juiste niveau

De meeste mislukte AI-datatoegangprojecten mislukken niet in de bouw maar in de probleemstelling. "Bouw een chatbot op onze data" is een opdracht die het antwoord al verkeerd stuurt.

Hoe geef je een niet-deterministische redeneerder een open vraagbereik over data die meervoudig bestuurd is — per entiteit, per rol, per gevoeligheidsklasse, per rechtsgebied — zonder dat elke nieuwe vraag opnieuw een veiligheidsvraag wordt?

De laatste bijzin is de hele opgave. In een systeem met vaste rapporten is elk rapport één keer beoordeeld en daarna veilig. In een systeem met een open vraagbereik bestaat "de vraag" nog niet op het moment dat je hem moet goedkeuren. Je kan dus niet vragen beoordelen; je moet toegang beoordelen. Alles in deze architectuur volgt uit die verschuiving.

Vier eigenschappen van het probleem die het ontwerp sturen

Asymmetrie tussen vraag en data

Je kan de vragen niet opsommen — de nuttige zijn per definitie de niet-voorziene. Je kan de data wél opsommen, en wie er wat van mag zien. Bevries daarom het bestuurbare en laat het onbestuurbare vrij.

De redeneerder is vluchtig

Het model dat je vandaag kiest is over achttien maanden achterhaald, mogelijk van een andere leverancier, mogelijk lokaal draaiend om soevereiniteitsredenen. Alles wat governance is, moet daarbuiten staan — anders herbouw je het bij elke wissel.

Fout is duurder dan traag

Een traag antwoord is hinderlijk. Een overtuigend fout antwoord op een schadereserve, een marge of een blootstelling stuurt een verkeerde beslissing en wordt pas veel later ontdekt. Elk compromis valt daarom uit in het voordeel van controleerbaarheid.

Verantwoording is functioneel, niet cosmetisch

In een gereguleerde omgeving is "waarom zei het systeem dit?" geen debugvraag maar een toezichtvraag, met termijnen en bewaarplichten. Bewijsvoering hoort in de architectuur, niet in de logging-backlog.

1.2Drie klassen van controle

Dit is de analytische ruggengraat van het document. Elke controle in elk AI-systeem valt in één van drie klassen, en die klasse voorspelt hoe de controle zich gedraagt als het model beter wordt.

Klasse 1 — Persuasieve controleDegradeert bij groeiende capaciteit

Wat: instructies in de systeemprompt. "Toon nooit gegevens van andere klanten." "Verzin geen cijfers." "Vraag om bevestiging vóór je iets wijzigt."

Waarom het faalt als grens: de werking hangt af van de bereidheid en het begrip van het model. Ze is niet af te dwingen, niet te bewijzen en niet uitputtend te testen — de ruimte van formuleringen die haar omzeilen is oneindig. Erger: een capabeler model vindt méér paden, niet minder, en tekst uit de data zelf (een klantnaam, een e-mailtekst, een schadedossier) kan met dezelfde autoriteit spreken als jouw instructie.

Legitiem gebruik: kwaliteit, toon, formaat, voorkeursvolgorde. Nooit: vertrouwelijkheid, afbakening, autorisatie, onomkeerbare handelingen.

Klasse 2 — Restrictieve controleVeilig, maar begrenst de waarde

Wat: beperken wat überhaupt geprobeerd kán worden. Een vaste catalogus van tien tools. Vooraf geschreven rapporten. Geen SQL-toegang.

Waarom het onvoldoende is: het werkt — maar het plafond ligt bij de verbeeldingskracht van de ontwerper op de dag dat hij de catalogus schreef. Naarmate modellen capabeler worden, wordt de restrictie de bindende beperking in plaats van het model. Je betaalt voor een redeneerder en gebruikt hem als menukaart.

Legitiem gebruik: kosten, prestaties, blast radius van handelingen. Ongeschikt als: primaire veiligheidsgrens, omdat elke uitbreiding opnieuw een veiligheidsbeoordeling vraagt.

Klasse 3 — Deterministische handhavingCapaciteitsonafhankelijk

Wat: controle die buiten het model draait en niet afhangt van zijn medewerking. Policy-evaluatie per veld. Afbakening die in de query geïnjecteerd wordt. Toelatingscontrole op volume. Read-only databaserollen. Verplichte herkomstvastlegging.

Waarom het standhoudt: de effectiviteit is onafhankelijk van wie of wat de aanvraag doet. Een kluisdeur vraagt niet hoe slim de persoon ervoor is. Dezelfde controle werkt identiek voor een zwak model, een superieur model, een gecompromitteerde integratie of een medewerker met gestolen inloggegevens — en dat is precies de eigenschap die je in een bedrijfsomgeving nodig hebt.

Kosten: ontwerpwerk vooraf. Je moet je datamodel semantisch beschrijven en classificeren vóórdat je AI erop loslaat. Dat is de investering die dit document verdedigt.

De ontwerpregel die hieruit volgt Elke veiligheidseigenschap wordt afgedwongen door klasse 3. Klasse 2 dient uitsluitend kosten en prestaties. Klasse 1 dient uitsluitend kwaliteit. Dit is meteen een bruikbare toets voor elke bestaande AI-architectuur: neem de vijf belangrijkste controles, bepaal hun klasse, en tel hoeveel er in klasse 1 zitten. In de praktijk is dat het merendeel — en dat verklaart waarom veel proefopstellingen het niet tot productie halen zodra risicobeheer meekijkt.

Toetsing aan klassieke beveiligingsprincipes

Drie gevestigde principes vormen de lakmoesproef voor elke toegangsarchitectuur. Dit ontwerp verhoudt zich er als volgt toe — inclusief de plek waar het bewust van de zuivere leer afwijkt.

Zero Trust — uitgevoerd, en één stap verder

Elke bevraging wordt op het moment zelf volledig geverifieerd: identiteit uit de sessie, policy per veld, afbakening opnieuw geïnjecteerd. De gateway is het policy enforcement point, de bestuurslaag het policy decision point. Verder dan klassiek Zero Trust: ook de redeneerder zelf is onvertrouwd — het ontwerp neemt aan dat het model gemanipuleerd kan zijn (injectie via data), vandaar geen tekstpad naar de opslag en afbakening buiten zijn bereik. "Intentie is geen toegangsprimitief" is never trust, always verify, toegepast op bedoelingen.

Capabilities — het denkpatroon, zonder de token-machinerie

Het niet-vervalsbare zit erin: de afbakeningscontext bereikt de uitvoering buiten elk schema om, zodat de agent niet eens kán uitdrukken wat hem niet gegeven is; elke agent krijgt alleen het toolsubset van zijn rol; delegatie met vervaldatum is een klassieke capability-grant. Rondgereikte ondertekende tokens ontbreken bewust: binnen één servergrens met één reference monitor voegen ze niets toe. Zodra er servicegrenzen komen (de federatieve uitvoering, §3.3), materialiseren beslissingen wél als kortlevende ondertekende query-capabilities — zelfde model, gedistribueerde vorm.

Least privilege — als doorsnede, niet als grant-lijst

Zuiver PoLP per operatie×veld is bij open bevraging het duizenden-beslissingen-probleem — en onbeheerbare rechtenlijsten verzanden in verouderde grants: privilege sprawl schendt least privilege harder dan een grovere maar onderhouden structuur. Hier ontstaat de minimale bevoegdheid per aanvraag als doorsnede: rol×klasse ∩ subjectreikwijdte ∩ resource-verfijning ∩ verplichtingen (maskering, alleen-geaggregeerd, geen export) ∩ doelbinding ∩ toolsubset ∩ aflopende delegaties. Het minimale-pad-gedrag (eerst namen, dan één nummer) is dynamisch least privilege — minimalisatie per vraag, wat statische rechten per definitie niet kunnen.

Rollen encoderen in dit ontwerp geen intenties maar functienoodzaak (need-to-know); ze zijn een administratieve compressie van grants. De handhaving verwijst nergens naar bedoelingen.

1.3Capaciteitsonafhankelijkheid

De vraag "werkt dit nog over drie jaar, als AI bovenmenselijk is geworden?" is beantwoordbaar, en het antwoord is niet "we hopen het".

Definitie. Een controle is capaciteitsonafhankelijk wanneer haar effectiviteit niet afhangt van het vermogen van de entiteit die ze beheerst.

Toegangscontrole op een database is capaciteitsonafhankelijk: ze kent geen verschil tussen een junior analist en een superintelligentie, ze kent alleen legitimatie. Een instructie in een prompt is dat niet: haar werking is volledig een functie van hoe het model haar interpreteert.

Het criterium voor bestendigheid

Een architectuur houdt stand bij stijgende modelcapaciteit als, en alleen als, groeiende capaciteit de waarde verhoogt zonder de veiligheid te verlagen. Dat vraagt twee dingen tegelijk:

Capaciteit landt op compositie

Een beter model stelt betere vragen, kiest slimmere aggregaties, herkent scherper welke domeinkennis het nodig heeft en trekt betere conclusies uit weinig data. Al die winst valt binnen de vraagzijde — precies wat deze architectuur vrijlaat. Meer capaciteit betekent hier meteen meer waarde, zonder één regel code.

Handhaving raakt capaciteit niet aan

Policy-evaluatie, afbakeningsinjectie en toelatingscontrole draaien identiek, ongeacht wie vraagt. Ze worden niet zwakker doordat de aanvrager slimmer is. Meer capaciteit betekent hier géén extra risico — en dat is de enige reden waarom je een sterker model gerust kan inschakelen.

Depreciërende en appreciërende activa

Een praktische investeringsgids die uit hetzelfde denken volgt. Als je vandaag budget verdeelt over een AI-programma, is dit de verdeling die over drie jaar nog verdedigbaar is:

Depreciëert snel — houd dun en vervangbaarAppreciëert — hier hoort de investering
Promptteksten en few-shot-voorbeelden Ontologie en semantische laag — de vastgelegde betekenis van je entiteiten, velden en relaties
Modelkeuze, fine-tunes, leverancierspecifieke koppelingen Gegevensclassificatie — wat is gevoelig, waarom, en onder welk regime
Toolimplementaties die om de eigenaardigheden van één model heen gebouwd zijn Policy als data — wie mag wat, uitgedrukt zodat het evalueerbaar en testbaar is
Orkestratieframeworks van dit jaar Gecertificeerde metriekdefinities — de ene, gezaghebbende berekening van marge, blootstelling, schaderatio
Retrieval-afstemming rond een specifiek embeddingmodel Kennislaag en precedentenverzameling — hoe deze organisatie beslist, vastgelegd (§2.2)
Interface-details van de chatlaag Bewijs- en evaluatieverzameling — traces, gouden vragen, regressiedekking
De strategische consequentie Organisaties die hun budget in de linkerkolom stoppen, herbouwen elke achttien maanden en hebben na drie jaar niets opgebouwd. Organisaties die in de rechterkolom investeren, wisselen hun model in een middag en zien hun activa in waarde stijgen naarmate de modellen beter worden — want een betere redeneerder haalt méér uit een goede semantische laag, niet minder. Dit is de kern van een AI-transformatiestrategie: niet welk model je kiest, maar welke laag je bezit.

1.4Tien ontwerpprincipes

Uitspraken die altijd gelden, ongeacht domein, model of implementatie. Wanneer een keuze in de bouw met een principe botst, is de keuze fout — niet het principe.

1
Eén doorgang
Er bestaat precies één pad van een redeneerder naar data. Geen tweede route, geen "even direct" een bestaande API hergebruiken. Eén doorgang betekent één plek om te beveiligen, meten, cachen, beperken en auditeren — en één plek waar een fout aan het licht komt.
2
Afbakening wordt geïnjecteerd, nooit meegegeven
Tenant-, entiteits- en rechtsgebiedafbakening komt uit de geverifieerde sessie en wordt door de infrastructuur aan elke bevraging toegevoegd. Ze staat in geen enkel schema dat de agent ziet. Een agent kan zijn eigen afbakening niet verruimen — ook niet wanneer instructies in de data hem dat opdragen.
3
Ongeclassificeerd is onbestaand
Alleen expliciet geclassificeerde velden zijn bereikbaar. Een nieuwe kolom is onzichtbaar tot iemand er een gevoeligheidsklasse aan geeft. Blootstelling is een bewuste daad, nooit een neveneffect van een migratie — de meest voorkomende manier waarop dit soort systemen in de praktijk lekt.
4
Weigeren met redenen
Een geweigerde aanvraag levert een gestructureerd antwoord: wat werd geweigerd, waarom, en wat zou wél werken. Dat is het verschil tussen een agent die vastloopt en een agent die zichzelf corrigeert — en tussen een gebruiker die niets begrijpt en een gebruiker die weet wat hij moet aanvragen.
5
Volume is toelating, geen afkapping
Kosten worden geraamd vóór uitvoering. Boven de drempel komt er géén afgekapte set terug maar een weigering met telling en verfijnsuggesties. Stil afkappen is de gevaarlijkste faalwijze die bestaat: het antwoord oogt compleet en is het niet.
6
Betekenis is gezaghebbend, niet afleidbaar
Termen als omzet, marge, blootstelling of schaderatio hebben één definitie, vastgelegd als gecertificeerde metriek. Een redeneerder mag ze gebruiken maar niet opnieuw uitvinden. De vraag blijft vrij; de definitie niet.
7
Geen tekstpad naar de opslag
Bevragingen worden opgebouwd uit gevalideerde identifiers en geparametriseerde waarden. Er is geen veld waarin vrije tekst een query bereikt. Injectie is daarmee niet "afgeschermd" maar structureel onmogelijk — een eigenschap van de constructie, niet van de zorgvuldigheid.
8
Elk resultaat draagt zijn herkomst
Elk getal is herleidbaar tot de bevraging die het opleverde, de policy-beslissingen die golden, de definitie die gebruikt werd en de registerversie waaronder dat alles betekenis had. Zonder herkomst geen cijfer.
9
Lezen en handelen zijn gescheiden regimes
Handelingen zijn geen leesbevraging met een vlag. Ze hebben een eigen register met omkeerbaarheid, reikwijdte, voorwaarden en goedkeuringsvereisten. Autonomie stijgt langs een bestuurde ladder (§2.5.E), niet via een instelling.
10
De redeneerder is vervangbaar
Geen veiligheidseigenschap zit in het model, de prompt of een leverancierspecifiek formaat. Een ander model inschakelen is een configuratiewijziging, gevolgd door een meting — niet een herziening van de beveiliging.
Hoofdstuk 2
Referentiearchitectuur — de vijf lagen

2.1Vijf lagen

De scheiding die het systeem onderhoudbaar houdt. Elke laag heeft een eigen wijzigingsritme, een eigen eigenaar en een eigen kwaliteitsregime — en dat is geen esthetiek maar de reden dat een modelwissel de governance niet raakt.

Kennislaag — wat de organisatie weet; eigendom van domeinexperts
Tier 0 · Register
Welke domeinen bestaan, met trefwoorden
Tier 1 · Kern
Definities, invarianten, veldbetekenis, statusverlopen
Tier 2 · Regels
Bedrijfsregels, processen, randgevallen
Tier 3 · Precedent
Uitgewerkte gevallen, eerdere beslissingen, interpretaties
Bestuurslaag — declaratief, versiebeheerd; eigendom van data- en risicobeheer
Semantisch register
Entiteiten, velden, relaties, metrieken — met klasse en afbakeningspad
Policy
Subject × resource × actie → toestaan / weigeren / verplichting
Handelingsregister
Omkeerbaarheid, reikwijdte, goedkeuring per handeling
Routering
Modelrollen, providers, residentie-eisen, budgetten
Gateway — de enige doorgang; elke aanvraag doorloopt dezelfde negen stappen
Kennis-API
Tiers ophalen — óók rechtengecontroleerd en gelogd
Catalogus-API
Registerdoorsnede, geannoteerd met de rechten van deze aanvrager
Bevragings-API
Plannen (droogloop) en uitvoeren
Handelings-API
Voorstellen, goedkeuren, uitvoeren, terugdraaien
▲ ▼
Redeneerlaag — vervangbaar; kent geen opslag, geen rechten, geen afbakening
Orkestratie
Router → analisten (parallel) → synthese → criticus
Provider-adapters
Meerdere leveranciers achter één interface
Agentlus
Aanroep → gateway → resultaat → volgende ronde, met harde grenzen
Antwoordcontract
Gestructureerd, met aannames en herkomst
Autonomieladder
Bestuurde as: van ophalen (L0) tot handelen binnen envelop (L5) — autonomie wordt verleend, niet aangezet
Bewijslaag — verantwoording; niets is optioneel
Trace
Elke stap: beslissing, bevraging, rijaantal, tokens, kost, duur
Herspelen
Zelfde vraag, ander model of nieuwere registerversie → verschil
Evaluatie
Gouden vragen voor correctheid, veiligheid en zuinigheid
Toerekening
Kosten per gebruiker, afdeling, vraagsoort

2.2De kennislaag — tier 0 tot en met 3

Je bent hierKennislaagBestuurslaagGatewayRedeneerlaagBewijslaag
Kennislaag — wat de organisatie weet; eigendom van domeinexperts
Tier 0 · Register
Welke domeinen bestaan, met trefwoorden
Tier 1 · Kern
Definities, invarianten, veldbetekenis, statusverlopen
Tier 2 · Regels
Bedrijfsregels, processen, randgevallen
Tier 3 · Precedent
Uitgewerkte gevallen, eerdere beslissingen, interpretaties

Data zegt wat er gebeurd is. Kennis zegt wat het betekent. Een redeneerder die de eerste heeft en de tweede mist, produceert cijfers die kloppen en antwoorden die niet deugen.

TierInhoudLaadmomentWaarom deze laag bestaat
0 · Register Alle domeinen met trefwoorden, routes en een verwijzing naar hun kerndocument Altijd, in elke aanroep (gecached) De redeneerder weet wat er bestaat zonder iets ervan te kennen. Een paar duizend tokens vervangen honderdduizenden.
1 · Kern Doel van het domein, invarianten, veldbetekenis, statusverlopen, verboden Voor de één tot drie gekozen domeinen Voorkomt de meest voorkomende fout: correcte SQL op een verkeerd begrepen veld. Dit is waar "welke status telt als openstaand" thuishoort.
2 · Regels Bedrijfsregels, processtappen, randgevallen, uitzonderingen Op aanvraag, per sectie Onbegrensd in omvang zonder de contextkosten van elke vraag te verhogen. De redeneerder haalt op wat de vraag vereist.
3 · Precedent Uitgewerkte gevallen, eerdere beslissingen met motivering, interpretaties van toezichthouders, architectuurbesluiten Op aanvraag, wanneer de vraag om oordeel vraagt Institutioneel geheugen. Het verschil tussen een antwoord dat in het algemeen juist is en een antwoord dat consistent is met hoe deze organisatie beslist.
Waarom tier 3 de laag is die het meeste onderscheid maakt Tier 0 tot 2 maken een redeneerder competent. Tier 3 maakt hem consistent met de organisatie. Een schadebehandelaar die twintig jaar ervaring heeft, is niet waardevol omdat hij de polisvoorwaarden kent — dat staat in tier 1 — maar omdat hij weet hoe dit huis in een grensgeval eerder besliste en waarom. Dat is precies wat organisaties zelden vastleggen en wat de grootste kwaliteitssprong oplevert wanneer je het wél doet. Het is ook de laag die het snelst in waarde stijgt: elk afgehandeld grensgeval kan er als precedent bij.

Kennis is ook data

Alle vier de tiers worden opgehaald via de gateway, niet via een bestandslezing naast de deur. Drie redenen, en de derde is de belangrijkste: kennisdocumenten kunnen zelf gevoelige informatie bevatten — een tier-3-precedent beschrijft een concreet dossier; toegang tot een domeinkerndocument verraadt dat het domein bestaat; en de vraag welke kennis geraadpleegd werd, is onderdeel van de verantwoording van het antwoord. Kennisophaling is dus rechtengecontroleerd en gelogd, net als elke andere aanvraag.

2.3Laag 2 — De bestuurslaag: wat mag

Je bent hierKennislaagBestuurslaagGatewayRedeneerlaagBewijslaag
Bestuurslaag — declaratief, versiebeheerd; eigendom van data- en risicobeheer
Semantisch register
Entiteiten, velden, relaties, metrieken — met klasse en afbakeningspad
Policy
Subject × resource × actie → toestaan / weigeren / verplichting
Handelingsregister
Omkeerbaarheid, reikwijdte, goedkeuring per handeling
Routering
Modelrollen, providers, residentie-eisen, budgetten

De bestuurslaag is het declaratieve geheugen van wat mag: alles wat hier staat is data — versiebeheerd, evalueerbaar, testbaar en te simuleren vóór inwerkingtreding. Ze wijzigt op het ritme van de organisatie (een nieuwe rol, een strengere regel, een tijdelijke delegatie), nooit op het ritme van de code. En ze doet zelf niets: de gateway (laag 3) dwingt af wat hier gedeclareerd is.

De vier blokken hierboven worden in deze volgorde uitgewerkt: het semantisch register (§2.3.A), de policy (§2.3.B), het handelingsregister (§2.3.C) en de routering (§2.3.D).

De samenhang in één zin: het register beschrijft, de policy verleent, het handelingsregister begrenst het doen, en de routering begrenst de denker. Wie iets aan het gedrag van het systeem wil veranderen, verandert hier data — en kan in de bewijslaag nalezen wat die verandering deed.

2.3.ADe semantische laag

Je bent hierKennislaagBestuurslaagGatewayRedeneerlaagBewijslaag

Het register is de afgesproken werkelijkheid: wat er bestaat voor de AI. Nadrukkelijk niet het fysieke schema, maar een bewuste, geclassificeerde doorsnede daarvan met betekenis eraan vast.

// Eén resource, declaratief. Domeinneutraal patroon;
// hier ingevuld voor een commerciële opportuniteit.
defineResource({
  naam: "Opportuniteit", opslag: "leads", domein: "commercieel",
  omschrijving: "Verkoopkans vóór promotie naar uitvoeringsproject.",

  // VERPLICHT — geen resource zonder afbakeningspad. Lint faalt.
  afbakening: { soort: "TENANT", pad: "tenants.some.tenantId" },

  velden: {
    id:          { type: "id",    klasse: "INTERN" },
    naam:        { type: "tekst", klasse: "INTERN",      filterbaar: true },
    status:      { type: "enum",  klasse: "INTERN",      domeinwaarden: "LeadStatus" },
    ontvangenOp: { type: "datum", klasse: "INTERN",      filterbaar: true },
    waarde:      { type: "geld",  klasse: "COMMERCIEEL", aggregeerbaar: true },
    contactTel:  { type: "tekst", klasse: "PERSOONSGEGEVEN",
                   maskering: "laatste4", grondslag: "gerechtvaardigd belang — contactopname" },
    // Sleutels, tokens, ruwe documenten: staan hier NIET → bestaan niet voor de AI.
  },

  relaties: {
    interacties:  { naar: "Interactie",   soort: "veel", telbaar: true },
    conversaties: { naar: "Conversatie",  soort: "veel", telbaar: true },
    klant:        { naar: "Organisatie",  soort: "een" },
  },

  // Gezaghebbende berekeningen. De redeneerder mag ze gebruiken, niet herleiden.
  metrieken: {
    winratio: { klasse: "COMMERCIEEL", impl: canon.winratio,
                definitie: "gewonnen / (gewonnen + verloren), excl. ingetrokken",
                eigenaar: "Commercieel directeur", herzienOp: "2026-06-01" },
  },

  kwaliteit: { notitie: "Data vóór 2024 is gemigreerd; statussen zijn benaderd." },
  limieten:  { standaard: 50, max: 500 },
  indexen:   ["tenants.tenantId", "status", "ontvangenOp"],
})

Gevoeligheidsklassen

Vijf tot zeven klassen volstaan voor vrijwel elke organisatie. Meer klassen geven schijnprecisie en onbeheersbare matrices; minder dwingt alles naar het strengste regime.

KlasseAardStandaardregime
InternNamen, referenties, statussen, datumsAlle geauthenticeerde interne rollen
OperationeelUitvoering, planning, voortgang, capaciteitRollen met uitvoerende verantwoordelijkheid
CommercieelPrijzen, offertes, kansen, klantwaardeCommerciële en leidinggevende rollen
FinancieelBedragen, marges, kosten, blootstelling, reservesFinanciële rollen; afgebakend per juridische entiteit
PersoonsgegevenIdentificeerbare gegevens van natuurlijke personenBeperkt, met maskering en doelbinding; grondslag vastgelegd per veld
BijzonderGezondheid, biometrie, strafrechtelijk — AVG art. 9/10Alleen expliciete grondslag; vaak volledig uitgesloten voor AI-verwerking
GeheimSleutels, tokens, inloggegevens, ruwe documentenNiemand. Staat niet in het register — bestaat niet
Twee mechanismen die vaak verward worden: de whitelist en het drift-alarm De veiligheid komt van de whitelist en kost niets. De gateway bereikt uitsluitend velden die in het register staan; een veld dat er niet in staat is onbereikbaar — ook een veld dat gisteren via een migratie is toegevoegd. Blootstelling ontstaat door registratie, nooit door bestaan. Een update kan dus per constructie geen ongeclassificeerde data blootleggen, en tabellen buiten het register vragen nul werk.
De bouwstraatcontrole is iets anders: een verouderingsalarm, en hij geldt alléén binnen blootgestelde tabellen. Het risico van een migratie op een geregistreerde tabel is geen lek maar een register dat stil achterloopt: komt er op een blootgestelde factuurtabel een kortingsveld bij dat niemand registreert, dan lekt er niets — maar elke totaalvraag negeert voortaan de korting, en het antwoord oogt compleet terwijl het dat niet is. Daarom eist de build: staat een tabel in het register, dan draagt elke kolom van díé tabel een beslissing — een klasse (meestal geërfd van de tabel-default) of expliciet genegeerd. Eén bewuste beslissing per migratie op een blootgestelde tabel; de rest van het schema blijft buiten schot. Whitelist = veiligheid, gratis en schemabreed; CI-check = volledigheid, gericht en goedkoop.

Classificeren zonder de last: overerving en blootstellingsgrens

De voor de hand liggende tegenwerping: een serieus datamodel telt duizenden kolommen — de reference implementation telt er ruim drieduizend over 174 tabellen — en die stuk voor stuk classificeren is onbegonnen werk. Terecht. Daarom werkt de classificatie met vier mechanismen die de last terugbrengen van duizenden regels naar tientallen beslissingen:

1 · Alleen wat je blootstelt

De veiligheid zit in de whitelist: niet-geregistreerd = onbereikbaar, schemabreed en gratis. De bouwstraatcontrole is enkel het drift-alarm daarbovenop en geldt uitsluitend voor kolommen van al blootgestelde tabellen (zie het kader in §2.3.A hierboven). Een eerste fase met vijf resources vraagt dus vijf besluiten, niet drieduizend.

2 · Klasse erft van de tabel

Elke resource draagt één standaardklasse; alleen afwijkende velden krijgen een eigen regel. Een factuurtabel is standaard financieel, met het nummer als interne uitzondering en het ruwe documentveld als geheime. In de praktijk: één beslissing per tabel plus een handvol uitzonderingen — voor de reference implementation circa zestig tabelbesluiten in plaats van 3.500 veldregels.

3 · Machinaal voorstel, menselijke bevestiging

De eerste vulling wordt gegenereerd — uit naamconventies, typen en de bestaande kennisdocumenten — en door een mens beoordeeld. Dit is ook hoe de industrie het doet: classificatietooling stelt automatisch voor, mensen bevestigen de twijfelgevallen. Een middag review in plaats van weken invoerwerk.

4 · De discipline bestaat vaak al

Organisaties met per-veld-documentatie — datadictionaries, AI-bewerkbaarheidstabellen, gegevenscatalogi — voegen één attribuut toe aan een bestaand ritueel, geen nieuw proces. De reference implementation onderhoudt zulke veldtabellen al voor zestig modules; de klasse is er één kolom bij.

2.3.BPolicy: subject, resource, actie, verplichting

Je bent hierKennislaagBestuurslaagGatewayRedeneerlaagBewijslaag

Het register zegt wat er is. De policy zegt wie er wat mee mag. Bewust gescheiden: het register verandert met het datamodel, de policy met de organisatie — en ze hebben verschillende eigenaars en verschillende goedkeuringswegen.

Policy is data, geen code: evalueerbaar, testbaar, diffbaar, en te simuleren vóór inwerkingtreding. Standaard is weigeren. Beslissingen zijn niet binair maar drieledig.

Rechten staan nooit op het veld — de klasse is de schakel De registerdeclaratie van een veld bevat bewust géén rollen. Het register beantwoordt één vraag — wat is dit veld? (klasse: PERSOONSGEGEVEN) — en de policy de andere: wat mag deze rol met die klasse? Wil je een commerciële rol toegang geven tot contactgegevens, dan raak je het register niet aan; je voegt één regel toe aan de rechtenmatrix: rol COMMERCIEEL → lees:PERSOONSGEGEVEN → TOESTAAN, met doelbinding. Vanaf dat moment geldt dat voor élk veld van die klasse.
De rekensom laat zien waarom deze omweg de vereenvoudiging is en niet de complicatie. Rechten óp het veld: 3.500 velden × 7 rollen ≈ 24.500 beslissingen, en elke nieuwe rol dwingt langs alle velden. Rechten via de klasse: elk veld krijgt één keer een klasse (meestal geërfd van zijn tabel) en de matrix is 7 rollen × 7 klassen — één scherm van ±49 cellen, grotendeels op het default "weigeren". Een nieuw veld erft automatisch de juiste rechten via zijn klasse; een nieuwe rol is zeven vinkjes. Is de klasse te grof — contactgegevens van léads wel, van werknemers niet — dan krijgt de policyregel een reikwijdte (klasse + resource): nog steeds een handvol regels, geen veldwerk. Hetzelfde principe als beveiligingsclearances: wie SECRET mag lezen, mag alle SECRET-documenten lezen — niemand zet de clearance op elk document opnieuw.
// Eén policyregel — de volledige vorm. Rechten worden verleend per (rol, actie,
// klasse), optioneel verfijnd per resource en per subjectbereik.
type PolicyRegel = {
  rol:        Rol                                // subject
  actie:      "lees" | "handel"
  klasse:     Gevoeligheidsklasse
  resource?:  ResourceNaam                       // verfijning: klasse+resource (leads wél, werknemers niet)
  reikwijdte?: "eigen" | "team" | "organisatie"  // subjectbereik binnen de geïnjecteerde afbakening;
                                                 // default "organisatie" — zet "eigen"/"team" waar
                                                 // portefeuilles persoonsgebonden zijn (§"Intentie")
  effect:     "TOESTAAN" | "WEIGEREN"
  verplichtingen?: Verplichting[]
  geldigTot?:  Datum                             // delegatie/mandaat: aflopende verlening bij vervanging
  verleendDoor?: GebruikerId                     // wie delegeerde — audit-spoor
}

type Beslissing =                                // uitkomst van policy-evaluatie per element
  | { effect: "TOESTAAN" }
  | { effect: "WEIGEREN";  reden: string; ontbrekendRecht: string }
  | { effect: "TOESTAAN"; verplichtingen: Verplichting[] }

type Verplichting =
  | { soort: "MASKEER";             patroon: "laatste4"|"domein"|"volledig" }
  | { soort: "ALLEEN_GEAGGREGEERD";  minGroepsgrootte: number }   // k-anonimiteit
  | { soort: "MAX_RIJEN";            n: number }
  | { soort: "GEEN_EXPORT" }                                     // tonen mag, meenemen niet
  | { soort: "MODEL_BEPERKING";      eisen: ModelEis }            // zie hieronder
  | { soort: "DOELBINDING";          toegestaneDoelen: string[]
                                       defaultDoel?: string }      // afgeleid/expliciet → trace (§"Doelbinding")
  | { soort: "VIER_OGEN";            goedkeurderRol: string }     // bij handelingen

Waarom verplichtingen het model bruikbaar houden

Zonder verplichtingen wordt elk gevoelig veld een dichte deur en verschraalt het systeem tot triviale vragen. Met verplichtingen wordt het genuanceerd: een commerciële rol ziet bedragen geaggregeerd met een minimale groepsgrootte van vijf — zodat een groep van één de maskering niet omzeilt; een uitvoerende rol ziet contactgegevens gemaskeerd; een medewerker die een financiële vraag stelt krijgt geen leeg scherm maar de mededeling welk recht ontbreekt en bij wie het te halen is.

Classificatiegestuurde modelroutering — waar twee ontwerpkeuzes elkaar versterken De verplichting MODEL_BEPERKING is de meest onderschatte bouwsteen van deze architectuur. Omdat de policy weet welke klasse data een antwoord bevat, en de routeringslaag weet welke eigenschappen elke provider heeft, kan je uitdrukken: "persoonsgegevens mogen uitsluitend verwerkt worden door een provider met verwerkingslocatie in de EU, zonder training op invoer en met nulretentie; bijzondere categorieën uitsluitend door een model dat binnen ons eigen netwerk draait."
De gateway dwingt dat af: haalt een bevraging persoonsgegevens op, dan is de verzameling toegestane modellen daarmee vernauwd — automatisch, zonder dat een ontwikkelaar eraan hoeft te denken. Voor een Europese verzekeraar met datasoevereiniteitsverplichtingen is dit precies de controle die de business case draagt, en ze valt gratis uit de combinatie van classificatie en providerabstractie.

Doelbinding in de praktijk: afleiden, niet ondervragen

De verplichting DOELBINDING roept meteen de praktische vraag op: gebruikers zeggen zelden waarom ze iets nodig hebben. Het antwoord is dat het doel geen formulier is dat de gebruiker invult, maar een interpretatie die de agent maakt en vastlegt. Vier regels maken dat werkbaar én verdedigbaar:

1 · Afgeleid, met een default per regel

Elke policyregel kan een defaultDoel dragen — voor een commerciële rol op contactgegevens is dat vanzelfsprekend contactopname, het standaarddoel van die functie. Routinevragen lopen daardoor frictieloos door; de trace markeert het doel als afgeleid of expliciet, zodat een auditor ziet wat interpretatie was en wat de gebruiker letterlijk zei.

2 · Onbekend is niet verboden

De agent weigert nooit op een gegokt doel. Is de vraag eenduidig, dan leidt hij het doel af; is ze dat niet, dan stelt hij één korte wedervraag. Een weigering volgt uitsluitend wanneer het doel verklaard of evident verboden is. Een doelbindingsregime dat routinevragen onderbreekt wordt omzeild — en een omzeilde controle is erger dan geen.

3 · Het doelgesprek maakt het minimale pad mogelijk

Wie de eigenaar van een gevonden voorwerp zoekt, heeft geen dertig telefoonnummers nodig maar een namenlijst en daarna één nummer. Zodra het doel bekend is, kan de agent het minst gegevensintensieve antwoord voorstellen. Dataminimalisatie wordt zo geen blokkade maar een beter antwoord — iets dat noch botweg weigeren, noch alles dumpen ooit oplevert.

4 · Wat doelbinding wél en niet belooft

Ze blokkeert verklaard verboden doelen en legt elke claim vast — meer niet. Een gebruiker die liegt over zijn bedoeling houd je er niet mee tegen; wel is achteraf bewijsbaar wat werd geclaimd en wat werd verstrekt. De sloten heten whitelist, afbakening, verplichtingen en toelating; doelbinding is de verklaring-onder-logging daarbinnen.

Intentie is geen toegangsprimitief De scherpste toets: een medewerker vraagt de contactgegevens van de dossiers van een collega. Scenario A: ze wil de portefeuille naar zich toetrekken. Scenario B: de collega is ziek en zij volgt zijn werk op. Op het moment van de vraag zijn beide exact dezelfde handeling — geen systeem en geen mens kan ze op het leesmoment onderscheiden. Een architectuur die beweert intentie te toetsen aan de deur is veiligheidstheater. De verdediging verschuift daarom naar de drie plekken waar het verschil wél waarneembaar is:
1 · Leesreikwijdte is een beleidskeuze, geen intentiekwestie. De policyregel draagt naast klasse en resource ook een subjectreikwijdte — eigen / team / organisatie. Een kleine organisatie kiest team-lezen (collega's vallen voor elkaar in); een strikte omgeving kiest eigen plus delegatie met vervaldatum: een leidinggevende verleent tijdelijk leesrecht op de portefeuille van de afwezige — expliciet, aflopend, gelogd. Dat is het mandaatmechanisme dat gereguleerde sectoren al kennen, uitgedrukt als policyregel.
2 · De fraude zit niet in het lezen maar in het handelen. Een dossier overnemen is een mutatie: die loopt via het handelingsregister, met notificatie aan de oorspronkelijke verantwoordelijke en waar nodig vier ogen. De dief moet door een deur die lawaai maakt.
3 · Toerekenbaarheid maakt het patroon zichtbaar. Lezen op dag X gevolgd door overnemen op dag X+2 is een signaleerbaar en bewijsbaar patroon in de trace. Ziekenhuizen doen dit al decennia met dossierlogging: elke opening wordt vastgelegd, afwijkende patronen worden gereviewd, en iedereen wéét dat de log bestaat — dat werkt, waar intentietoetsing aan de deur nooit gewerkt heeft.
Fraudepreventie in dit ontwerp is dus: het vermogen minimaliseren en de verantwoording maximaliseren — nooit gedachten lezen.

2.3.CHet handelingsregister

Je bent hierKennislaagBestuurslaagGatewayRedeneerlaagBewijslaag

Het resourceregister beschrijft wat gelezen kan worden; het handelingsregister beschrijft wat gedaan kan worden: de volledige lijst van handelingen die een agent ooit mag voorstellen of uitvoeren, elk met een risicoprofiel. In een leesomgeving (autonomieladder t/m L2) blijft dit register leeg; het wordt ontworpen vóórdat de eerste handeling verleend wordt, nooit erna.

Waarom dit géén tweede toolcatalogus is Voor het lezen werd een vaste catalogus verworpen (§4.2): die knijpt een oneindige vraagruimte af tot wat de ontwerper bedacht had. Bij handelen bestaat die oneindige ruimte niet — een handeling vereist code die haar uitvoert, dus de applicatie bepaalt al wat er überhaupt kán. Het register somt niets af dat anders open was; het hangt bestuur (omkeerbaarheid, goedkeuring, notificatie) aan een lijst die al eindig wás.
De intelligentie wordt er niet door begrensd, want die zit niet in het uitvinden van werkwoorden maar in het gebruiken ervan: wannéér een herinnering gepast is, aan wie, met welke inhoud, op basis van welke analyse — dat legt het register niet vast. Vergelijk een medewerker met tekenbevoegdheid tot €10.000: niemand noemt dat mandaat een plafond op zijn intelligentie. En bedenkt de agent iets nuttigs dat niet in het register staat, dan mag hij het altijd aanbevelen (L3) — alleen de uitvoerknop vereist registratie. Komt hetzelfde voorstel herhaaldelijk terug, dan is dat het signaal om de handeling via de normale route toe te voegen. Kortom: een systeem dat onvoorziene vragen beantwoordt wil je; een systeem dat onvoorziene dingen doet wil niemand.

Een handeling is dus nooit "een bevraging met een schrijfvlag" (principe 9). Elke handeling staat vooraf gedeclareerd met haar risicoprofiel:

type Handeling = {
  naam:           string                       // bv. "herinnering.verstuur", "reserve.bijstel"
  domein:         string                       // koppelt aan kennislaag en resources
  omkeerbaarheid: "OMKEERBAAR"                 // ongedaan te maken zonder spoor naar buiten
                | "COMPENSEERBAAR"             // herstelbaar met een tegenhandeling (creditnota)
                | "ONOMKEERBAAR"               // verzonden mail, externe melding, betaling
  reikwijdte:     { maxBedrag?: Geld; maxAantal?: number; perTijdvak?: Duur }
  voorwaarden:    Conditie[]                   // bv. "alleen op eigen portefeuille", "status = X"
  minimumLadder:  "L3" | "L4" | "L5"           // laagste autonomieniveau waarop dit ooit mag
  goedkeuring?:   { rol: string; vierOgen?: boolean }   // vereist bij L4
  notificatie:    Rol[]                        // wie het altijd te zien krijgt — de deur die lawaai maakt
  terugdraaiplan?: string                      // verplicht bij L5: hoe de envelop-noodstop herstelt
}

Drie voorbeelden laten zien hoe het risicoprofiel de plaats op de ladder bepaalt — niet andersom:

HandelingOmkeerbaarheidTypische verleningWaarom
Interne taak aanmaken / afspraak verschuivenOmkeerbaarL5 — binnen envelopVolledig intern herstelbaar; envelop begrenst aantal per dag; notificatie aan de betrokkene volstaat.
Betalingsherinnering versturenOnomkeerbaar (extern zichtbaar)L4 — na goedkeuringRaakt een klantrelatie. Goedkeuring per stuk of per batch; reikwijdte begrenst het aantal per run.
Dossier-verantwoordelijke wijzigen / reserve bijstellenCompenseerbaar, gevoeligL4 met vier ogenPrecies de handeling uit het intentie-kader (§2.3.B): de dief moet door een deur die lawaai maakt — notificatie aan de oorspronkelijke verantwoordelijke is verplicht, niet optioneel.

Praktijkvoorbeeld: van vraag tot uitgevoerde handeling

De gebruiker (rol FINANCIEEL) typt: "Stuur een betalingsherinnering naar iedereen die meer dan 30 dagen over vervaldatum zit."

stap 1lezen — open bevraging

De agent stelt via de gewone leeslaag vast om wie het gaat: 13 openstaande facturen, vervaldatum > 30 dagen verstreken. Dit deel is volledig open — geen register nodig, de vraag had ook heel anders kunnen luiden.

stap 2handeling opzoeken + voorwaarden toetsen

De agent vindt factuur.herinnering in het handelingsregister en toetst elke kandidaat aan de gedeclareerde voorwaarden. Eén factuur valt af: die klant kreeg vier dagen geleden al een herinnering, en de voorwaarde eist een cooldown van zeven dagen. Blijven over: 12 — binnen de reikwijdte (max. 15 per run). De agent meldt de uitgesloten klant expliciet, met reden.

stap 3voorstel — want minimumLadder is L4

Niets wordt verstuurd. De agent legt een voorstel voor: de lijst van 12, per klant het openstaande bedrag, dagen over vervaldatum en het gekozen mailtemplate. De gebruiker heeft rol FINANCIEEL — precies de goedkeurderrol uit het register — en keurt de batch met één klik goed (of haalt er klanten uit).

stap 4uitvoering + spoor

De uitvoering loopt via het bestaande mailpad van de applicatie — geen tweede schrijfroute. In de trace: de bevraging, de voorwaardentoets (incl. de uitgesloten klant), het voorstel, wie goedkeurde, en per mail het resultaat. De notificatie uit het register gaat naar de rol FINANCIEEL.

Merk op waar de intelligentie zat: in het vertalen van "iedereen die te ver over datum zit" naar de juiste selectie, het toepassen van de cooldown, en het opstellen van het voorstel. Het register bepaalde alleen de vangrails: wélke handeling bestaat, haar voorwaarden, en dat er een mens tussen zit. Had de gebruiker rol COMMERCIEEL gehad, dan was stap 3 geëindigd in een aanbeveling: "12 kandidaten gevonden — goedkeuring vereist rol FINANCIEEL."

Waarom dit register in de bestuurslaag hoort en niet in de code van de agent Dezelfde reden als bij de policy: het is een organisatiebeslissing met eigenaars en een wijzigingsregime, geen implementatiedetail. De business-eigenaar van het proces verleent een handeling (met risicobeheer als tegenlezer, zie §3.4), de trace van het ladderniveau eronder levert het bewijs, en de verlening is per rol, per domein en per omgeving intrekbaar. Handelingen zelf lopen bij uitvoering via de bestaande mutatiepaden van de applicatie — de gateway opent nooit een tweede schrijfpad (principe 9).

2.3.DRoutering als bestuur

Je bent hierKennislaagBestuurslaagGatewayRedeneerlaagBewijslaag

De vierde component van de bestuurslaag is kort maar principieel: welk model wat mag doen is een bestuursbeslissing, geen implementatiekeuze. De mechaniek van modelrollen en adapters staat in §2.5.B; hier staat wat erover beslist wordt en door wie.

De routeringstabel is configuratie — per organisatie-eenheid, wijzigbaar zonder deploy, met versiehistoriek:

{
  "routering": {
    "LICHT":    { "provider": "…", "model": "…", "maxTokens": 1024 },
    "WERKER":   { "provider": "…", "model": "…", "maxTokens": 4096 },
    "FRONTIER": { "provider": "…", "model": "…", "maxTokens": 8192 },
    "CRITICUS": { "provider": "…ander dan WERKER…" }        // diversiteit is de waarde
  },
  "residentie": {                                             // gekoppeld aan MODEL_BEPERKING (§2.3.B)
    "PERSOONSGEGEVEN": { "verwerkingslocatie": "EU", "trainingOpInvoer": false, "retentieDagen": 0 },
    "BIJZONDER":       { "verwerkingslocatie": "ON_PREM" }
  },
  "escalatie": { "bijComplexiteit": {…}, "naGatewayFouten": 2, "maxEscalaties": 1 },
  "budget":    { "perGesprekEur": 0.50, "perDagEur": 25, "bijOverschrijding": "WEIGEREN" }
}

Vier beslissingen leven hier, elk met een eigenaar (§3.4): de rol-naar-model-toewijzing (AI-platformteam — dit is de knop waarmee een modelwissel een instelling is, principe 10); de residentie-eisen per gegevensklasse (privacy en security — de gateway dwingt ze af via de verplichting MODEL_BEPERKING: raakt een antwoord persoonsgegevens, dan vernauwt de toegestane providerverzameling automatisch); de escalatieregels (wanneer een zwaarder model gerechtvaardigd is — twee afgewezen bevragingen zijn goedkoper te escaleren dan vijf mislukte rondes); en de budgetten met hun overschrijdingsgedrag — weigeren, degraderen naar een goedkoper model, of doorlaten met melding; de keuze hoort bij de budgeteigenaar, niet bij de ontwikkelaar (§3.2).

2.4Laag 3 — De gateway: wat gebeurt

Je bent hierKennislaagBestuurslaagGatewayRedeneerlaagBewijslaag
Gateway — de enige doorgang; elke aanvraag doorloopt dezelfde negen stappen
Kennis-API
Tiers ophalen — óók rechtengecontroleerd en gelogd
Catalogus-API
Registerdoorsnede, geannoteerd met de rechten van deze aanvrager
Bevragings-API
Plannen (droogloop) en uitvoeren
Handelings-API
Voorstellen, goedkeuren, uitvoeren, terugdraaien

De gateway is de enige doorgang tussen redeneerders en bronnen (principe 1) en het handhavingspunt van alles wat de bestuurslaag declareert. Zelf bevat ze géén beleid — ze voert het uit. Elke aanvraag, hoe klein ook, passeert hier; er bestaat geen tweede pad.

Drie onderdelen, in leesvolgorde:

A · API-oppervlak en pijplijn

Vier API-families (kennis, catalogus, bevraging, handeling) met zes aanroepen in de leesomgeving, en de negen-stappen-pijplijn die achter de bevragings-API draait — inclusief de mapping welke aanroep welke stappen doorloopt, en het dataflow-schema. §2.4.A

B · Bevragingstaal en compilatie

De declaratieve taal waarin de agent vraagt (geen SQL, geen tekstpad naar de opslag), wat bewust onuitdrukbaar is, en de drie vallen waar de compiler op getest moet zijn. §2.4.B

C · Weigeren als onderhandeling

Elke weigering is een gestructureerd tegenvoorstel met uitvoerbare suggesties — het mechanisme dat de agent zelfcorrigerend maakt. §2.4.C

2.4.ADe gateway

Je bent hierKennislaagBestuurslaagGatewayRedeneerlaagBewijslaag

Zes vermogens in plaats van tientallen vragen. Dat is niet minder intelligentie maar een andere plaatsing ervan: een tool die een vraag is, is eindig; een tool die een vermogen is, is dat niet.

API-familieAanroepDoetLevertWanneer
Kenniskennis.registerTier 0 — welke domeinen bestaanDomeinregister, enkele duizenden tokensAltijd, gecached
kennis.leesTier 1, 2 of 3 van een domein, of één sectieBetekenis, regels of precedentZodra het domein bekend is
Cataloguscatalogus.beschrijfRegisterdoorsnede voor genoemde resourcesVelden, klassen, relaties, metrieken — geannoteerd met toegangVóór het samenstellen van een bevraging
Bevragingbevraag.planDroogloop: valideren, autoriseren, ramen — zonder dataToelaatbaarheid, geschat volume, waarschuwingenBij twijfel over omvang of rechten
bevraag.voer_uitDe bevraging lezend uitvoeren onder het volledige regime — dit is géén handelingRijen plus herkomstenvelopDe werkelijke datatoegang
zoekHulpcall: vrije tekst → entiteitsidentificatie. Technisch een vooraf vastgelegde, begrensde bevragingMaximaal tien kandidaten met referentieWanneer de vraag een entiteit bij naam noemt
Handelinghandel.stel_voor · keur_goed · voer_uit · draai_terugBestaan niet in de leesomgeving (ladder t/m L2). Verschijnen pas wanneer L3+ verleend wordt, gestuurd door het handelingsregister (§2.3.C)Vanaf autonomie­niveau L3

Welke aanroep doorloopt welke stappen?

De negen stappen hieronder zijn de volledige pijplijn van de bevragings-API. De andere aanroepen zijn lichter en doorlopen een verkorte vorm — maar nooit nul: óók een kennisaanroep wordt geautoriseerd en vastgelegd (kennis is data, §2.2).

AanroepDoorlopen stappenToelichting
kennis.register · kennis.lees1 · 2 · 9Binden (bestaat het domein/de sectie?), autoriseren (mag deze rol dit kennisdoc?), vastleggen. Geen raming — docs hebben een vaste, bekende omvang.
catalogus.beschrijf1 · 2 · 9De toegangsannotatie per veld in het antwoord ís stap 2, vooraf uitgevoerd voor de hele doorsnede.
bevraag.plan1 – 5Droogloop: stopt ná de toelating, vóór de uitvoering. Geen data, wel het oordeel en de raming.
bevraag.voer_uit1 – 9De volledige pijplijn.
zoek1 · 2 · 6 · 9Vaste, begrensde query (max. 10 kandidaten, alleen INTERN-velden) — raming en toelating zijn overbodig omdat de vorm vastligt.
Gebruiker chat — vraag in gewone taal Redeneerlaag orkestrator: router → analist → synthese GATEWAY — ÉÉN DOORGANG kennis.* register · lees stappen 1·2·9 catalogus.* beschrijf stappen 1·2·9 bevraag.* plan: 1–5 voer_uit: 1–9 zoek naam → id stappen 1·2·6·9 Kennislaag .ai.md — tier 0–3 Bestuurslaag register · policy · handelingen · routering Database aparte read-only rol Bewijslaag trace · replay kosten · evals ① vraag ⑤ antwoord + herkomst ④ spec ↓ · rijen ↑ tiers rechten stap 2–3 policy·scope stap 6: SQL ↓ · rijen ↑ stap 9: trace rondes · tokens · kosten
Dataflow van één vraag. ① De vraag bereikt de redeneerlaag; de orkestrator haalt via de gateway ② kennis (welke domeinen, welke regels — uit de kennislaag) en ③ de catalogus met zijn rechten (uit de bestuurslaag), stelt dan ④ een bevraging samen die de volledige negen-stappen-pijplijn doorloopt — autorisatie en scope tegen de bestuurslaag (stap 2–3), gecompileerde SQL naar de read-only database (stap 6) — en levert ⑤ het antwoord met herkomst. Elke aanroep en elke agentronde meldt zich bij de bewijslaag (gestippeld). De agent raakt zelf nooit een bron: alles loopt door de vier deuren van de gateway.

De negen stappen

Elke bevraag.voer_uit doorloopt exact deze stappen. Geen uitzonderingen, geen interne route die er drie overslaat. De rood genummerde stappen zijn de handhavingspunten — klasse 3.

Binden
Specificatie parsen en elke identifier oplossen tegen een vastgelegde registerversie. Onbekende resource, veld, relatie of metriek levert een gestructureerde fout met de dichtstbijzijnde geldige alternatieven. De registerversie gaat mee in de trace, zodat herspelen dezelfde betekenis heeft.
Autoriseren
Policy-evaluatie per veld, relatie én metriek — niet op resourceniveau, want dat is te grof om bruikbaar te blijven. Eén geweigerd element weigert niet de hele aanvraag: de gateway benoemt precies wat botst, zodat de aanvrager zonder dat element opnieuw kan.
Afbakening injecteren
Voor de hoofdentiteit én elke aangeraakte relatie wordt het afbakeningspredicaat uit het register toegevoegd met waarden uit de geverifieerde sessie. Niet uit te schakelen, niet te overschrijven, niet zichtbaar in de specificatie.
Doelbinding toetsen
Waarvoor wordt deze data opgevraagd? Bij persoonsgegevens toetst de gateway het opgegeven doel tegen de vastgelegde grondslag. Een vraag naar contactgegevens voor commerciële benadering is een andere verwerking dan dezelfde vraag voor schadeafhandeling — en de AVG behandelt ze verschillend.
Plannen en ramen
Compileren, dan een uitvoeringsplan opvragen voor een kardinaliteitsschatting. Rijen × breedte → geschatte contextkosten. Ook: draait de sortering op een geïndexeerd pad? Zo niet en de basis is groot, dan weigeren met suggestie.
Toelaten
Drempeltoets op volume en geschatte kosten, plus budgetcontrole voor dit gesprek, deze gebruiker en deze organisatie-eenheid. Boven de drempel: geen data, wel een telling en concrete verfijnsuggesties.
Uitvoeren
Op een aparte, uitsluitend lezende rol met een harde uitvoeringstijdlimiet, een eigen verbindingspool en een limiet als vangnet — zodat een zware analysevraag nooit de operationele toepassing raakt.
Verplichtingen toepassen
Maskeren, groepen onder de k-drempel onderdrukken, exportvlag zetten, modelbeperking vastleggen voor de vervolgstap. Ná het ophalen, vóór het teruggeven — zodat de redeneerder de onbewerkte waarde nooit ziet.
Afleveren en vastleggen
Rijen plus envelop: registerversie, toegepaste afbakening, policy-beslissingen, rijaantal, duur, kosten, bevragingshash. Alles naar de trace. De hash maakt cachen, herspelen en reproduceren mogelijk.

2.4.BBevragingstaal en compilatie

Je bent hierKennislaagBestuurslaagGatewayRedeneerlaagBewijslaag

De redeneerder schrijft geen SQL. Hij schrijft een declaratieve specificatie die de gateway compileert. Dat verplaatst uitdrukkingskracht in plaats van haar in te perken: alles wat een bedrijfsvraag nodig heeft is uitdrukbaar, alles wat gevaarlijk is niet.

type Bevraging = {
  van:        ResourceNaam                  // uit het register
  selecteer?: string[]                      // velden, ook via 1-op-1 paden
  meet?:      Meting[]                      // aggregaties over relaties of velden
  waar?:      Filter                        // boom: en/of/niet + veldpredicaten
  groepeer?:  string[]
  sorteer?:   { veld: string; richting: "op"|"af" }[]
  limiet?:    number                        // begrensd door registermaximum
  doel?:      string                        // doelbinding, verplicht bij persoonsgegevens
}

type Meting =
  | { als: string; tel: RelatiePad; waar?: Filter }   // telling over relatie
  | { als: string; som: VeldPad;    waar?: Filter }   // mits aggregeerbaar
  | { als: string; gem|min|max: VeldPad }
  | { als: string; metriek: MetriekNaam }             // GECERTIFICEERD

Wat bewust onuitdrukbaar is

Willekeurige koppelingen

Alleen gedeclareerde relatiepaden, maximaal drie stappen diep. Geen kruisproducten, geen koppeling op velden die geen relatie zijn. Dit sluit zowel prestatieontsporingen als onbedoelde datacombinaties uit — dat laatste is een privacyrisico dat zelden benoemd wordt.

Ruwe query-tekst

Er is geen veld waarin tekst de opslag bereikt. De compiler bouwt uit gevalideerde identifiers en geparametriseerde waarden. Injectie is geen risico dat beheerst wordt maar een constructie die niet bestaat — het antwoord op de vraag hoe je een API zo ontwerpt dat er niet ter plekke gevaarlijke query's ontstaan.

Aggregatie over gezaghebbende velden

Velden die de basis vormen van een gecertificeerde metriek staan op aggregeerbaar: false. Een som erover wordt geweigerd met verwijzing naar de metriek. Zo kan de redeneerder geen eigen definitie van marge of blootstelling uitvinden.

Afbakeningsvelden

Tenant-, entiteit- en rechtsgebiedsleutels zijn niet filterbaar en niet selecteerbaar. Ze bestaan uitsluitend als injectie. De redeneerder kan er niet naar vragen en er niet op filteren — en kan dus ook niet ontdekken wat hij niet mag zien.

Drie compilatievallen

Waar een naïeve implementatie stukloopt. Alle drie zijn echt en alle drie horen in de testverzameling van de compiler, niet in de oplettendheid van de gebruiker.

Val 1  Vermenigvuldiging bij meerdere tellingen

Tel je in dezelfde bevraging twee relaties met gewone koppelingen, dan vermenigvuldigen de rijen: een entiteit met tien interacties en vier berichten geeft veertig rijen en beide tellingen worden fout. Regel: elke telling of som over een relatie wordt een gecorreleerde subbevraging, nooit een koppeling in de hoofdbevraging.

Val 2  Sorteren op een niet-geïndexeerde afgeleide

"Sorteer op aantal interacties" dwingt volledige berekening vóór de limiet kan knippen. Op tweeduizend rijen prima, op twee miljoen niet. Regel: het register declareert bruikbare indexen; sorteren op een afgeleide is toegestaan tot een geraamde basiskardinaliteit, daarboven weigert de raming met de suggestie eerst te filteren.

Val 3  Afbakening bij relatie-aggregaten

De hoofdentiteit afbakenen volstaat niet. Telt de redeneerder over een relatie, dan moet ook die subbevraging afgebakend worden — anders tellen records buiten de afbakening mee. Een lek dat er als een gewoon getal uitziet, en daarom gevaarlijker dan een zichtbare fout. Regel: injectie loopt over het volledige relatiepad; verplichte test per resource dat een aanvraag van A geen record van B raakt.

2.4.CWeigeren als onderhandeling

Je bent hierKennislaagBestuurslaagGatewayRedeneerlaagBewijslaag

Het onderdeel dat een star systeem van een lerend systeem scheidt. Een weigering is geen doodlopende weg maar een tegenvoorstel — en dat maakt de redeneerder zelfcorrigerend zonder dat iemand hem iets hoeft te leren.

Volume overschreden

{
  "toegelaten": false,
  "code": "VOLUME_OVERSCHREDEN",
  "geschat":  { "rijen": 2014, "tokens": 41200 },
  "drempel":  { "rijen": 500,  "tokens": 8000 },
  "suggesties": [
    { "soort": "LIMIET",
      "uitleg": "Je vroeg naar 'de meeste' — sorteer af en neem de top 25.",
      "patch":  { "limiet": 25, "sorteer": [{…}] } },
    { "soort": "FILTER",
      "uitleg": "Beperk tot lopend jaar (412 records).",
      "patch":  { "waar": { "ontvangenOp": {"jaar": 2026} } } },
    { "soort": "AGGREGEER",
      "uitleg": "Of groepeer per status (7 rijen).",
      "patch":  { "groepeer": ["status"] } }
  ]
}

Recht ontbreekt

{
  "toegelaten": false,
  "code": "RECHT_ONTBREEKT",
  "geweigerd": [
    { "element": "Polis.premieJaarlijks",
      "klasse":  "FINANCIEEL",
      "ontbreekt": "lees:FINANCIEEL",
      "rolAanvrager": "SCHADEBEHANDELAAR" }
  ],
  "welToegestaan": ["Polis.nummer", "Polis.status",
                    "Polis.dekkingstype", "Polis.ingangsdatum"],
  "boodschap": "Premiebedragen vallen onder FINANCIEEL. Aantallen, " +
                "statussen en dekkingen zijn wel beschikbaar."
}

De aanvrager kan nu twee dingen: opnieuw vragen zonder het bedrag — aantallen zijn vaak al een bruikbaar antwoord — of de gebruiker uitleggen welk recht ontbreekt. Beide zijn beter dan een lege tabel of een cryptische fout.

2.5Laag 4 — De redeneerlaag: wie redeneert

Je bent hierKennislaagBestuurslaagGatewayRedeneerlaagBewijslaag
Redeneerlaag — vervangbaar; kent geen opslag, geen rechten, geen afbakening
Orkestratie
Router → analisten (parallel) → synthese → criticus
Provider-adapters
Meerdere leveranciers achter één interface
Agentlus
Aanroep → gateway → resultaat → volgende ronde, met harde grenzen
Antwoordcontract
Gestructureerd, met aannames en herkomst
Autonomieladder
Bestuurde as: van ophalen (L0) tot handelen binnen envelop (L5) — autonomie wordt verleend, niet aangezet

De redeneerlaag is de vervangbare laag: hier leven de modellen en de agenten, en hier leeft bewust géén enkele veiligheidseigenschap. De laag kent geen opslag, geen rechten en geen afbakening — alles wat ze wil, vraagt ze door de gateway. Daardoor is een modelwissel een configuratiewijziging (principe 10) en groeit de waarde mee met elke generatie betere modellen, zonder dat het risico meegroeit (§1.3).

De vijf blokken uit de band worden elk in een eigen sectie uitgewerkt: orkestratie (§2.5.A — wie doet wat), provider-adapters (§2.5.B — hoe modellen inwisselbaar blijven), de agentlus (§2.5.C — hoe één agent werkt, ronde voor ronde), het antwoordcontract (§2.5.D — de vaste vorm van elk antwoord) en de autonomieladder (§2.5.E — de bestuurde as waarlangs deze laag meegroeit met de modellen; het antwoord op "werkt dit nog over drie jaar?").

2.5.AOrkestratie — wie doet wat

Je bent hierKennislaagBestuurslaagGatewayRedeneerlaagBewijslaag

Eén vraag wordt zelden door één agent beantwoord. De orkestratie verdeelt het werk over vier vaste rollen — en die rollen zijn declaraties in de configuratie, geen klassen in code: een rol toevoegen of bijstellen is configuratie plus een prompt.

RolOpdrachtMag deze aanroepenDenkt metGrenzen
RouterClassificeert de vraag (complexiteit), splitst in deelvragen, kiest de domeinen uit het kennisregisterkennis.registerLICHT1 ronde
AnalistBeantwoordt één deelvraag: kennis ophalen, catalogus lezen, bevragingen samenstellen, resultaat duidenalle zes leescallsWERKER8 rondes, 6 bevragingen
SyntheseVoegt de bevindingen van de analisten samen tot één antwoord in het antwoordcontract (§2.5.D)— (ziet alleen bevindingen)WERKER / FRONTIER1 ronde
CriticusHercontroleert het hoofdcijfer met een onafhankelijk samengestelde bevraging; meldt afwijkingenbevraag.plan · voer_uitCRITICUS2 rondes

De router bepaalt de vorm van de graaf: bij een enkelvoudige vraag handelt één analist alles af, zonder synthese; bij een samengestelde vraag (één domein, meerdere metingen) komt de synthese erbij; bij een domeinoverstijgende vraag draaien meerdere analisten parallel — elk met uitsluitend de kennisdocumenten en het toolsubset van hun eigen domein — en weegt de synthese hun bevindingen. De criticus draait alleen wanneer het antwoord een cijfer draagt dat een beslissing kan sturen.

Waarom aparte analisten en niet één grote context Context-isolatie, geen snelheid. Alles in één context zetten geeft duizenden tokens aan regels waarvan het model er telkens maar een deel nodig heeft — en dat verhoogt aantoonbaar de kans dat het regels uit het verkeerde domein toepast. Een facturen-analist die de planningsregels nooit gezien heeft, kán ze niet verkeerd toepassen. De synthese ziet vervolgens alleen de gestructureerde bevindingen, niet de ruwe tool-uitvoer — klein, scherp, controleerbaar.

2.5.BProvider-adapters — hoe modellen inwisselbaar blijven

Je bent hierKennislaagBestuurslaagGatewayRedeneerlaagBewijslaag

Geen enkele agent praat rechtstreeks met een leverancier. Alles loopt door één neutraal contract; per leverancier vertaalt een adapter dat contract naar diens eigen formaat — en nergens anders leeft leverancierspecifieke vorm.

// De enige interface die orkestratie en agenten kennen.
interface ModelProvider {
  naam: string
  eigenschappen: {
    gestructureerdeAanroep: boolean    // native function calling?
    streaming: boolean
    contextcache: boolean
    contextvenster: number
    // Bepalend voor MODEL_BEPERKING uit de policy:
    verwerkingslocatie: "EU" | "VS" | "ON_PREM" | "ANDERE"
    trainingOpInvoer: boolean
    retentieDagen: number
    certificeringen: string[]                // ISO 27001, SOC 2, …
  }
  genereer(v: Verzoek): Promise<Antwoord>
}

Adapters

Eén per leverancier, plus één OpenAI-compatibele adapter die de meeste zelf-gehoste en lokale servers in één keer dekt. Vertaling van het neutrale aanroepschema naar het formaat van de leverancier gebeurt binnen de adapter en nergens anders.

Degradatie

Ondersteunt een model geen gestructureerde aanroepen, dan valt de adapter terug op een JSON-modus met schemavalidatie en herkansing. De orkestratie merkt geen verschil; de eigenschappen-vlaggen sturen dat.

Uitwijk

Providerstoring is een routeringsgebeurtenis, niet een storing van de dienst. Concentratierisico bij één leverancier is voor gereguleerde instellingen een expliciete toezichtzorg — hier is het een configuratieregel.

Modelrollen in plaats van modelnamen

Agentcode noemt nooit een model. Ze vraagt om een rol; de routeringstabel in de bestuurslaag (§2.3.D) bepaalt wat die rol vandaag betekent — per organisatie-eenheid, zonder deploy wijzigbaar.

RolWaarvoorDoorslaggevende eigenschapAandeel verkeer
LichtClassificeren, routeren, herformulerenLatency en prijs± 40%
WerkerBevragingen samenstellen, resultaten duiden, deelantwoordenBetrouwbaarheid van gestructureerde aanroepen — hier het belangrijkst± 45%
FrontierSynthese over domeinen, tegenstrijdigheden wegen, oordeelsvormingRedeneerdiepte; kosten wegen minder want zeldzaam± 10%
CriticusOnafhankelijke controle van het hoofdcijferBij voorkeur een andere leverancier — diversiteit is hier de waarde± 5%

De criticus is de vertaling van challenger model uit klassiek modelrisicobeheer: bij voorkeur een andere leverancier dan de werker, want diversiteit is hier de waarde. Verschil tussen werker en criticus is geen fout maar een signaal — en het wordt gelogd, niet weggepoetst.

2.5.CDe agentlus — hoe één agent werkt, ronde voor ronde

Je bent hierKennislaagBestuurslaagGatewayRedeneerlaagBewijslaag

Elke rol uit §2.5.A draait op dezelfde motor: een lus die het model laat denken, zijn gateway-aanroepen uitvoert, de resultaten teruggeeft en opnieuw laat denken — tot er een antwoord is of een grens bereikt wordt.

  1. Verzoek. Systeemprompt (stabiel, gecached) + kennisdocumenten van het domein + het toolsubset van de rol + de (deel)vraag gaan naar het model via de provider-adapter.
  2. Het model antwoordt met tekst (klaar) of met één of meer gestructureerde gateway-aanroepen.
  3. Uitvoering. Elke aanroep gaat naar de gateway — nooit ergens anders heen — en het resultaat (rijen mét herkomstenvelop, of een weigering mét tegenvoorstel) gaat als toolresultaat terug de context in.
  4. Zelfcorrectie. Bij een weigering past de agent de meegeleverde patch toe of herformuleert hij (§2.4.C). Twee weigeringen op rij zijn het signaal dat hij de structuur niet begrijpt: escalatie naar een zwaardere modelrol — goedkoper dan vijf mislukte rondes.
  5. Herhalen tot klaar, binnen harde grenzen: maximaal 8 rondes per agent, maximaal 12 gateway-aanroepen per vraag, en het gespreksbudget uit de routering (§2.3.D). Elke ronde en elke aanroep produceert een gebeurtenis voor de bewijslaag én voor de zichtbare stappenstroom in de gebruikersinterface ("Ik kijk naar de facturen van 2026…").
Bij een bereikte grens: eerlijk stoppen Loopt de lus tegen zijn ronde- of budgetgrens, dan komt er geen stille afkapping en geen leeg scherm, maar een eerlijk deelantwoord: "binnen de grens kom ik hier niet uit; dit heb ik wél gevonden" — plus een logregel. Dezelfde regel als bij het volume in de gateway (principe 5): een antwoord dat compleet oogt maar het niet is, is de gevaarlijkste uitkomst die er bestaat.

2.5.DHet antwoordcontract — de vaste vorm van elk antwoord

Je bent hierKennislaagBestuurslaagGatewayRedeneerlaagBewijslaag

De synthese schrijft geen vrije tekst die daarna geparsed moet worden: ze wordt via een gedwongen structuur (tool-keuze) verplicht deze envelop in te vullen. Eén envelop, meerdere weergaven — en daardoor kán het cijfer in de export niet afwijken van het cijfer op het scherm.

type Antwoordenvelop = {
  antwoord:      string                  // markdown, kort, in de taal van de gebruiker
  kernwaarde?:   { label: string; waarde: number|string; eenheid?: string
                   toon?: "neutraal"|"positief"|"waarschuwing"|"kritiek" }
  tabel?:        { kolommen: Kolom[]; rijen: Rij[] }   // getypeerd: geld/datum/tekst/getal
  grafiek?:      { soort: "staaf"|"lijn"|"donut"; … }
  aannames:      string[]                // VERPLICHT — "Periode: 2026 (aangenomen)",
                                         //              kwaliteitsnotities uit het register
  bronnen:       Bron[]                  // per cijfer: bevragingshash, spec, rijaantal,
                                         //              afgekapt-vlag — het audit-spoor (§2.6)
  vervolgvragen: string[]                // max 3, klikbaar
}

Drie regels maken dit contract meer dan een formaat. Eén: de renderers zijn deterministisch — tekst, KPI-tegel, tabel, PDF en spreadsheet worden alle uit dezelfde envelop opgebouwd, en het model schrijft nooit zelf het bestand (een model dat een rapport hertikt, hertikt vroeg of laat een cijfer fout). Twee: aannames is verplicht en mag niet leeg zijn wanneer er iets aangenomen wérd — een stilzwijgende aanname in een stellig geformuleerd antwoord is precies wat een chat gevaarlijker maakt dan een dashboard. Drie: bronnen draagt de volledige herkomst, zodat "hoe kom ik hieraan?" één klik is en elk cijfer natelbaar blijft tot op de bronrij (principe 8).

2.5.EDe autonomieladder

Je bent hierKennislaagBestuurslaagGatewayRedeneerlaagBewijslaag

Hoe een systeem meegroeit met capaciteit zonder herbouw. Dezelfde gateway, dezelfde policy-engine; wat verandert is welke handelingen verleend zijn — per rol, per domein, per omgeving.

L0
Ophalen
Kennis en data ophalen binnen rechten. Geen interpretatie. Risico: informatieblootstelling — volledig afgedekt door policy en afbakening.
L1
Antwoorden
Feitelijk antwoord met herkomst. Risico: verkeerde weergave — afgedekt door gecertificeerde metrieken en natelbaarheid.
L2
Samenstellen
Meerstaps analyse over domeinen, eigen bevragingen componeren. Risico: onjuiste redenering — afgedekt door criticus en bewijsketen. Hier ligt de grens van het eerste bouwtraject.
L3
Aanbevelen
Een handeling voorstellen met motivering, zonder uitvoering. Risico: sturende invloed op menselijke beslissers — afgedekt door verplichte alternatieven en expliciete onzekerheid.
L4
Handelen na goedkeuring
Uitvoeren na menselijke bevestiging, met vieroogprincipe bij hoge reikwijdte. Vereist het handelingsregister: omkeerbaarheid, reikwijdte, voorwaarden. Hier begint AVG art. 22 te tellen.
L5
Handelen binnen envelop
Zelfstandig binnen vooraf vastgelegde grenzen — bedrag, aantal, omkeerbaarheid, tijdvenster — met noodstop en verplichte terugmelding. Alleen voor handelingen die volledig omkeerbaar zijn of een begrensde, aanvaarde schade hebben.
Waarom dit de vraag "en over drie jaar?" beantwoordt Naarmate modellen betrouwbaarder worden, verschuift een organisatie langs deze ladder. Dat is een verlenings­beslissing per rol en per domein, geen architectuurwijziging: dezelfde policy-engine, dezelfde bewijsketen, dezelfde noodstop. De organisatie kan bovendien differentiëren — L5 voor het herplannen van een afspraak, L3 voor een schadereserve, L1 voor alles wat een klant raakt — en die keuze onderbouwen met de trace-gegevens van het niveau eronder. Je verdient autonomie met bewijs, in plaats van haar aan te zetten met een vlag.

2.6De bewijslaag

Je bent hierKennislaagBestuurslaagGatewayRedeneerlaagBewijslaag
Bewijslaag — verantwoording; niets is optioneel
Trace
Elke stap: beslissing, bevraging, rijaantal, tokens, kost, duur
Herspelen
Zelfde vraag, ander model of nieuwere registerversie → verschil
Evaluatie
Gouden vragen voor correctheid, veiligheid en zuinigheid
Toerekening
Kosten per gebruiker, afdeling, vraagsoort

Zonder deze laag is het systeem een orakel. Met deze laag is het een bedrijfsmiddel dat zich kan verantwoorden tegenover een auditor, een toezichthouder en een betrokkene die inzage vraagt.

Trace

Per gesprek een boom: elke ronde met modelrol, provider, prompt-hash, tokens, kosten, duur — en per gateway-aanroep de specificatie, de policy-beslissingen, de raming, het rijaantal en de bevragingshash. Bewaartermijn en redactie zijn zelf beleid: traces bevatten data, dus vallen ze onder hetzelfde regime.

Herspelen

Een trace opnieuw uitvoeren tegen een ander model of een nieuwere registerversie en de verschillen tonen. Dit maakt van een modelwissel een meting in plaats van een gok: draai de laatste duizend gesprekken opnieuw, vergelijk uitkomsten en kosten, beslis daarna. Het is ook het regressiemechanisme voor wijzigingen in de semantische laag.

Evaluatie

Gouden vragen in de bouwstraat, in drie soorten: correctheid (klopt het cijfer tegen een onafhankelijk berekende waarheid), veiligheid (een aanvraag namens A raakt geen record van B; een beperkte rol krijgt geen beschermde klasse), zuinigheid (blijft het aantal rondes en de kost binnen de grens).

De verschuiving die superieure modellen afdwingen Zolang een model ongeveer op menselijk niveau redeneert, kan een expert de gedachtegang nalezen en beoordelen. Bij een model dat de expert overtreft, werkt dat niet meer — een overtuigende motivering is dan juist geen bewijs van juistheid. Wat wél controleerbaar blijft, is de afleiding: welke rechten golden, welke bevraging draaide, welke definitie werd gebruikt, welke rijen droegen bij. Die keten is machinaal verifieerbaar en blijft dat, ongeacht hoe capabel de redeneerder is. Uitlegbaarheid verschuift van "leg de redenering uit" naar "toon de bewijsketen" — en een architectuur die dat niet vooraf inbouwt, kan het achteraf niet meer toevoegen.
Hoofdstuk 3
Onderneming

3.1Toezicht en regelgeving

Voor een gereguleerde instelling is dit de sectie die bepaalt of het systeem in productie mag. De afbeelding is bewust op componenten, niet op beloften.

KaderKernverplichtingWaar de architectuur dat draagt
EU AI-verordening Risicoclassificatie; registratie van gebeurtenissen gedurende de levensduur; menselijk toezicht; transparantie naar gebruikers De trace ís het gebeurtenissenlogboek — met invoer, beslissingen en uitkomst per stap. De autonomieladder maakt menselijk toezicht een verleningsbeslissing per handeling in plaats van een intentie. Classificatie van het gebruik volgt uit het handelingsregister: adviseren is een ander risicoprofiel dan beslissen.
AVG / GDPR Doelbinding, minimale gegevensverwerking, rechtmatige grondslag, rechten van betrokkenen, geen louter geautomatiseerde besluiten met rechtsgevolg Grondslag per veld in het register; doelbinding als verplichte parameter en toetsingsstap; minimalisatie afgedwongen door projectie en drempels; de trace beantwoordt een inzageverzoek; art. 22 wordt gedragen doordat besluitvormende handelingen op L4 of lager staan.
DORA Beheersing van ICT-risico bij derden; concentratierisico; uitwijk en exitstrategie Providerabstractie maakt van uitwijk een routeringsregel. Meerdere providers naast elkaar verlagen concentratierisico structureel; de exitstrategie is aantoonbaar omdat herspelen laat zien dat de dienst op een andere leverancier dezelfde uitkomsten geeft.
BCBS 239-beginselen Nauwkeurigheid, volledigheid en herleidbaarheid van risicodata-aggregatie Gecertificeerde metrieken met eigenaar en herzieningsdatum; herkomst tot op de bronrij; registerversie vastgelegd bij elk resultaat, zodat een cijfer van vorig kwartaal reproduceerbaar blijft.
Solvency II / EIOPA Datakwaliteit voor rapportage; beheersing van modelrisico; verantwoordingsplicht bestuur Kwaliteitsnotities per resource die automatisch in de aannames van een antwoord belanden; criticus-agent als challenger; evaluatieverzameling als doorlopende validatie; bestuur ziet één catalogus met eigenaars.
Datasoevereiniteit Beperkingen op verwerkingslocatie per gegevenscategorie MODEL_BEPERKING koppelt gegevensklasse aan providereigenschappen. Persoonsgegevens routeren automatisch naar EU-verwerking; bijzondere categorieën naar eigen infrastructuur — afgedwongen, niet afgesproken.
Grens van deze claim Een architectuur maakt naleving aantoonbaar; ze levert haar niet. Risicoclassificatie, gegevensbeschermingseffectbeoordeling, verwerkersovereenkomsten, bewaartermijnen en het aanwijzen van eigenaars blijven organisatorisch werk. Wat deze opzet toevoegt is dat de bewijslast technisch invulbaar is in plaats van reconstructie achteraf uit logbestanden die er niet voor bedoeld waren — en dat is in de praktijk het verschil tussen een audit van twee weken en een van twee kwartalen.

3.2Kostentransparantie

Wie vraagt wat, wat kost het, en wat levert het op. Zonder deze cijfers wordt elk AI-programma na een jaar een discussie op basis van meningen.

Wat gemeten wordt

  • Per gesprek: tokens per modelrol, provider, aantal rondes, gateway-aanroepen, rijen, wandkloktijd, kosten
  • Per aanvrager: volume, gemiddelde kosten, weigeringsgraad, tevredenheid
  • Per organisatie-eenheid: totaal, trend, verdeling over vraagsoorten — de basis voor doorbelasting
  • Per resource: welke data wordt daadwerkelijk bevraagd — stuurt waar de semantische laag verdieping verdient
  • Per weigering: welke rechten ontbreken het vaakst — een rechtstreekse signaallijst voor het rechtenbeleid

Waarvoor je het gebruikt

  • Doorbelasting per afdeling, waardoor gebruik zichzelf reguleert zonder quota
  • Eenheidskosten per beantwoorde vraag — de enige zinvolle noemer voor rendement
  • Modelvergelijking: herspeel duizend gesprekken op een alternatief en vergelijk kosten én uitkomst
  • Misbruikdetectie: afwijkende patronen in volume of weigeringen zijn een beveiligingssignaal
  • Prioritering: de tien duurste vraagsoorten zijn de kandidaten voor een gecertificeerde metriek of een gecachte weergave

De sturing zelf is beleid, geen code: budgetplafonds per gesprek, per gebruiker per dag en per eenheid per maand, met een instelbaar gedrag bij overschrijding — weigeren, degraderen naar een goedkoper model, of doorlaten met melding. Alle drie zijn verdedigbaar in verschillende contexten; de keuze hoort bij de eigenaar van het budget, niet bij de ontwikkelaar.

3.3Eén architectuur, twee contexten

De toets op generaliseerbaarheid. Links een middelgrote multi-tenant ERP-omgeving, rechts een internationale verzekeraar. Dezelfde vijf lagen, dezelfde negen stappen, dezelfde ladder — andere invulling.

ArchitectuurbegripERP — reference implementationInternationale verzekeraar
Afbakeningsas 1Tenant (werkmaatschappij binnen een groep)Entiteit per land / branche, met verschillende toezichthouders
Afbakeningsas 2Juridische entiteit voor financiële gegevensRechtsgebied plus distributiekanaal (eigen net, makelaar, volmacht)
KernresourcesOpportuniteit, project, factuur, werkopdracht, planningPolis, dekking, schadeclaim, premie, reserve, herverzekeringscessie, tussenpersoon
Gecertificeerde metriekenOmzet, onderaannemerskost, marge, openstaand saldoSchaderatio, gecombineerde ratio, IBNR-reserve, technisch resultaat, klantwaarde
Bijzondere klasseContactgegevens, personeelsdocumentenMedische dossiers bij letselschade, strafrechtelijke gegevens bij fraudeonderzoek
Tier-3 precedentEerdere calculatiebesluiten, afwijkende afspraken per klantEerdere schaderegelingen in grensgevallen, acceptatiebeslissingen, interpretaties van polisvoorwaarden
Typische L2-vraag"Welk project had de laagste marge en lag dat aan kosten of prijs?""Welke tussenpersonen verslechterden in schaderatio motor 2024, en zit dat in frequentie of in gemiddelde last?"
Typische L4-handelingEen herinnering versturen; een planning verschuivenEen reserve bijstellen binnen mandaat; een routinematige claim afhandelen onder drempel
Zwaarste eisGeen kruisverkeer tussen tenants; natelbaarheid van elk financieel cijferDatasoevereiniteit per rechtsgebied; herleidbaarheid voor toezicht; geen louter geautomatiseerde besluiten richting verzekerden
SchaalverschilTientallen gebruikers, miljoenen rijenDuizenden gebruikers, miljarden rijen, tientallen bronsystemen
Wat het schaalverschil wél verandert De architectuur blijft, de bouw verzwaart op drie punten. Eén: de semantische laag wordt federatief — meerdere domeinteams beheren hun eigen deelregister onder één gedeelde classificatie- en naamgevingsstandaard, met een centrale toets. Twee: de gateway leest niet rechtstreeks uit operationele systemen maar uit een analytische laag (lakehouse of datawarehouse) met bekende actualiteit — die actualiteit hoort dan als eigenschap in het register, zodat een antwoord kan zeggen hoe vers het is. Drie: de policy-engine vraagt een echte beleidsdienst met simulatie, versiebeheer en goedkeuringsstroom, in plaats van een configuratiebestand. Geen van die drie raakt de principes uit §1.4 — en dat is precies de test die een referentiearchitectuur moet doorstaan.

3.4Operating model

Architectuur zonder eigenaarschap verwatert binnen twee kwartalen. Dit is de verdeling die maakt dat de lagen onderhouden blijven.

ArtefactEigenaarGoedkeuringRitme
Semantisch register — velden, relatiesDomein-data-eigenaarCode-review + bouwstraatcontroleBij elke schemawijziging
Gevoeligheidsklassen en grondslagenPrivacy- en informatiebeveiligingVieroog, vastgelegdBij nieuwe velden; jaarlijkse herziening
Gecertificeerde metriekenFunctionele eigenaar (Finance, Actuariaat, Commercie)Eigenaar + risicobeheerBij definitiewijziging; herzieningsdatum verplicht
Policy — rol × klasse × actieInformatiebeveiligingVieroog + simulatie vóór inwerkingtredingBij organisatiewijziging
Kennistiers 1–3DomeinexpertsVakinhoudelijke reviewDoorlopend; tier 3 groeit per afgehandeld grensgeval
Modelroutering en budgettenAI-platformteamEigenaar + inkoop bij nieuwe leverancierPer kwartaal of bij marktverandering
EvaluatieverzamelingAI-platform samen met domeinexpertsBouwstraat blokkeert bij regressieGroeit met elke fout die gevonden wordt
Autonomieverleningen (L3+)Business-eigenaar van het procesRisicobeheer; onderbouwd met trace-bewijsPer proces, met evaluatie na inwerkingtreding
De belangrijkste organisatorische stelling Het duurste onderdeel van dit programma is niet de bouw en niet de modelkosten — het is overeenstemming bereiken over definities. De vraag "wat is precies onze schaderatio" of "wanneer telt omzet als gerealiseerd" heeft in de meeste organisaties drie antwoorden die naast elkaar leven in verschillende rapportages. Een AI-systeem dwingt die discussie af, want het moet één definitie gebruiken. Dat is ongemakkelijk en het is de grootste blijvende opbrengst van het traject — waardevoller dan de chatinterface, en het is verstandig om het programma ook zo te verkopen. Wie dit als een IT-project positioneert, verliest de sponsor zodra de definitiediscussie begint.

3.5Aansluiting bij het industriepatroon — en build-vs-buy

Deze architectuur is geen eigen uitvinding die de lezer op gezag moet aannemen. Ze is de vendor-neutrale beschrijving van het patroon waar de grote platformen en de semantische-laag-markt in 2025–2026 onafhankelijk van elkaar op geconvergeerd zijn. Dat is een sterkte: het patroon is gevalideerd; wat dit document toevoegt is de samenhang en het beslissingskader.

Laag (dit document)MicrosoftAWS / GoogleDatabricks / SnowflakeOnafhankelijke spelers
KennislaagFoundry-kennisbronnen, Copilot-groundingBedrock Knowledge Bases / Vertex AI SearchRetrieval-platformen; de tier-structuur met precedent is zeldzaam en meestal klantwerk
BestuurslaagPurview (classificatie, labels), Entra Agent IDBedrock Guardrails-policies / Vertex-governanceUnity Catalog / HorizonImmuta, Collibra; OPA en Cedar voor policy-as-data
GatewayAI Agent Landing Zone, Foundry Agent ServiceBedrock Agents + Guardrails / Agent BuilderUnity AI Gateway / Cortex Analyst semantic modelsCube, AtScale (semantische laag met compile-time-rechten); Kong, Portkey, LiteLLM (modelverkeer)
RedeneerlaagFoundry-modelcatalogus, multi-model routingBedrock-modelkeuze / Vertex Model GardenModel serving endpointsPortkey, LiteLLM, OpenRouter — routing, failover, kostenmeting
BewijslaagPurview-audit, Foundry-tracingCloudWatch/Bedrock-invocatielogs / Vertex-tracingLakehouse MonitoringLangfuse, Arize, Braintrust — traces, evals, kostentoerekening

Twee observaties die het beslissingskader vormen:

Build-vs-buy hangt af van waar je data leeft

De gevestigde data-gateways en semantische lagen zijn gebouwd voor analytische platformen — warehouse en lakehouse. Voor een organisatie waarvan de data daar al ligt, is kopen de voor de hand liggende route en wordt dit document het evaluatiekader. Voor een operationeel systeem op een transactionele database — zoals de reference implementation — bestaat er geen passend product van de plank, en is een dunne eigen gateway op het bestaande autorisatiemodel de kortere en veiligere weg. Grote organisaties doen doorgaans beide: kopen voor het analytische landschap, bouwen voor de operationele kernen.

Vendors leveren de loodgieterij, nooit de inhoud

Geen enkel platform kan de data van de klant classificeren, de metrieken definiëren of de domeinkennis vastleggen. Een classificatietool herkent een telefoonnummer, maar niet dat een gefactureerde vordering niet als omzet telt. Het semantisch register, de gecertificeerde metrieken en de kennistiers zijn bij elke opzet klantwerk — dat is dus geen overhead die deze architectuur toevoegt, maar de kern die hoe dan ook gedaan moet worden. De architectuurkeuze bepaalt alleen of dat werk één keer gebeurt, op één plek, met één eigenaar — of verspreid en impliciet in elke integratie opnieuw.

Bronnen bij deze sectie Microsoft Cloud Adoption Framework — "Govern and secure AI agents across the organization" en de AI Agent Landing Zone-referentiearchitectuur; Amazon Bedrock Guardrails ("Generative AI Data Governance"); Databricks Unity AI Gateway; Cube — "Semantic Layer for AI Agents" (compile-time-rechten: "an agent literally cannot query data the user isn't allowed to see"); AtScale × Snowflake Cortex Analyst-integratie; de Model Context Protocol-autorisatiespecificatie; marktoverzichten van AI-gatewaycategorieën (Revefi, 2026). Volledige verwijzingen in de begeleidende onderzoeksnotitie.
Hoofdstuk 4
Bestendigheid

4.1Wat er verandert bij superieure modellen

Een expliciete toets: als de redeneerder over drie jaar aanzienlijk capabeler is dan een menselijke expert, welke onderdelen van dit ontwerp houden stand en welke moeten mee-evolueren?

OnderdeelUitkomstWaarom
AfbakeningsinjectieOngewijzigdKlasse 3. Werkt identiek ongeacht wie vraagt — dat is de definitie van capaciteitsonafhankelijk.
Policy-evaluatieOngewijzigdIdem. Wordt niet zwakker doordat de aanvrager slimmer is.
ToelatingscontroleDrempels stijgenHet mechanisme blijft; een capabeler model verdient een ruimer venster omdat het beter met meer data omgaat. Een instelling, geen herbouw.
BevragingstaalVerrijktSterkere modellen stellen complexere bevragingen samen. Vensterfuncties, cohortanalyse, tijdreeksen komen erbij — als uitbreiding van de taal, niet als omweg eromheen.
Aantal agentrollenNeemt afRouter, analist en synthese bestaan omdat huidige modellen baat hebben bij contextscheiding. Een capabeler model doet dat zelf. De graafconfiguratie krimpt; de gateway eronder verandert niet.
KennistiersWaardevollerEen sterkere redeneerder haalt méér uit precedent, niet minder — hij herkent scherper welk eerder geval van toepassing is. Tier 3 wordt belangrijker naarmate de redeneerder beter wordt.
AutonomieniveauStijgt bewustVan L2 naar L4 en voor sommige processen L5. Een verleningsbeslissing per rol en domein, onderbouwd met trace-bewijs uit het niveau eronder.
Verificatie door mensenVerschuift wezenlijkRedenering nalezen verliest zijn waarde. Bewijsketens en steekproeven op uitkomsten nemen het over. Dit is de enige verandering die architectuur vooraf moet dragen — achteraf inbouwen kan niet.
Prompt als sturingVerliest werkingKlasse 1 degradeert. Wie er veiligheid op bouwde, moet dan herbouwen. Wie hem alleen voor kwaliteit gebruikte, merkt er niets van.

4.2Anti-patronen

Wat deze architectuur expliciet afwijst, en waarom. Het eerste punt is een correctie op mijn eigen eerste ontwerp — de fout is leerzaam genoeg om te tonen.

PatroonWaarom het aantrekkelijk lijktWaarom het faalt
Toolwildgroei — één tool per vraagsoortElke tool is afzonderlijk veilig en makkelijk te begrijpenHet vraagbereik is begrensd door de verbeelding van de ontwerper; de catalogus groeit tot ze zelf niet meer in de context past; elke nieuwe vraag vraagt een release. Dit was de fout in de eerste versie van dit ontwerp.
Prompt als beleidSnel, flexibel, geen infrastructuur nodigKlasse 1: niet afdwingbaar, niet bewijsbaar, niet uitputtend testbaar — en degradeert precies wanneer de modellen beter worden.
Directe SQL-generatie op productieMaximale flexibiliteit, snel te demonstrerenAfbakening niet afdwingbaar, definities worden herleid in plaats van gebruikt, onbegrensde resultaten, injectie-oppervlak, en niets is reproduceerbaar.
Vector-retrieval als standaardantwoordEén patroon voor alles; volwassen gereedschapUitstekend voor ongestructureerde tekst, ongeschikt voor precieze aggregatie over gestructureerde data. Benaderend zoeken levert benaderende cijfers — onaanvaardbaar voor financiële en actuariële vragen. Beide naast elkaar, elk voor waar het thuishoort.
Alles in de context stoppenGrote contextvensters lijken het probleem op te lossenKosten schalen lineair met ruis, precisie daalt bij irrelevante inhoud, en de rechtenvraag verdwijnt niet — hij wordt alleen onzichtbaar.
Menselijk toezicht als vinkjeVoldoet ogenschijnlijk aan de eisEen goedkeurder die tien voorstellen per minuut ziet, keurt goed. Toezicht werkt alleen met begrensd volume, echte weigermogelijkheid en zichtbaar bewijs — anders is het schijnzekerheid met een auditspoor.
Leverancierspecifieke koppelingHet snelste pad naar een werkende demoFormaten, aanroepconventies en eigenaardigheden lekken in de bedrijfslogica. Wisselen wordt een project in plaats van een instelling — en toezichthouders vragen inmiddels naar uitwijk.

4.3Eerlijke grenzen

Wat na dit alles nog moeilijk blijft. Een referentiearchitectuur die alleen de opgeloste problemen benoemt, is een verkoopdocument.

1  Semantische correctheid blijft het restrisico

Met een open bevragingstaal kan een redeneerder twee sommen combineren en het resultaat een naam geven die met de gezaghebbende definitie botst. Vier verdedigingslagen — gecertificeerde metrieken, niet-aggregeerbare basisvelden, zelflabeling van antwoorden als gezaghebbend of zelf samengesteld, en een criticus met een onafhankelijke bevraging — verkleinen het maar sluiten het niet uit. Daarom is natelbaarheid geen extra, maar de voorwaarde waaronder financiële antwoorden gepresenteerd mogen worden.

2  Het register is doorlopend werk

De bouwstraatcontrole voorkomt achterlopen, maar verlegt de last naar elk schemavoorstel. In een grote organisatie met tientallen domeinteams is dat federatief bestuur met alle bijbehorende afstemming. Het is bewust — het is de prijs van principe 3 — maar het moet begroot worden, niet weggewuifd.

3  Definitieconflicten zijn politiek, niet technisch

Eén gezaghebbende metriek betekent dat iemands bestaande rapportage ongelijk krijgt. Dat is een bestuurlijk vraagstuk met eigenaars en belangen, en het is doorgaans het traagste onderdeel van het traject. Techniek kan het zichtbaar maken; beslissen moet de organisatie zelf.

4  De bewijsketen bewijst de afleiding, niet de vraagstelling

Een perfect herleidbaar antwoord op een verkeerd gestelde vraag blijft misleidend, en een correct cijfer over een periode die niet representatief is, is nog steeds een verkeerd inzicht. Vandaar de verplichte aannames in elk antwoord en de kwaliteitsnotities per resource — maar de laatste beoordeling of de vraag de juiste was, blijft menselijk. Dat is geen tekortkoming van dit ontwerp; het is de grens van wat een systeem over zichzelf kan weten.

5  Ongeveer vijf procent past niet in de taal

Vensterfuncties over onregelmatige tijdvensters, recursieve hiërarchieën, statistische procedures. Twee eerlijke uitwegen: de taal uitbreiden wanneer een patroon zich herhaalt, of een streng afgeschermde escape met eigen recht, menselijke bevestiging en verplichte herkomst. Doen alsof die vijf procent niet bestaat, leidt tot schaduwoplossingen buiten de gateway — en dat is erger dan een bestuurde uitzondering.

4.4Invoeringstraject

De volgorde is bewust: bestuur vóór intelligentie. De eerste twee fasen leveren geen zichtbare chat op — en zonder die twee bouw je een systeem waarvan je de veiligheid achteraf moet bewijzen, wat niet lukt.

FaseWatInhoudKlaar wanneer
0Semantiek en policyRegister met classificatie en afbakeningspaden voor vijf kernresources; policy-engine met verplichtingen; bouwstraatcontrole op ongeclassificeerde veldenVeiligheidstests groen: geen kruisverkeer tussen afbakeningen; beperkte rol krijgt geen beschermde klasse
1GatewayBevragingstaal, compiler met gecorreleerde subbevragingen, afbakening over relatiepaden, raming, toelating, lees-only rol, zes aanroepen. Nog geen AI.Een niet-voorziene analytische vraag draait via de API vanuit een testscript
2RedeneerlaagProviderinterface met één adapter, agentlus, router/analist/synthese, modelrollen uit configuratie, volledige traceVragen die niemand vooraf bedacht heeft worden end-to-end beantwoord, met herkomst
3Interface en opleveringGespreksinterface met zichtbare stappen, herkomst uitklapbaar, doorklik naar bronrijen, exportBruikbaar zonder tussenkomst van een ontwikkelaar
4Bestuur zichtbaarBeheerschermen voor rechten, catalogus en gesprekken; tweede provider-adapter; herspelen; evaluatieverzameling; criticusModelwissel is een instelling met een meting; rechten zijn simuleerbaar vóór inwerkingtreding
5Verbreding en autonomieRegister uitbreiden per domein; tier-3-precedent opbouwen; handelingsregister; L3 en daarna L4 voor geselecteerde processenAutonomie wordt verleend op basis van bewijs uit de trace van het niveau eronder
Het advies dat het vaakst genegeerd wordt Bouw fase 4 niet als sluitstuk. Een tweede provider-adapter en het herspeelmechanisme horen vroeg, want ze zijn de enige manier om te weten of de abstractie klopt. Wacht je ermee, dan is de eerste leverancier ongemerkt in tientallen details doorgesijpeld en is modelonafhankelijkheid een claim geworden in plaats van een eigenschap.
Bijlagen
Uitgewerkte voorbeelden

AEen niet-voorziene vraag — ERP

"Welke opportuniteiten hebben de meeste interacties en de meeste e-mailcommunicatie?" — een vraag waarvoor niets is voorbereid. Dit is de toets die de hele architectuur moet doorstaan.

ronde 0router · licht model

Classificeert met het domeinregister in de gecachte systeemprompt: samengestelde vraag, één domein met een raakvlak. Eén analist, synthese, geen criticus — er is geen financieel cijfer in het spel.

ronde 1analist · kennis.lees

Haalt tier 1 van het commerciële domein op. Leert de statusverlopen, en dat interacties polymorf zijn opgeslagen met een typeveld — waardoor hij straks niet per ongeluk interacties van andere entiteitsoorten meetelt. Dat is precies het soort domeinkennis dat het verschil maakt tussen een cijfer dat klopt en een cijfer dat plausibel oogt.

ronde 2analist · catalogus.beschrijf

Vraagt het register voor Opportuniteit en ziet velden, klassen, toegangsannotaties en relaties. Merkt dat de relatie naar conversaties verwijst naar een resource die zélf berichten heeft, vraagt in dezelfde ronde ook die op, en kent daarmee het tweestapspad.

ronde 3analist · bevraag.plan → geweigerd

Stelt zijn eerste specificatie samen en laat hem droogdraaien. De gateway autoriseert alles, injecteert de afbakening, raamt 2.014 rijen ≈ 41k tokens en weigert met drie verfijnsuggesties. Geen data — wel richting.

ronde 4analist · bevraag.voer_uit → 25 rijen

Neemt de suggestie over en verfijnt zelf verder: alleen inkomende berichten, want communicatie van de klant is een betere maat voor betrokkenheid dan eigen verzonden post. Die afweging is precies het stuk dat je niet in een tool kan vastleggen — en de reden dat het vraagbereik open moet zijn.

{ "van": "Opportuniteit",
  "selecteer": ["id", "naam", "status", "klant.naam"],
  "meet": [
    { "als":"interacties",  "tel":"interacties" },
    { "als":"inkomendeMail","tel":"conversaties.berichten",
      "waar":{ "richting":"IN" } },
    { "als":"laatsteContact","max":"interacties.datum" } ],
  "sorteer": [{"veld":"interacties","richting":"af"},
              {"veld":"inkomendeMail","richting":"af"}],
  "limiet": 25 }

De compiler maakt géén koppelingen maar gecorreleerde subbevragingen — anders bederft val 1 uit §2.4.B beide tellingen — en injecteert de afbakening die de agent niet gevraagd heeft en niet kan weglaten:

SELECT o.id, o.naam, o.status, k.naam AS klant_naam,
  (SELECT count(*) FROM interacties i
     WHERE i.opp_id = o.id AND i.entiteit_type = 'opportuniteit')  AS interacties,
  (SELECT count(*) FROM berichten b
     JOIN conversaties c ON c.id = b.conversatie_id
     WHERE c.opp_id = o.id AND b.richting = 'IN')                  AS inkomende_mail,
  (SELECT max(i.datum) FROM interacties i WHERE i.opp_id = o.id) AS laatste_contact
FROM opportuniteiten o
LEFT JOIN organisaties k ON k.id = o.klant_id
-- afbakeningsinjectie: niet gevraagd, niet weg te laten
WHERE EXISTS (SELECT 1 FROM opp_tenants t
               WHERE t.opp_id = o.id AND t.tenant_id = ANY($1))
ORDER BY interacties DESC, inkomende_mail DESC
LIMIT 25;
ronde 5synthese · antwoord

Duiding, de tabel van 25, de aannames ("betrokkenheid gemeten als inkomende berichten plus geregistreerde interacties; alle jaren"), de herkomst (één bevraging, hash, 25 van 2.014 na sortering) en twee vervolgvragen.

Wat dit aantoont Zes aanroepen, waarvan één weigering die de aanvrager slimmer maakte. Er bestond geen voorziening voor deze vraag, en er hoefde er ook geen te bestaan. De redeneerder koos zelf zijn kennisdocumenten, zelf zijn entiteiten en zelf zijn aggregatievorm — terwijl afbakening, rechten en volume geen moment in zijn handen lagen. Kosten: ongeveer twaalfduizend verse tokens tegenover meer dan vierhonderdduizend voor de naïeve aanpak, die bovendien fout zou tellen.

BDezelfde machinerie — verzekeren

"Welke tussenpersonen verslechterden het sterkst in schaderatio op motorrijtuigen 2024, en zit die verslechtering in frequentie of in gemiddelde schadelast?"

Dezelfde vijf lagen, drie verschillen die de sectorspecifieke eisen dragen:

AspectUitwerking
Gezaghebbende metriekSchaderatio wordt niet door de redeneerder samengesteld. Het is een gecertificeerde metriek met een eigenaar bij Actuariaat, met de vastgelegde behandeling van IBNR, schaderegelingskosten en herverzekeringsherstel. De basisvelden staan op niet-aggregeerbaar, dus een zelfbedachte variant wordt geweigerd met verwijzing naar de metriek. De ontleding naar frequentie en gemiddelde last zijn twee aanvullende gecertificeerde metrieken — precies de decompositie die de vraag stelt.
AfbakeningTwee assen tegelijk: de entiteit die het risico draagt (rechtsgebied en toezichthouder) en het distributiekanaal. Een gebruiker bij de Belgische entiteit ziet geen Franse portefeuille, ook niet in een totaal — en het aggregaat verraadt dat verschil niet, want de injectie zit in de subbevraging.
ModelbeperkingHet antwoord bevat geen persoonsgegevens — het gaat over tussenpersonen en portefeuilles — dus de volledige providerverzameling is toegestaan. Zou dezelfde analyse afdalen naar individuele schadedossiers met letselgegevens, dan vernauwt de policy de toegestane modellen automatisch tot on-premise verwerking, zonder dat iemand daaraan hoeft te denken.
Tier 3Bij de duiding van uitschieters raadpleegt de analist eerdere acceptatiebeslissingen en portefeuillesaneringen: is deze verslechtering al eens vastgesteld en welke maatregel volgde? Dat maakt het verschil tussen een correct cijfer en een bruikbaar advies.
AutonomieBlijft op L2 — analyseren en rapporteren. Een portefeuillemaatregel voorstellen is L3 en vraagt een expliciete verlening; een commissie of mandaat effectief aanpassen is L4 met vieroogprincipe. De architectuur draagt alle drie; de organisatie beslist waar de grens vandaag ligt.
De machinerie is identiek. Wat verschilt is de inhoud van het register, de eigenaars van de definities en de hoogte van de verleende autonomie — en dat is precies wat een referentiearchitectuur moet opleveren.