Tingit 8QL – van technisch complex instrument naar hulpmiddel
Het populaire product Tingit bevat de taal 8QL waarmee rapportages gemaakt kunnen worden over de data. 8QL is echter vrij technisch en daardoor minder makkelijk te gebruiken. Deze post beschrijft wat ons plan is om AI in te zetten om 8QL toegankelijker te maken voor de eindgebruiker.

8QL, krachtige taal voor werkproces in Tingit
Tingit is het door 42 ontwikkelde communicatie- en registratiesysteem voor diverse sectoren waarbij hulpvragers worden begeleidt door een coach/behandelaar. Het systeem maakt het mogelijk om hulpvragers toe te voegen en hun voortgang bij te houden tijdens een traject, zoals een coachingstraject of een behandeling. Dat kan bijvoorbeeld te maken hebben met werk zoeken, inburgering, schuldhulpverlening of maatschappelijke begeleiding.
Het systeem stelt je in staat om je eigen selectiecriteria op te stellen waarmee je een lijst van deelnemers kunt genereren. Hiermee kun je binnen het systeem handelingen uitvoeren. Het is vanaf dag één een ontwerpkeuze geweest om dat niet alleen in een onverbonden reporting tool aan te bieden, maar juist in de applicatie zelf, vanwaar je direct kan interacteren met de deelnemer entiteit.

Een volgende stap is dat je 8QL queries kunt opstellen en daarmee periodiek handelingen kunt laten uitvoeren. Je kunt dat gebruiken om deelnemers te voorzien van kenmerken, de status van de deelnemer aanpassen of er begeleiders aan koppelen etc. Dit proces haalt een hoop vervelend en handmatig werk weg bij onze gebruikers en helpt om de data consistent te houden, zodat het werkproces optimaal ondersteund wordt.

8QL is de motor onder veel van de functies van Tingit en wordt door onze klanten hoog gewaardeerd. Het is met recht een power tool. We hebben zelfs gebruikers die zich deze taal eigen hebben gemaakt om alles eruit te halen wat erin zit.
De taal 8QL wordt ervaren als complex
Stel je wil alle deelnemers ophalen die hun eerste gesprek nog moeten krijgen. Dit is dan de 8QL query die je nodig hebt:
hasRole(participant) AND customAttribute(DATUM_EERSTE_GESPREK) > currentDate
Voor constructies zoals de bovenstaande zal een door de wol geverfde software-ontwikkelaar de hand niet omdraaien. Maar deze query is doorgaans niet iets waar je een gebruiker mee wil belasten. Om de query's uit te schrijven wordt regelmatig de hulp ingeroepen van 42. Doen we graag, maar de bedoeling was juist om de gebruiker zelfredzaamheid en autonomie te geven in Tingit.

Het invoerveld waar je de 8QL query invoert laat te wensen over. Ja, je hebt auto-completion en dat verlicht de pijn, maar het werkt een beetje bokkig. Met de documentatie eronder kom je een heel eind, maar je moet je query wel bij elkaar puzzelen. Werk aan de winkel dus!
AI Agent, via natuurlijke taal 8QL genereren
Om de 8QL agent tot stand te brengen, moet er een en ander gebeuren, zoals:
- 8QL documentatie geschikt maken voor taalmodel
- prompt ontwerpen die de agent helpt om de juiste 8QL te genereren
- selecteren van het taalmodel dat in staat is de 8QL te genereren
- gewenste output definiëren
- workflow opstellen die rekening houdt met foutsituaties
- interface voor 8QL design verbeteren
- in lijn met wetgeving, zoals AI-act / AVG
- bijhouden en opslaan telemetrie gegevens
Herschrijven 8QL documentatie
De bestaande 8QL documentatie is een puzzel, waar een technisch onderlegd mens de puzzelstukjes zelf bij elkaar moet brengen. De documentatie wordt herschreven en gestructureerd in de trant van OpenAPI, met een beschrijving van de taal syntax en per functie een beschrijving van methode en parameters, inclusief voorbeelden (afwisseling van one-shot, few-shots). De documentatie wordt in een gestructureerd JSON formaat aangeleverd, omdat LLM's daar beter mee omgaan, maar ook omdat dat het mogelijk maakt de nieuwe 8QL interface daarop aan te sluiten.
Prompt ontwerp
De prompt moet zorgvuldig ontworpen worden, zodat de agent alle informatie heeft die het nodig heeft om de 8QL te genereren die de vraag van de gebruiker beantwoordt. We komen uit op het volgende prompt design:

