AI is all over the place. Een AI lijkt wel alles te weten — maar is dat ook zo? Wat men vaak vergeet, is dat een AI een getraind taalmodel is op basis van bestaande informatie. Het weet dus alleen wat het tijdens het leerproces heeft opgedaan. Maar hoe zit dat dan met nieuwe informatie?
Daarvoor gebruikt men een RAG: Retrieval-Augmented Generation. Het is een techniek die een AI toelaat om nieuwe informatie te gebruiken, zonder dat het model opnieuw getraind moet worden. Laten we eens bekijken hoe zo’n RAG precies werkt en wat het inhoudt.
RAG is geen intelligentie
Het is alsof je een onvoorbereide student een open-boek-examen geeft. Hij heeft opeens toegang tot alle antwoorden, maar zijn begrip van de stof is nog even beperkt als daarvoor. Hij kan feiten reproduceren, verbanden leggen als ze expliciet in de bron staan, en zelfs vloeiend formuleren — maar zodra de vragen creatief worden, of de bronnen tegenstrijdig zijn, stort het kaartenhuis in. Het model begrijpt nog steeds niets van wat het zegt. Het plakt zijn geheugen aan met een externe harde schijf, meer niet.

RAG is dus geen cognitieve upgrade. Je wordt niet slimmer van een boek dat je niet gelezen hebt. Een mens die een boek bestudeert — elk detail, elke nuance — bouwt begrip op. Een RAG-systeem doet dat niet. Het haalt op, het combineert, maar het doorgróndt niet. Of dat ooit zal veranderen, en of toekomstige modellen echte redeneerprocessen zullen ontwikkelen in plaats van gesofisticeerde patroonherkenning — dat is misschien wel de meest fundamentele open vraag in de AI-wereld van vandaag.
Hoe werkt een RAG — Embeddings en vectoren
Het begint allemaal met chunken. Een fancy naam voor het opsplitsen van informatie in kleine blokjes samenhangende tekst. Daarna volgen een aantal methodes die het mogelijk maken snel te zoeken in die chunks — want zoeken in ruwe tekst is gewoon niet snel genoeg als de hoeveelheid groot wordt.
Om snel zoeken mogelijk te maken, zet men de chunks om naar embeddings. Dit is het omzetten van tekst naar wiskundige representaties — getallen, of nog preciezer: vectoren. Het aantal getallen in één vector noemt men de dimensie. Meer dimensies laten toe om fijnere verbanden te leggen tussen vectoren, maar kosten ook meer geheugen en rekenkracht.
Ingewikkeld? Ja, zeker als er zoveel termen tegelijk worden geïntroduceerd. Laten we een praktisch voorbeeld geven.
“Wat is de hoofdstad van België?” → wordt een vector → [14, 70, 80]
“Brussel is de zetel van de Belgische regering” → wordt een vector → [20, 4, 78]
De vectoren zijn embedded. Ze hebben elk 3 getallen, dus de dimensie is 3. De afstand tussen die twee vectoren weerspiegelt de semantische verwantschap — hoe kleiner de afstand, hoe sterker het verband. In dit geval liggen de vectoren dicht bij elkaar, wat correct is: beide zinnen gaan over hetzelfde onderwerp.

Zoeken in de embeddings met FAISS
Voor het zoeken in de embeddings wordt dan weer FAISS gebruikt. Het is een open-source bibliotheek ontwikkeld door Meta AI. FAISS — Facebook AI Similarity Search — is specifiek ontworpen om bij extreem grote verzamelingen vectoren razendsnel de dichtstbijzijnde buren te vinden. Eenmaal je een grote kennisbank hebt, merk je meteen waarom dat zo belangrijk is.
FAISS gebruikt slimme indexeringstechnieken zoals gecomprimeerde representaties en geclusterde deelruimten, waardoor het niet elke vector hoeft te bekijken, maar wel een antwoord geeft dat zeer dicht bij het optimale ligt. FAISS is eigenlijk een efficiënte implementatie van semantisch zoeken.
Het probleem: RAG wordt trager bij schaalgrootte
Zelfs met een snelle zoekfunctie zoals FAISS blijft de omvang van de kennisbank een probleem. Naarmate de kennisbasis groeit, wordt het systeem trager. De analogie is eenvoudig: één boek doorzoeken gaat snel, maar als je een encyclopedie hebt — of een hele bibliotheek — duurt het natuurlijk veel langer voor je het juiste antwoord gevonden hebt.
Daar komt nog een tweede probleem bij. De gevonden chunks worden doorgegeven aan de AI om te verwerken, maar hoe meer informatie je meegeeft, hoe langer de AI erover doet om een antwoord te genereren. Een grotere context is dus nefast voor de snelheid.
De oplossing die vaak toegepast wordt, is een preselectie — ook wel re-ranking genoemd. Na de eerste zoekslag bekijkt een apart systeem de gevonden chunks en filtert de meest relevante eruit. Die stap is cruciaal, want het is een evenwichtsoefening: gooi je te veel weg, dan mist de AI belangrijke context en worden de antwoorden onvolledig of incorrect. Gooi je te weinig weg, dan verwerk je opnieuw te veel en verlies je snelheid. De kunst zit hem in die balans.
De fout die men vaak maakt: semantische vervuiling
Een fout die elke beginnende RAG-ontwikkelaar maakt, is geen rekening houden met semantische vervuiling. Een term die ik zelf ben beginnen gebruiken nadat ik vaststelde dat zoekopdrachten in de embeddings niet de gehoopte resultaten opleverden. Maar wat is semantische vervuiling precies?
Het zijn chunks die rijk zijn aan keywords maar die inhoudelijk niets bijdragen. Een uitstekend voorbeeld is een inhoudsopgave bovenaan een document. Die bevat vrijwel alle keywords van de tekst, maar geeft geen enkele uitleg, oplossing of antwoord. Puur structurele ruis dus.
Is dat erg? Jazeker. Vergeet niet dat de AI na een FAISS-zoekopdracht alle relevante chunks ontvangt — en dat de AI élke chunk moet verwerken. Meer chunks betekent een tragere verwerking. En als het merendeel van die chunks dan ook nog eens niets bijdraagt, is het resultaat dubbel slecht: de AI is traag én de antwoorden zijn van slechte kwaliteit. Semantische vervuiling is dus niet alleen een efficiëntieprobleem, het is een kwaliteitsprobleem.
Wat hebben we geleerd?
Veel boeken in je kast hebben maakt je niet slimmer. Maar een goed bijgehouden overzicht van welke boeken je hebt en wat erin staat, helpt je wel om sneller iets terug te vinden — dat is wat embeddings doen. Bovendien is het handig als je op voorhand al weet welke boeken het meest relevant zijn voor je vraag — dat is preselectie. En tot slot: slechte boeken bewaar je niet. Je gooit ze weg voor ze je zoektocht vertragen en je op het verkeerde spoor zetten — dat is het bestrijden van semantische vervuiling.
