Onze Hackathon in Microsoft Fabric met Data Agents
AI is niet meer iets van "de toekomst". Het zit inmiddels in vrijwel alles wat wij als Creates voor onze klanten bouwen. Dit doen we door middel van ontwikkelwerk dat sneller gaat dankzij AI, tot oplossingen waarin AI zélf onderdeel is van het eindproduct. Tegelijkertijd zien we een langzame verschuiving bij onze klanten: waar het voorheen draaide om vaste dashboards en gestandaardiseerde rapportages, zien we nu steeds vaker adhoc vragen zoals: "Hoeveel hebben we vorige maand verkocht in regio X, uitgesplitst naar productgroep, maar dan exclusief de promoties?".
Data Agents in Microsoft Fabric sluiten precies op die behoefte aan. Reden genoeg om er een hackathon aan te wijden. In deze blog nemen we je mee in wat we hebben gedaan, wat we hebben geleerd en wat onze belangrijkste tips zijn als je zelf met Data Agents aan de slag wilt.
Wat is een Data Agent eigenlijk?
Een Data Agent in Fabric is in de kern een chatbot die boven op je data staat. Onder de motorkap gebruikt de Data Agent Azure OpenAI-modellen (GPT-4, GPT-4 Turbo, etc) om vragen in natuurlijke taal om te zetten naar queries op je onderliggende databronnen. Sinds kort is de functionaliteit general available (GA), en is de Data Agent bij uitstek geschikt voor adhoc-vraagstukken waarvoor je anders elke keer een rapport zou moeten aanpassen of bouwen.
Wat je nodig hebt om er mee te starten: een betaalde Fabric-capaciteit (minimaal F2) met een Power BI Pro-licentie en de juiste workspace-rechten. Vervolgens koppel je een databron waar je leesrechten op hebt, bijvoorbeeld zoals een Lakehouse, Warehouse, semantisch model of KQL-database.
De opzet van onze hackathon
We kozen voor een compact format: vrijdagavond starten met een etentje & borrel, introductie en het verzinnen van een onderwerp, en op zaterdag de hele dag ontwikkelen. In tweetallen ging iedereen aan de slag met een zelfgekozen dataset. De enige regel was: geen AdventureWorks. We wilden inspirerende data waar je interessante vragen bij kan verzinnen.
De onderwerpen liepen flink uiteen. Ons team bouwde een Lakehouse en semantisch model rondom de productie- en financiële gegevens van de grote automerken. Een andere groep koos voor een compleet andere aanpak: webscrapen om alle Michelin-sterrenrestaurants boven tafel te krijgen, met bijbehorende kenmerken als keuken, locatie en prijsklasse. Andere teams kozen weer eigen datasets van sport tot de luchtvaart.
De stappen naar een werkende Data Agent
Hoewel elk team met andere data werkte, doorliep iedereen dezelfde stappen. Voordat er überhaupt aan een Data Agent gedacht kan worden, moet de onderliggende data op orde zijn, inclusief correcte relaties tussen tabellen en een juiste modellering van feiten- en dimensietabellen, of bewust de keuze voor een goed opgebouwde flat table. Een Data Agent kan nooit betere antwoorden geven dan je datamodel toelaat. Garbage in, garbage out geldt hier dubbel: de AI interpreteert niet alleen de data, maar ook de structuur van je semantische model.
1. Prep Data for AI
In het semantische model zit een functie die "Prep Data for AI" heet en die hebben we intensief gebruikt. Deze stap gaat over het verrijken van je metadata, zodat de Data Agent begrijpt waar het naar kijkt:
- Kolombeschrijvingen: wat staat er precies in deze kolom, in welke eenheid, wat betekenen de waarden?
- Measure-beschrijvingen: wat berekent deze measure, en in welke context is hij bedoeld?
- Tabelbeschrijvingen: wat is het doel van deze tabel, welke granulariteit heeft hij?
- Synoniemen: hoe noemen mensen dit in de praktijk? "Omzet" kan ook "revenue", "turnover" of "verkoop" zijn. Voor ons automotive-model hebben we bijvoorbeeld synoniemen toegevoegd voor zaken als "productie", "output" en "units geproduceerd" die naar dezelfde measure verwijzen.
- AI Instructions in het semantische model: naast de instructies die je op het niveau van de Data Agent meegeeft, kun je ook binnen het semantische model zélf AI-instructies toevoegen. Denk aan richtlijnen over welke measures voorkeur hebben boven andere ("gebruik standaard Sales Amount en niet Sales Amount (incl. BTW) tenzij expliciet gevraagd"), hoe om te gaan met specifieke bedrijfslogica, of hoe datumfilters geïnterpreteerd moeten worden. Dit is de plek om kennis vast te leggen die niet uit de kolomnamen zelf blijkt.
- Verified Answers: een krachtige optie in Prep Data for AI. Hiermee leg je voor bepaalde vragen een "goedgekeurd" antwoord vast, inclusief de bijbehorende DAX-query. Stelt iemand een vraag die lijkt op een verified answer, dan gebruikt de Agent die als basis in plaats van zelf te tot een antwoord te komen. Dit werkt goed voor veel gestelde vragen, waarvan je wéét wat het juiste antwoord moet zijn.
Onze belangrijkste bevinding van de dag was: hoe beter we het semantische model voorbereidden voor AI, hoe beter de antwoorden van de Data Agent werden. Een measure zonder beschrijving wordt slecht gevonden, maar dezelfde measure met een heldere omschrijving en een paar synoniemen wordt veel beter opgepakt.
2. Instructions: het brein van je Agent
Naast de data zelf geef je de Agent instructies mee. Dit is waar je de Agent zijn karakter/eigenschap en focus meegeeft. Denk aan:
- De scope waarbinnen de Agent moet opereren
- Bedrijfscontext die niet uit de data zelf te halen is
- Voorkeuren in hoe antwoorden gegeven moeten worden
- Eventuele beperkingen: welke vragen moet de Agent niet proberen te beantwoorden?
Hier zit veel ruimte om te experimenteren. We merkten dat een korte, generieke instructie veel minder scherp werkt dan een instructie waarin je expliciet de rol, het domein en de verwachte toon beschrijft.
3. Testen, diagnosticeren, finetunen
We hebben allemaal onze Agents uitvoerig getest met vragen. Dit deden we door middel van voor de hand liggende tot bewust vreemde, out-of-the-box vragen. De opdracht was immers om per team minimaal drie leuke, onverwachte vragen te bedenken.
Een belangrijk onderdeel daarvan was om niet alleen te kijken naar het antwoord, maar ook de query te analyseren die het antwoord genereert. Dit deden we onder andere door te analyseren welke tabellen en measures de Data Agent gebruikt om tot een antwoord te komen. Als het antwoord klopt maar de Data Agent via een omweg met het antwoord komt dan kan het een teken zijn dat de beschrijvingen of synoniemen aangescherpt moeten worden.
4. RLS en verborgen kolommen
Een belangrijk punt dat in de praktijk bij klanten snel gaat spelen: Row-Level Security. Dit blijft intact, wanneer je een Data Agent gebruikt.
5. Demo en bevindingen delen
We sloten af met een demoronde waarin elk tweetal de eigen Agent liet zien, inclusief de mooie en grappige antwoorden. Iedereen was tegen net iets andere dingen aangelopen en had verschillende oplossingen ontdekt.
Hoe nu verder?
Voor ons is deze hackathon precies geweest wat we ervan hoopten: begrip van hoe Data Agents werken in Fabric en hoe we deze zo optimaal mogelijk kunnen inrichten. Daarnaast hebben we een werkende Proof-of-Concept, waarmee we klanten kunnen laten zien wat de mogelijkheden zijn met Data Agents. Ook de stap naar Copilot Studio, waarmee je Agents in een low-code omgeving kan bouwen, beheren en bijvoorbeeld ook in Microsoft Teams kan embedden.
De belangrijkste les overstijgt de techniek: een goede Data Agent is voor 20% een model en voor 80% een goed voorbereid datamodel met heldere beschrijvingen, doordachte instructies en een scherpe scope.