De prompt-onderdelen worden geoptimaliseerd op efficiency (focused prompt), zodat de agent effectief, goedkoop en snel zijn taak kan uitvoeren. De meest constante delen staan vooraan, zodat relatief eenvoudig geïntegreerd kan worden met caching-faciliteiten van het taalmodel.
Selecteren taalmodel
Op basis van het bovenstaande prompt design worden test agents gemaakt in bijvoorbeeld een Google Gem of een OpenAI custom GPT. De test agents worden gevoed met een reeks aan user prompts, waarbij we verwachting hebben dat een bepaalde 8QL gegenereerd wordt.
Op basis van de uitkomst van de test runs wordt gekozen voor het goedkoopste en snelste model dat in staat is de taak uit te voeren. De hoop en verwachting op basis van eerdere tests is dat Google Gemini 2.5 Flash-Lite in staat moet zijn om 8QL te genereren op basis van het prompt design.
Output
Hetgeen de agent produceert is in de basis eenvoudig, namelijk een object met drie velden:
- query; de gegenereerde 8QL query.
- success; true/false, nodig om de workflow te sturen.
- reason; uitleg van waarom de AI tot succes of falen is gekomen. Dit bericht is bedoeld als feedback naar de gebruiker.
Workflow
De stappen voor de workflow om een 8QL query te genereren zien er als volgt uit:
- de gebruiker voert een natuurlijke taal prompt in met het verzoek een 8QL query te maken
- de agent genereert de 8QL query op basis van de gebruiker prompt
- de applicatie controleert of de agent eruit is gekomen:
- agent is er niet uit gekomen; de gebruiker wordt om een verduidelijkende prompt gevraagd, leidend tot een nieuwe generatie-cyclus
- de applicatie controleert of de 8QL query valide is:
- de 8QL query is niet valide; de agent wordt gevraagd om het nogmaals te proberen met een aanvullend prompt onderdeel wat er precies niet werkt
- de applicatie draait de 8QL query en toont aan de gebruiker de resultaten
- de gebruiker wordt gevraagd te controleren of de resultaten kloppen:
- de resultaten kloppen niet; de gebruiker wordt gevraagd te verduidelijken wat er niet klopt, leidend tot een nieuwe generatie-cyclus
De rolverdelingen voor Mens, Machine (applicatie) en Aap (AI agent) zijn toegepast in de workflow.
Verbeterde 8QL user interface
Het moet nog steeds mogelijk zijn om handmatig 8QL query's in te voeren. Daartoe moet de bestaande user interface verbeterd worden. De nieuwe interface moet gebruiken maken van de herschreven 8QL documentatie om de gebruiker te assisteren bij het opstellen van de query.
AI Act / AVG compliant
In het ontwerp wordt er zorgvuldig opgelet dat de agent nergens in het proces de beschikking krijgt over persoonsgegevens. De agent krijgt precies de context mee die het nodig heeft om de 8QL query te genereren, waarna de controle wordt overgedragen aan de applicatie om de 8QL te verifiëren op werking. De beoogde oplossing past in de AI Act en is AVG-compliant.
Telemetrie
De stappen en resulaten worden zorgvuldig gemonitord, met als doel het kunnen volgen van de kosten, het optimaliseren van het prompt design en het kunnen veranderen van onderliggende taalmodellen. Telemetrie-gegevens worden opgeslagen.
Vervolgstappen
Het bouwen van de 8QL agent wordt toegevoegd aan de ontwikkelkaart van Tingit en zal de komende maanden aan gewerkt gaan worden. Zodra de ontwikkeling is voltooid, is het plan om dat terug te koppelen in een post als deze, maar dan over de ontwikkelfase.