Leerpad
Retrieval-augmented generation (RAG) combineert large language models (LLM’s) met retrievalsystemen om tijdens het genereren van tekst relevante externe informatie binnen te halen.
De afgelopen jaren heeft RAG veel aan populariteit gewonnen en is het een veelvoorkomend onderwerp in sollicitatievragen voor rollen als AI-engineer, machine learning engineer, prompt engineer en data scientist.
Dit artikel helpt je voorbereiden op RAG-gerelateerde sollicitatievragen door een uitgebreid overzicht te geven van 30 kernvragen, van basisconcepten tot meer geavanceerde onderwerpen.
Zelfs als je je niet direct op een gesprek voorbereidt, is dit artikel een goede gelegenheid om je RAG-kennis te testen.
Basis RAG-sollicitatievragen
Laten we beginnen met een reeks fundamentele sollicitatievragen over RAG.
Leg de hoofdonderdelen van een RAG-systeem uit en hoe ze werken.
Een RAG-systeem (retrieval-augmented generation) heeft twee hoofdcomponenten: de retriever en de generator.
De retriever zoekt en verzamelt relevante informatie uit externe bronnen, zoals databases, documenten of websites.
De generator, meestal een geavanceerd taalmodel, gebruikt deze informatie om heldere en nauwkeurige tekst te maken.
De retriever zorgt dat het systeem de meest actuele informatie krijgt, terwijl de generator dit combineert met eigen kennis om betere antwoorden te produceren.
Samen leveren ze nauwkeurigere reacties dan de generator alleen zou kunnen.
Wat zijn de belangrijkste voordelen van RAG ten opzichte van alleen vertrouwen op de interne kennis van een LLM?
Als je alleen vertrouwt op de ingebouwde kennis van een LLM, is het systeem beperkt tot waar het op getraind is, wat verouderd kan zijn of detail kan missen.
RAG-systemen bieden een groot voordeel door actuele informatie uit externe bronnen op te halen, wat leidt tot accuratere en tijdigere antwoorden.
Deze aanpak vermindert ook "hallucinaties"—fouten waarbij het model feiten verzint—omdat de antwoorden op echte data zijn gebaseerd. RAG is vooral nuttig voor specifieke domeinen zoals recht, geneeskunde of tech, waar actuele, gespecialiseerde kennis nodig is.
Wat zijn enkele veelvoorkomende toepassingen van RAG?
RAG wordt gebruikt in allerlei AI-toepassingen in de praktijk, in verschillende domeinen:
-
Vraag-en-antwoord- en supportsystemen: RAG drijft klantenservice-chatbots en knowledgebase-assistenten door actuele documentatie of FAQ’s op te halen en nauwkeurige antwoorden voor gebruikers te genereren. Zo worden vragen van klanten beantwoord met de nieuwste informatie (bijvoorbeeld actuele beleidsinfo of productdetails).
-
Conversatie-agents: Veel chatbots en virtuele assistenten gebruiken RAG om feitelijke, contextbewuste antwoorden te geven. Door ter plekke relevante feiten op te halen kan een conversational agent (zoals een zorg- of finance-chatbot) onderbouwde antwoorden geven op basis van geloofwaardige bronnen.
-
Contentgeneratie en samenvatten: RAG helpt bij het genereren of samenvatten van content met feitelijke juistheid. Het kan bijvoorbeeld delen van nieuwsartikelen of researchpapers ophalen en vervolgens samenvattingen of rapporten produceren die zowel coherent zijn als geverifieerd tegen brondata.
-
Domeinspecifiek onderzoek: In gespecialiseerde velden zoals recht of geneeskunde helpen RAG-systemen door te putten uit domeinspecifieke databases (jurisprudentie, medische tijdschriften, enz.) om complexe vragen te beantwoorden. Zo is de output van het model verankerd in betrouwbare, actuele domeinkennis, wat belangrijk is voor professionele use-cases.
Welke soorten externe kennisbronnen kan RAG gebruiken?
RAG-systemen kunnen informatie verzamelen uit zowel gestructureerde als ongestructureerde externe bronnen:
- Gestructureerde bronnen omvatten databases, API’s of knowledge graphs, waar data geordend is en makkelijk te doorzoeken.
- Ongestructureerde bronnen bestaan uit grote tekstcollecties, zoals documenten, websites of archieven, waarbij de informatie moet worden verwerkt met natural language understanding.
Deze flexibiliteit maakt het mogelijk RAG-systemen af te stemmen op verschillende vakgebieden, zoals juridisch of medisch gebruik, door te putten uit jurisprudentiedatabases, researchjournals of data van klinische trials.
Is prompt engineering belangrijk in RAG?
Prompt engineering helpt taalmodellen om met de opgehaalde informatie antwoorden van hoge kwaliteit te geven. Hoe je een prompt ontwerpt, kan de relevantie en helderheid van de output beïnvloeden.
- Specifieke systeemprompt-sjablonen helpen het model te sturen. In plaats van een simpele standaardprompt als “Beantwoord de vraag”, kun je bijvoorbeeld gebruiken: “Beantwoord de vraag uitsluitend op basis van de gegeven context.” Dit geeft het model expliciete instructies om alleen de context te gebruiken, wat de kans op hallucinaties kan verkleinen.
- Few-shot prompting houdt in dat je het model een paar voorbeeldantwoorden geeft voordat je het zijn eigen antwoord laat genereren, zodat het weet welk type reactie je zoekt.
- Chain-of-thought prompting helpt complexe vragen op te breken door het model aan te moedigen zijn redenering stap voor stap uit te leggen voordat het antwoordt.
Hoe werkt de retriever in een RAG-systeem? Wat zijn gangbare retrievalmethoden?
In een RAG-systeem verzamelt de retriever relevante informatie uit externe bronnen die de generator kan gebruiken. Er zijn verschillende manieren om informatie op te halen.
Eén methode is sparse retrieval, die zoekt op trefwoorden (bijv. TF-IDF of BM25). Dit is eenvoudig, maar vangt mogelijk niet de diepere betekenis achter de woorden.
Een andere benadering is dense retrieval, waarbij neurale embeddings worden gebruikt om de betekenis van documenten en queries te begrijpen. Methoden zoals BERT of Dense Passage Retrieval (DPR) representeren documenten als vectoren in een gedeelde ruimte, wat de retrieval nauwkeuriger maakt.
De keuze tussen deze methoden kan de prestaties van het RAG-systeem sterk beïnvloeden.
Wat zijn de uitdagingen bij het combineren van opgehaalde informatie met LLM-generatie?
Het combineren van opgehaalde informatie met de generatie van een LLM brengt uitdagingen met zich mee. Zo moet de opgehaalde data zeer relevant zijn voor de query, omdat irrelevante data het model kan verwarren en de kwaliteit van het antwoord kan verminderen.
Bovendien kan het, als de opgehaalde informatie botst met de interne kennis van het model, tot verwarrende of onnauwkeurige antwoorden leiden. Het is daarom cruciaal om deze conflicten op te lossen zonder de gebruiker te verwarren.
Ten slotte sluit de stijl en het formaat van opgehaalde data niet altijd aan bij de gebruikelijke schrijfstijl of opmaak van het model, waardoor integratie stroever kan verlopen.
Wat is de rol van een vector database in RAG?
In een RAG-systeem helpt een vector database om dichte embeddings van tekst te beheren en op te slaan. Deze embeddings zijn numerieke representaties die de betekenis van woorden en zinnen vastleggen, gemaakt door modellen zoals BERT of OpenAI.
Wanneer een query wordt uitgevoerd, wordt de embedding daarvan vergeleken met de opgeslagen embeddings in de database om vergelijkbare documenten te vinden. Dit maakt het sneller en nauwkeuriger om de juiste informatie op te halen. Dit proces helpt het systeem om snel de meest relevante informatie te vinden en op te halen, wat zowel de snelheid als de nauwkeurigheid van retrieval verbetert.
Wat zijn enkele gangbare manieren om RAG-systemen te evalueren?
Om een RAG-systeem te evalueren, moet je zowel de retrieval- als de generatiecomponent bekijken.
- Voor de retriever beoordeel je hoe accuraat en relevant de opgehaalde documenten zijn. Metrieken zoals precision (hoeveel van de opgehaalde documenten relevant zijn) en recall (hoeveel van alle relevante documenten zijn gevonden) kunnen hier worden gebruikt.
- Voor de generator kunnen metrieken zoals BLEU en ROUGE worden gebruikt om de gegenereerde tekst te vergelijken met door mensen geschreven voorbeelden om de kwaliteit te beoordelen.
Voor downstream-taken zoals vraag-en-antwoord kunnen metrieken zoals F1-score, precision en recall ook worden gebruikt om het totale RAG-systeem te evalueren.
Hoe ga je om met onduidelijke of onvolledige queries in een RAG-systeem om relevante resultaten te garanderen?
Omgaan met onduidelijke of onvolledige queries in een RAG-systeem vereist strategieën om ervoor te zorgen dat, ondanks de onduidelijkheid in de invoer van de gebruiker, relevante en nauwkeurige informatie wordt opgehaald.
Een aanpak is het implementeren van queryverfijningstechnieken, waarbij het systeem automatisch verduidelijkingen suggereert of de onduidelijke query op basis van bekende patronen of eerdere interacties herformuleert tot een preciezere. Dit kan inhouden dat vervolgvragen worden gesteld of dat de gebruiker meerdere opties krijgt om zijn intentie te verfijnen.
Een andere methode is om een diverse set documenten op te halen die meerdere mogelijke interpretaties van de query dekken. Door een spreiding aan resultaten op te halen, is de kans groter dat er, zelfs bij een vage query, relevante informatie tussen zit.
Tot slot kunnen we natural language understanding (NLU)-modellen gebruiken om de intentie van de gebruiker te achterhalen uit onvolledige queries en zo het retrievalproces te verfijnen.
Intermediaire RAG-sollicitatievragen
Nu we een paar basisvragen hebben behandeld, is het tijd voor intermediaire RAG-sollicitatievragen.
Hoe kies je de juiste retriever voor een RAG-toepassing?
De juiste retriever kiezen hangt af van het type data waarmee je werkt, de aard van de queries en hoeveel rekenkracht je hebt.
Voor complexe queries die een diep begrip van de betekenis achter woorden vereisen, zijn dense retrieval-methoden zoals BERT of DPR beter. Deze methoden vatten context en zijn ideaal voor taken zoals klantenondersteuning of onderzoek, waar begrip van onderliggende betekenissen telt.
Als de taak simpeler is en draait om trefwoordmatching, of als je beperkte middelen hebt, zijn sparse retrieval-methoden zoals BM25 of TF-IDF geschikter. Deze zijn sneller en eenvoudiger op te zetten, maar vinden mogelijk geen documenten die niet exact op trefwoorden matchen.
De belangrijkste trade-off tussen dense en sparse retrieval is nauwkeurigheid versus rekenkosten. Soms kan het combineren van beide in een hybride retrievalsysteem helpen om nauwkeurigheid te balanceren met reken-efficiëntie. Zo profiteer je van beide methoden, afhankelijk van je behoeften.
Beschrijf wat een hybride zoekopzet is.
Hybride zoeken combineert de sterke punten van zowel dense als sparse retrievalmethoden.
Je kunt bijvoorbeeld beginnen met een sparse methode zoals BM25 om snel documenten op trefwoorden te vinden. Vervolgens herordent een dense methode zoals BERT die documenten op basis van context en betekenis. Dit geeft je de snelheid van sparse search met de nauwkeurigheid van dense methoden, ideaal voor complexe queries en grote datasets.
Heb je een vector database nodig om RAG te implementeren? Zo niet, wat zijn de alternatieven?
Een vector database is geweldig voor het beheren van dichte embeddings, maar is niet altijd noodzakelijk. Alternatieven zijn:
- Traditionele databases: Als je sparse methoden of gestructureerde data gebruikt, kunnen reguliere relationele of NoSQL-databases volstaan. Ze werken goed voor zoekopdrachten op trefwoorden. Databases zoals MongoDB of Elasticsearch zijn goed voor ongestructureerde data en full-text search, maar missen diepe semantische zoekmogelijkheden.
- Inverted indices: Deze koppelen trefwoorden aan documenten voor snelle zoekopdrachten, maar vangen de betekenis achter de woorden niet.
- Bestandssystemen: Voor kleinere systemen kunnen geordende documenten in bestanden werken, maar de zoekmogelijkheden zijn beperkt.
De juiste keuze hangt af van je specifieke behoeften, zoals de schaal van je data en of je diepe semantische begrip nodig hebt.
Hoe zorg je ervoor dat de opgehaalde informatie relevant en accuraat is?
Om te zorgen dat de opgehaalde informatie relevant en accuraat is, kun je verschillende aanpakken gebruiken:
- Curate high quality knowledge bases: Zorg dat de informatie in je database betrouwbaar is en aansluit bij de behoeften van je toepassing.
- Retriever finetunen: Pas het retrievermodel aan om beter te matchen met je specifieke taken en vereisten. Dit verbetert de relevantie van de resultaten.
- Re-ranking gebruiken: Sorteer na de initiële retrieval de resultaten op gedetailleerde relevantie om de meest nauwkeurige informatie bovenaan te krijgen. Deze stap checkt dieper hoe goed de resultaten bij de query passen.
- Feedbackloops implementeren: Verzamel input van gebruikers of modellen over de bruikbaarheid van de resultaten. Deze feedback kan helpen om de retriever in de loop van de tijd te verfijnen en te verbeteren. Een voorbeeld hiervan is Corrective RAG (CRAG).
- Regelmatige evaluatie: Meet continu de prestaties van het systeem met metrieken zoals precision, recall of F1-score om nauwkeurigheid en relevantie te blijven verbeteren.
Wat zijn technieken om met lange documenten of grote knowledgebases in RAG om te gaan?
Bij lange documenten of grote knowledgebases zijn dit nuttige technieken:
- Chunking: Breek lange documenten op in kleinere, beheersbare secties. Zo kun je makkelijker zoeken en relevante delen ophalen zonder het hele document te verwerken.
- Samenvatten: Maak verkorte versies van lange documenten. Zo werkt het systeem met kortere samenvattingen in plaats van de volledige tekst, wat retrieval versnelt.
- Hiërarchische retrieval: Gebruik een tweestapsaanpak waarbij je eerst zoekt naar brede categorieën en daarna inzoomt op specifieke details. Dit helpt grote hoeveelheden data effectiever te beheren.
- Geheugenefficiënte embeddings: Gebruik compacte vectorrepresentaties om geheugen- en rekenbehoefte te verlagen. Het optimaliseren van de embed-dimensie maakt het eenvoudiger om met grote datasets om te gaan.
- Indexeren en sharden: Splits de knowledgebase op in kleinere delen en sla ze op over meerdere systemen. Dit maakt parallelle verwerking en snellere retrieval mogelijk, vooral in grootschalige systemen.
Hoe optimaliseer je de prestaties van een RAG-systeem qua zowel nauwkeurigheid als efficiëntie?
Om een RAG-systeem optimaal te laten presteren qua nauwkeurigheid en efficiëntie kun je verschillende strategieën gebruiken:
- Modellen finetunen: Pas retriever- en generatormodellen aan met data die specifiek is voor je taak. Dit helpt bij betere prestaties op gespecialiseerde queries.
- Efficiënt indexeren: Organiseer je knowledgebase met snelle datastructuren zoals inverted indices of hashing. Dit versnelt het vinden van relevante informatie.
- Caching gebruiken: Sla vaak geraadpleegde data op zodat die niet telkens opnieuw hoeft te worden opgehaald. Dit verbetert de efficiëntie en versnelt reacties.
- Retrievalstappen verminderen: Minimaliseer het aantal zoekacties. Verhoog de precisie van de retriever of gebruik re-ranking om alleen de beste resultaten naar de generator door te geven, wat onnodige verwerking vermindert.
- Hybride zoeken: Combineer sparse en dense retrieval. Gebruik bijvoorbeeld sparse retrieval om snel een brede set relevante documenten te vinden en pas daarna dense retrieval toe om deze resultaten nauwkeuriger te verfijnen en te rangschikken.
Hoe behoudt een RAG-systeem context in een meerstapsgesprek?
In meerstapsgesprekken (bijv. een chatbotdialoog) moet een RAG-systeem relevante context uit eerdere beurten meenemen om latere vragen correct te beantwoorden. Om dit te bereiken kan RAG de gespreksgeschiedenis in elke nieuwe query opnemen:
-
Queryverfijning: Het systeem kan de vraag van de gebruiker automatisch herschrijven of aanvullen met informatie uit eerdere uitwisselingen. Door details uit eerdere beurten toe te voegen, krijgt de retriever een contextrijkere query en kan hij documenten ophalen die relevant zijn voor het lopende gesprek.
-
Gespreksgeschiedenis opnemen: Een andere aanpak is om het model een samenvatting of lijst met eerdere dialoogbeurten als inputcontext te geven. Veel RAG-architecturen laten toe om een reeks berichten (gebruikers- en assistentgeschiedenis) mee te geven naast de nieuwe vraag. Zo houdt de retriever bij het zoeken rekening met de gevestigde context, en kan de generator de eerdere context gebruiken om het gesprek coherent te houden.
Met deze methoden houdt het RAG-systeem bij “wie wat zei” en wat al is afgehandeld. Zo voorkomt het dat details worden vergeten of dat het zichzelf herhaalt.
Geavanceerde RAG-sollicitatievragen
Tot nu toe hebben we basis- en intermediaire RAG-vragen behandeld; nu pakken we geavanceerdere concepten aan zoals chunkingtechnieken of contextualisering.
Wat zijn de verschillende chunkingtechnieken om documenten op te delen, en wat zijn hun voor- en nadelen?
Er zijn meerdere manieren om documenten op te delen voor retrieval en verwerking:
- Vaste lengte: Documenten in chunks van vaste grootte splitsen. Makkelijk te doen, maar chunks vallen niet altijd samen met logische breuken, waardoor belangrijke info kan worden gesplitst of irrelevante content kan worden meegenomen.
- Zinsgebaseerd: Opdelen in zinnen houdt zinnen intact, ideaal voor gedetailleerde analyse. Het kan echter tot te veel chunks leiden of context verliezen als zinnen te kort zijn voor volledige ideeën.
- Alineagebaseerd: Delen per alinea helpt context te bewaren, maar alinea’s kunnen te lang zijn, waardoor retrieval en verwerking minder efficiënt worden.
- Semantisch chunken: Chunks maken op basis van betekenis, zoals secties of onderwerpen. Dit houdt de context helder maar is lastiger te implementeren omdat geavanceerde tekstanalyse nodig is.
- Sliding window: Chunks overlappen door over de tekst te schuiven. Zo mis je geen belangrijke info, maar het kan rekenintensief zijn en tot herhaling leiden.
Wat zijn de trade-offs tussen het opdelen van documenten in grotere versus kleinere chunks?
Kleinere chunks, zoals zinnen of korte alinea’s, voorkomen dat belangrijke context verdund raakt wanneer deze in één vector wordt gecomprimeerd. Dit kan echter leiden tot verlies van langetermijnafhankelijkheden tussen chunks, waardoor modellen verwijzingen over chunks heen minder goed begrijpen.
Grotere chunks behouden meer context, waardoor rijkere contextinformatie mogelijk is, maar ze kunnen minder gefocust zijn en er kan informatie verloren gaan bij het encoden in één vector.
Wat is late chunking en hoe verschilt het van traditionele chunkmethoden?
Late chunking is een effectieve aanpak die is ontworpen om de beperkingen van traditionele chunkmethoden bij documentverwerking aan te pakken.
Bij traditionele methoden worden documenten eerst in chunks gesplitst, zoals zinnen of alinea’s, voordat een embeddingmodel wordt toegepast. Deze chunks worden vervolgens afzonderlijk gecodeerd in vectoren, vaak met mean pooling om één embedding per chunk te maken. Deze aanpak kan leiden tot verlies van langetermijncontextuele afhankelijkheden, omdat de embeddings onafhankelijk van elkaar worden gegenereerd, zonder rekening te houden met de volledige documentcontext.
Late chunking pakt het anders aan. Het past eerst de transformerlaag van het embeddingmodel toe op het hele document, of zoveel mogelijk daarvan, en creëert zo een reeks vectorrepresentaties voor elk token. Deze methode vangt de volledige context van de tekst in deze token-level embeddings.
Daarna wordt mean pooling toegepast op de chunks van deze reeks tokenvectoren, waardoor embeddings voor elke chunk ontstaan die zijn geïnformeerd door de context van het hele document. In tegenstelling tot de traditionele methode genereert late chunking chunk-embeddings die op elkaar zijn geconditioneerd, waardoor meer context behouden blijft en langetermijnafhankelijkheden worden opgelost.
Door het chunken later in het proces toe te passen, profiteert de embedding van elke chunk van de rijke context van het volledige document, in plaats van geïsoleerd te zijn. Deze aanpak pakt het probleem van contextverlies aan en verbetert de kwaliteit van de embeddings voor retrieval- en generatietaken.

