Casesheet

Chat met je datawarehouse

Een AI-agent die vragen over het datawarehouse in gewone taal beantwoordt, naast het bestaande Power BI. Het taalmodel raakt de data nooit rechtstreeks; het roept alleen gegronde tools aan achter een beveiligde laag.

XBAS Business Intelligence · Almere NL · Case datawarehouse-chat

Samenvatting

Een agent waarmee medewerkers in gewone taal vragen kunnen stellen aan het datawarehouse, als aanvulling op de bestaande Power BI-rapportages, niet als vervanging. De agent zet een vraag om in een geplande tool-aanroep, laat een aparte beveiligingslaag de query uitvoeren, en formuleert het antwoord met de echte cijfers erbij. Het systeem is opgebouwd als modular monolith: één applicatie, intern verdeeld in losse, per omgeving aan of uit te zetten modules met een vaste interface. De kern die de scope bewaakt, een lijst met toegestane bronnen en velden, wordt los onderhouden als het belangrijkste stuk kennis in het systeem.

De vraag

Onderzoeken of medewerkers via natuurlijke taal vragen kunnen stellen over data uit het datawarehouse, zonder dat het taalmodel ooit rechtstreeks toegang krijgt tot het datawarehouse of tot niet-toegestane informatie.

Wat ik heb gebouwd

  • Een orchestrator die een vraag plant, de juiste tool aanroept en het resultaat terugkoppelt
  • Een tool die kengetallen ophaalt door natuurlijke taal om te zetten naar een query op een semantische laag (cube)
  • Een tool die detailgegevens ophaalt via een beveiligde, alleen-lezen SQL-laag op een vaste lijst toegestane views
  • Een beveiligingslaag die elke query controleert en alleen leesopdrachten op die toegestane views doorlaat
  • Een uitbreidbare module-registry waarmee onderdelen per omgeving aan of uit te zetten zijn
  • Een lichte chat-interface die naast het antwoord ook de resultaattabel en de herkomst toont (welke tool, welke query)

In detail

  • Twee databronnen, één ingang: kengetallen uit de semantische cube-laag (dezelfde cijfers als in Power BI), detailgegevens via een streng afgebakende SQL-route; de agent kiest zelf welke route past
  • Beveiligingslaag tussen taalmodel en data: elke gegenereerde query wordt gevalideerd, alleen leesopdrachten op een goedgekeurde lijst komen erdoorheen, dus het taalmodel kan nooit niet-vrijgegeven data opvragen
  • Herkomst bij elk antwoord: de interface toont niet alleen het antwoord in proza maar ook de resultaattabel en welke tool en query het hebben opgeleverd
  • Uitbreidbare module-opzet: een nieuwe capaciteit wordt als zelfstandige module toegevoegd, per omgeving aan of uit te zetten, zonder de kernlogica aan te raken
  • Weigeren buiten scope: vragen die buiten de toegestane bronnen vallen worden herkend en afgewezen in plaats van verzonnen beantwoord

Resultaat

Werkt end-to-end op echte productiedata, gedekt door circa 95 Python-tests en 13 JavaScript-tests. Twee onderdelen stonden bij de laatste stand nog open: een documentzoekfunctie (de onderliggende zoekinfrastructuur stond tijdelijk uit) en een alternatieve REST-aansluiting op de cube-laag die nog tegen een echte dataset geverifieerd moest worden.