Bron: Günther et al., 2024
Leg het concept "contextualization" in RAG uit en de impact op prestaties.
Contextualisering in RAG betekent ervoor zorgen dat de opgehaalde informatie relevant is voor de query. Door de opgehaalde data af te stemmen op de query, levert het systeem betere, relevantere antwoorden.
Dit verkleint de kans op onjuiste of irrelevante resultaten en zorgt dat de output beter aansluit op de behoefte van de gebruiker. Een aanpak is om een LLM te gebruiken om te checken of de opgehaalde documenten relevant zijn voordat ze naar het generatormodel gaan, zoals gedemonstreerd door Corrective RAG (CRAG).
Hoe kun je mogelijke biases in de opgehaalde informatie of in de generatie van de LLM aanpakken?
Allereerst is het essentieel om de knowledgebase zo op te bouwen dat bevooroordeelde content wordt gefilterd, zodat de informatie zo objectief mogelijk is. Je kunt ook het retrievalsysteem hertrainen om evenwichtige, onbevooroordeelde bronnen te prioriteren.
Een andere belangrijke stap is een agent inzetten die specifiek controleert op mogelijke biases en waarborgt dat de output van het model objectief blijft.
Bespreek de uitdagingen bij het omgaan met dynamische of evoluerende knowledgebases in RAG.
Een groot probleem is het up-to-date houden van de geïndexeerde data met de nieuwste informatie, wat een betrouwbare update-structuur vereist. Versiebeheer wordt daarom cruciaal om verschillende iteraties van informatie te managen en consistentie te waarborgen.
Daarnaast moet het model zich in realtime kunnen aanpassen aan nieuwe informatie zonder vaak te hoeven hertrainen, wat veel middelen kan kosten. Deze uitdagingen vragen om geavanceerde oplossingen om het systeem accuraat en relevant te houden terwijl de knowledgebase evolueert.
Wat is CAG, en hoe verschilt het van traditionele RAG? Wanneer geef je in productie de voorkeur aan CAG boven RAG?
CAG (Cache-Augmented Generation) is een evolutie van RAG waarbij opgehaalde documenten worden samengevat of gecomprimeerd voordat ze naar de LLM gaan. Dit verbetert de relevantie, vermindert het aantal tokens en helpt om meer informatie in het contextvenster van het model te passen.
Het belangrijkste verschil is dat bij CAG de opgehaalde content een tussenstap doorloopt, zoals een samenvatter of contextverfijner, voordat deze naar de generator gaat. Bij traditionele RAG worden ruwe documenten direct in de prompt gevoerd.
CAG is vooral nuttig wanneer:
-
Je met statische datasets werkt (bijv. productcatalogi, academische papers) die vooraf kunnen worden gecomprimeerd en gecachet.
-
Token-efficiëntie cruciaal is (bijv. kostengevoelige API’s of mobile/on-device inference).
-
De opgehaalde documenten lang of ruiserig zijn en distillatie nodig hebben.
RAG heeft daarentegen de voorkeur wanneer:
-
De onderliggende data dynamisch is of vaak wordt bijgewerkt (bijv. realtime supporttickets, live documentatie).
-
Je de meest recente kennis bij querytijd wilt betrekken, zonder de hele knowledgebase opnieuw te verwerken.
Kortom, gebruik CAG voor stabiele domeinen waar je de context vooraf kunt optimaliseren, en RAG voor dynamische scenario’s waar actualiteit en on-demand retrieval zwaarder wegen.
Bekijk dit artikel over RAG versus CAG voor een meer gedetailleerde vergelijking.
Wat zijn enkele geavanceerde RAG-systemen?
Er zijn veel geavanceerde RAG-systemen.
Een daarvan is Adaptive RAG, waarbij het systeem niet alleen informatie ophaalt, maar ook zijn aanpak realtime aanpast op basis van de query. Adaptive RAG kan besluiten geen retrieval te doen, single-shot RAG of iteratieve RAG. Dit dynamische gedrag maakt het systeem robuuster en relevanter voor het verzoek van de gebruiker.
Een ander geavanceerd systeem is Agentic RAG, dat retrieval agents introduceert—tools die beslissen of er wel of niet informatie uit een bron moet worden opgehaald. Door een taalmodel deze mogelijkheid te geven kan het zelf bepalen of extra informatie nodig is, waardoor het proces soepeler verloopt.
Corrective RAG (CRAG) wordt ook populair. Hierbij beoordeelt het systeem de opgehaalde documenten op relevantie. Alleen documenten die als relevant zijn geclassificeerd gaan naar de generator. Deze zelfcorrectiestap helpt ervoor te zorgen dat accurate, relevante informatie wordt gebruikt. Lees voor meer info deze tutorial over Corrective RAG (CRAG) implementeren met LangGraph.
Self-RAG gaat nog een stap verder door niet alleen de opgehaalde documenten, maar ook de uiteindelijke gegenereerde antwoorden te evalueren, zodat beide zijn afgestemd op de vraag van de gebruiker. Dit leidt tot betrouwbaardere en consistenter resultaten.
Hoe kun je de latentie in een realtime RAG-systeem verminderen zonder aan nauwkeurigheid in te boeten?
Een effectieve aanpak is het vooraf ophalen van relevante en veelgevraagde informatie, zodat die direct beschikbaar is. Daarnaast kan het verfijnen van je indexering en query-algoritmen een groot verschil maken in hoe snel data wordt opgehaald en verwerkt.
Wat zijn enkele beperkingen of uitdagingen van RAG-systemen?
Hoewel RAG krachtig is, kent het verschillende beperkingen en uitdagingen:
-
Afhankelijkheid van de kwaliteit van opgehaalde data: Een RAG-systeem is zo goed als de informatie die het ophaalt. Als de retriever irrelevante of onjuiste documenten binnenhaalt, lijdt het antwoord van de generator daaronder. Zorgen voor hoogwaardige, betrouwbare databronnen (en het finetunen van de retriever) is een voortdurende uitdaging om garbage-in, garbage-out te voorkomen.
-
Toegenomen complexiteit en latentie: RAG voegt een extra retrievalstap toe bovenop generatie, wat het geheel complexer en rekenzwaarder maakt dan een standalone LLM. Zoeken in een grote knowledgebase kan latentie toevoegen en veel rekenbronnen vereisen, dus RAG-systemen moeten nauwkeurigheid balanceren met efficiëntie.
-
Onderhoud van de knowledgebase: In tegenstelling tot statische LLM’s is RAG afhankelijk van een externe kennisrepository die regelmatig moet worden bijgewerkt en gecureerd. Organisaties moeten continu nieuwe data opnemen, verouderde info verwijderen en indices beheren. Zonder betrouwbare en actuele bronnen kan een RAG-systeem snel minder effectief worden of zelfs verouderde antwoorden geven.
-
Moeilijkheid van integratie en tuning: Retrieval en generatie combineren betekent meer componenten om af te stemmen en te monitoren (de vectordatabase, het retrievermodel en de LLM). Fouten opsporen kan lastiger zijn omdat problemen aan de retrieval- of juist aan de generatiek kant kunnen liggen. Deze complexiteit kan de ontwikkel- en onderhoudsinspanning verhogen vergeleken met alleen een LLM gebruiken.
Het is ook het vermelden waard dat als de data in een domein grotendeels statisch is en binnen de training van het model past, een gefinetunede LLM voldoende kan zijn in plaats van RAG. Fine-tunen mist echter het vermogen van RAG om on-the-fly nieuwe informatie te integreren en kan duurder zijn om te hertrainen bij elke kennisupdate.
RAG-sollicitatievragen voor AI-engineers
Laten we nu enkele specifieke vragen behandelen die gericht zijn op kandidaten voor AI-engineerposities.
Hoe zou je de prestaties van een RAG-systeem evalueren en verbeteren in een productieomgeving?
Allereerst moet je gebruikersfeedback bijhouden om te meten hoe goed het systeem presteert en of het relevant is.
Je wilt ook de latentie monitoren om te zorgen dat reacties tijdig zijn, en de kwaliteit van zowel de opgehaalde documenten als de gegenereerde outputs evalueren. Belangrijke metrieken zoals antwoordnauwkeurigheid, gebruikerstevredenheid en systeemsnelheid zijn belangrijk.
Om de prestaties te verhogen kun je onderdelen van het systeem hertrainen met geüpdatete data of parameters bijstellen. Je kunt ook retrievalalgoritmen verfijnen voor meer relevantie en efficiëntie, en kennisbronnen regelmatig bijwerken om ze actueel te houden.
Continue prestatiereviews en A/B-testen kunnen inzichten opleveren voor voortdurende verbeteringen.
Hoe borg je de betrouwbaarheid en robuustheid van een RAG-systeem in productie, met name bij mogelijke storingen of onverwachte input?
Een productie-klaar RAG-systeem bouwen vereist het afvangen van diverse uitdagingen. Mogelijke oplossingen zijn onder meer:
- Redundantie en failover: Redundante componenten of back-upsystemen implementeren om continuïteit te waarborgen bij storingen.
- Foutafhandeling en logging: Mechanismen voor foutafhandeling implementeren om fouten te vangen en te loggen, zodat snelle diagnose en troubleshooting mogelijk is.
- Inputvalidatie en -sanitisatie: Gebruikersinvoer valideren en schonen om kwetsbaarheden en aanvallen zoals prompt injections te voorkomen.
- Monitoring en alerting: Monitoring- en waarschuwingssystemen opzetten om prestatieproblemen of mogelijke bedreigingen te detecteren en aan te pakken.
Hoe zou je een RAG-systeem ontwerpen voor een specifieke taak (bijv. vraag-en-antwoord, samenvatten)?
Voor een vraag-en-antwoord-systeem kun je beginnen met het kiezen van een retriever die efficiënt relevante documenten kan vinden en ophalen op basis van de query van de gebruiker. Dit kan iets traditioneels zijn, zoals trefwoordzoekopdrachten, of geavanceerder, zoals dense embeddings voor betere retrieval. Vervolgens kies of finetune je een generator die met de opgehaalde documenten accurate en samenhangende antwoorden kan maken.
Bij samenvatten is het de taak van de retriever om volledige, relevante content te verzamelen over het document of onderwerp. De generator moet deze content vervolgens kunnen destilleren tot beknopte, betekenisvolle samenvattingen.
Prompt engineering is hierbij cruciaal. Afhankelijk van de downstream-taak moeten we prompts maken die het model sturen om de opgehaalde informatie te verwerken in de relevante output.
Kun je de technische details uitleggen van hoe je een LLM zou finetunen voor een RAG-taak?
Het begint met het verzamelen en voorbereiden van data die specifiek is voor de taak. Dit kunnen geannoteerde voorbeelden van vraag-antwoordparen zijn of samenvattingsdatasets.
Vervolgens kun je technieken gebruiken zoals retrieval-augmented language modeling (REALM), die het model helpt de opgehaalde documenten beter te integreren in zijn antwoorden. Dit betekent vaak dat je de architectuur van het model of de trainingsmethoden aanpast om beter met context uit opgehaalde documenten om te gaan.
Je kunt ook Retrieval-Augmented Fine-Tuning (RAFT) gebruiken, dat de kracht van RAG met finetuning combineert, zodat het model zowel domeinspecifieke kennis leert als effectief externe informatie kan ophalen en gebruiken.
Hoe ga je om met verouderde of irrelevante informatie in een RAG-systeem, vooral in snel veranderende domeinen?
Een aanpak is om de knowledgebase of documentindex regelmatig te updaten, zodat nieuwe informatie wordt opgenomen zodra die beschikbaar is. Dit kan inhouden dat je geautomatiseerde workflows inricht die periodiek geüpdatete content scrapen of inladen, zodat de retriever altijd met de nieuwste data werkt.
Daarnaast kan metadata-tagging worden gebruikt om verouderde informatie te markeren, zodat het systeem tijdens retrieval recentere en relevantere documenten kan prioriteren.
In snel veranderende domeinen is het ook belangrijk mechanismen te integreren die zoekresultaten filteren of herordenen op basis van actualiteit. Door bijvoorbeeld recentere artikelen of documenten zwaarder te wegen, zorg je dat de gegenereerde antwoorden op actuele bronnen zijn gebaseerd.
Een andere techniek is het gebruik van feedbackloops of human-in-the-loop-systemen waarbij gemarkeerde onjuistheden snel kunnen worden gecorrigeerd en de retriever kan worden aangepast om verouderde informatie te vermijden.
Hoe balanceer je retrievalrelevantie en -diversiteit in een RAG-systeem om volledige antwoorden te garanderen?
Relevantie en diversiteit balanceren draait om accurate en afgeronde antwoorden. Relevantie zorgt dat de opgehaalde documenten goed aansluiten op de query, terwijl diversiteit voorkomt dat het systeem te narrow focust op één bron of perspectief.
Een manier om dit te balanceren is re-rankingstrategieën gebruiken die zowel relevantie als diversiteit prioriteren. Je kunt ook diversiteit verhogen door documenten uit uiteenlopende bronnen of secties binnen de knowledgebase te halen.
Het clusteren van vergelijkbare resultaten en vervolgens documenten uit verschillende clusters selecteren helpt ook.
Het finetunen van de retriever met aandacht voor zowel relevantie als diversiteit kan eveneens zorgen dat het systeem een volledig set documenten ophaalt.
Hoe zorg je dat de gegenereerde output in een RAG-systeem consistent blijft met de opgehaalde informatie?
Een belangrijke aanpak is een nauwe koppeling tussen retrieval en generatie via prompt engineering. Zorgvuldig ontworpen prompts die het taalmodel expliciet instrueren zijn antwoorden te baseren op de opgehaalde documenten, helpen om de generatie gegrond te houden in de data van de retriever.
Daarnaast helpen technieken zoals citatiegeneratie, waarbij het model wordt gevraagd zijn antwoorden te onderbouwen of te verwijzen naar de opgehaalde bronnen, om consistentie te bewaren.
Een andere aanpak is post-generatiecontroles of validatie toepassen, waarbij de output wordt vergeleken met de opgehaalde documenten om de consistentie te waarborgen. Dit kan met similariteitsmetrieken of met kleinere verificatiemodellen die de feitelijke consistentie tussen opgehaalde data en gegenereerde tekst toetsen.
In sommige gevallen kun je iteratieve verfijning gebruiken: het model genereert eerst een output en raadpleegt daarna opnieuw de opgehaalde documenten om zijn antwoord te controleren en bij te schaven. Feedbackloops en correcties door gebruikers kunnen ook worden benut om de consistentie in de tijd te verbeteren, doordat het systeem leert van eerdere inconsistenties en zijn retrieval- en generatiemechanismen daarop aanpast.
Hoe waarborg je dataprivacy en -beveiliging in een RAG-systeem, vooral bij gevoelige informatie?
Privacy en beveiliging waarborgen in RAG-systemen is cruciaal wanneer opgehaalde data of gebruikersqueries gevoelige of persoonlijke informatie bevatten. Belangrijke strategieën zijn:
-
Dataredactie en anonimisering: Verwijder of maskeer persoonlijk identificeerbare informatie (PII) en andere gevoelige details voordat data de RAG-pijplijn in gaat. Zo kunnen documenten bij inname worden gescand en PII geredigeerd. Deze zero-trustbenadering betekent dat, zelfs als data wordt opgehaald, er geen vertrouwelijke info wordt blootgesteld omdat die vooraf is gesaneerd.
-
Veilige dataopslag en -overdracht: Gebruik encryptie voor data in rust (in databases of vector stores) en tijdens overdracht wanneer de retriever met de opslag communiceert. Toegangscontrole (met correcte authenticatie en autorisatie) voor de vectordatabase en kennisbronnen voorkomt ongeautoriseerde toegang. Alleen vertrouwde apps of services mogen uit de knowledgebase lezen.
-
Rolgebaseerde toegangscontrole: Implementeer strikte toegangsfilters op retrievalresultaten. Je kunt kennischunks taggen met metadata over wie ze mag zien (bijv. admin vs. gebruiker) en het RAG-systeem deze regels tijdens retrieval laten afdwingen. Zo kan een zorgassistent artsen patiëntidentificerende info tonen, maar nooit aan andere gebruikers.
-
Promptfiltering en outputmonitoring: Integreer AI-guardrails om te voorkomen dat de LLM privégegevens uitstuurt. Technieken zoals verdediging tegen prompt injection, outputscans of beleidskaders (zoals OWASP-richtlijnen voor LLM’s) kunnen helpen om gevoelige content uit reacties te filteren. Human-in-the-loop review kan ook worden ingezet in kritieke domeinen.
-
Compliance en auditing: Zorg dat het RAG-systeem vanaf het ontwerp voldoet aan regelgeving rond gegevensbescherming (AVG, HIPAA, enz.). Dit omvat het bijhouden van auditlogs van welke data wanneer is opgehaald, het verkrijgen van correcte gebruikersconsent voor het gebruik van hun data en het regelmatig auditen van kennisbronnen op gevoelige informatie.
Door deze maatregelen te combineren kan een RAG-systeem veilig met gevoelige data omgaan. In een sollicitatiegesprek wordt verwacht dat je benoemt dat het beschermen van gebruikersdata geen bijzaak is–het is ingebouwd in hoe de RAG-pijplijn informatie inlaadt, opslaat, ophaalt en genereert.
Conclusie
Deze gids gaf je 30 belangrijke sollicitatievragen om je te helpen voorbereiden op gesprekken over RAG, van basisconcepten tot geavanceerde RAG-systemen.
Wil je meer leren over RAG-systemen, bekijk dan deze blogs:
Ryan is lead data scientist en gespecialiseerd in het bouwen van AI-toepassingen met LLM’s. Hij is promovendus in Natural Language Processing en Knowledge Graphs aan Imperial College London, waar hij ook zijn master in Computer Science heeft behaald. Buiten data science om schrijft hij een wekelijkse Substack-nieuwsbrief, The Limitless Playbook, waarin hij één toepasbaar idee van ’s werelds beste denkers deelt en af en toe schrijft over kernconcepten in AI.

