Wat is RAG? Retrieval-Augmented Generation uitgelegd met een werkend voorbeeld
RAG laat een AI-model antwoorden vanuit uw eigen documenten in plaats van alleen vanuit het geheugen. Leer hoe de pijplijn werkt, voer een kleine versie uit in gewone Python en ontdek waarom echte systemen falen en hoe u deze kunt testen.
- RAG vindt eerst relevante informatie, voegt deze toe aan de prompt en vraagt het model vervolgens om op basis daarvan te antwoorden.
- Het is de gebruikelijke manier om een taalmodel te koppelen aan privé of vaak veranderende gegevens.
- De meeste kwaliteitsproblemen beginnen bij het ophalen en voorbereiden van gegevens, niet bij het model.
- RAG vermindert verzonnen antwoorden, maar elimineert ze niet, dus je moet het testen.
Vraag een algemene AI-assistent naar het terugbetalingsbeleid van uw bedrijf, en hij kan alleen maar raden. Het heeft uw documenten nooit gezien. RAG, een afkorting van Retrieval-Augmented Generation, lost dit op door de juiste informatie op te zoeken en deze samen met de vraag aan het model te geven.
Deze handleiding legt elke fase in duidelijke taal uit en bouwt vervolgens een kleine versie met alleen de standaardbibliotheek van Python. We hebben die code uitgevoerd op Python 3.13 en de weergegeven scores zijn afkomstig van die run. Er wordt geen taalmodel gebruikt, dus het demonstreert het ophalen en snel bouwen, en we hebben de laatste antwoordstap niet getest.
Wat is RAG?
Retrieval-augmented generatie is een techniek die een zoekstap combineert met een taalmodel. Wanneer er een vraag binnenkomt, doorzoekt het systeem een kennisbron, voegt de beste resultaten toe aan de prompt en vraagt het model om te antwoorden op basis van dat materiaal.
Denk aan een openboekexamen. Een leerling met een gesloten boek vertrouwt op zijn geheugen en kan zich vol vertrouwen verkeerd herinneren. Een leerling met een open boek kan eerst de juiste pagina opzoeken. RAG geeft het model dat boek en laat het ook verwijzen naar welke pagina het gebruikte.
Het probleem dat RAG oplost
Een taalmodel op zichzelf heeft drie beperkingen voor zakelijk gebruik:
- Het kent uw privégegevens niet. Uw polissen, tickets en contracten maakten geen deel uit van de training.
- De kennis heeft een grenswaarde. Het systeem kan niet op de hoogte zijn van een prijs die u vanochtend heeft gewijzigd.
- Het kan antwoorden bedenken. Als het niet zeker is, kan het iets plausibels en toch vals opleveren.
RAG pakt ze alle drie aan, en je hoeft niets om te scholen. Werk een document bij, indexeer het opnieuw, en het volgende antwoord kan het gebruiken.
Hoe RAG werkt, stap voor stap
Een RAG-systeem heeft twee pijpleidingen. De ene bereidt uw gegevens van tevoren voor en de andere loopt voor elke vraag.
Indexeren: uw gegevens voorbereiden
- Laden: verzamel inhoud uit pdf’s, wiki’s, databases of tickets.
- Opschonen en opdelen: verwijder rommel en verdeel documenten vervolgens in kleine passages.
- Insluiten: zet elke passage om in een lijst met cijfers, een zogenaamde insluiting, die de betekenis ervan vastlegt.
- Opslaan: sla de insluitingen op in een doorzoekbare index, vaak een vectordatabase.
Vragen stellen: een vraag beantwoorden
- Ophalen: sluit de vraag in en zoek de passages die de betekenis het dichtst benaderen.
- Augment: voeg deze passages in de prompt in.
- Genereren: het model schrijft een antwoord met behulp van die context.
Bij het ophalen hoeven geen vectoren te worden gebruikt. Het kan een zoekopdracht op trefwoord zijn of zelfs een SQL-query, afhankelijk van welke informatie de juiste informatie voor uw gegevens vindt.
Een klein werkend voorbeeld
Om de bewegende delen duidelijk te kunnen zien, is hier een kleine retriever zonder bibliotheken. Het geeft tekst weer zoals het aantal woorden telt, een veel eenvoudigere vervanging voor echte inbedding, en het scoort gelijkenis met behulp van de cosinusmaat.
import math, re
from collections import Counter
DOCS = {
"refunds": "Refunds are paid within 7 days to the original payment method.",
"shipping": "Standard shipping takes 3 to 5 working days across India.",
"warranty": "All keyboards include a 2 year warranty against defects.",
}
def vectorize(text):
return Counter(re.findall(r"[a-z0-9]+", text.lower()))
def similarity(a, b):
dot = sum(a[word] * b[word] for word in a)
size = math.sqrt(sum(v * v for v in a.values()))
size *= math.sqrt(sum(v * v for v in b.values()))
return dot / size if size else 0
def retrieve(question, k=1):
q = vectorize(question)
scored = [(similarity(q, vectorize(t)), name) for name, t in DOCS.items()]
return sorted(scored, reverse=True)[:k]
def build_prompt(question):
(score, name), = retrieve(question)
return (
"Answer using only the context. If it is not there, say you do not know.\n"
f"Context: {DOCS[name]}\n"
f"Question: {question}"
)
Vragen naar terugbetalingen vindt de juiste passage en bouwt deze prompt op:
print(retrieve("How many days until refunds are paid?"))
# [(0.4558..., 'refunds')]
print(build_prompt("How many days until refunds are paid?"))
# Answer using only the context. If it is not there, say you do not know.
# Context: Refunds are paid within 7 days to the original payment method.
# Question: How many days until refunds are paid?
In een compleet systeem zou u die prompt nu naar een taalmodel sturen. Het belangrijke detail is de instructie om toe te geven wanneer het antwoord ontbreekt. Hierover kunt u meer lezen in onze gids voor prompt engineering.
Wat ons voorbeeld mist
Probeer nu een vraag die hetzelfde betekent, maar met andere woorden:
print(retrieve("When can I get my money back?", k=3))
# [(0.0, 'warranty'), (0.0, 'shipping'), (0.0, 'refunds')]
Elke score is nul, omdat de vraag met geen enkel document overeenkomt. “Geld terug” betekent terugbetaling aan een mens, maar het aantal woorden kan dit niet uitwijzen. Deze enkele uitvoer verklaart waarom echte systemen insluitingen gebruiken, die zo zijn ontworpen dat tekst met een vergelijkbare betekenis vergelijkbare getallen krijgt, zelfs als er geen woorden gemeenschappelijk zijn.
Maar ga er niet van uit dat inbedding alles oplost. Ze kunnen worstelen met exacte termen zoals productcodes en foutnummers, die bij het zoeken op trefwoorden heel goed worden afgehandeld. Dit is de reden waarom veel productiesystemen gebruik maken van hybride zoeken, waarbij de twee benaderingen worden gecombineerd.
Chunking: de stap die mensen onderschatten
Documenten worden in stukjes opgesplitst omdat hele bestanden te lang en onnauwkeurig zijn om op te halen. De maat die u kiest, brengt een echte afweging met zich mee:
| Grootte van het stuk | Voordeel | Risico |
|---|---|---|
| Te klein | Nauwkeurige overeenkomsten | Verliest context, zoals op welk product een regel van toepassing is |
| Te groot | Houdt context | Verdunt de betekenis en gebruikt meer van de prompt |
| Opgedeeld per structuur | Respecteert kopjes en secties | Heeft schonere brondocumenten nodig |
Een paar honderd woorden met enige overlap tussen de stukjes is een gebruikelijk uitgangspunt, maar beschouw dat als een eerste gok om te testen. Splits indien mogelijk langs natuurlijke grenzen, zoals koppen. En voeg metagegevens toe, zoals de documenttitel, datum en afdeling, zodat u resultaten kunt filteren en bronnen kunt citeren.
Verbetering van het ophalen
Als de antwoorden slecht zijn, zijn dit de upgrades die het proberen waard zijn, grofweg in deze volgorde:
- Schoon de gegevens op. Verwijder eerst verouderde en dubbele documenten. Geen enkel algoritme lost tegenstrijdige bronnen op.
- Gebruik hybride zoeken. Combineer op betekenis gebaseerde resultaten en zoekwoordresultaten.
- Voeg een nieuwe rangschikking toe. Haal meer kandidaten op en gebruik vervolgens een gespecialiseerd model om ze opnieuw te ordenen op relevantie.
- Filteren op metadata. Beperk de resultaten op product, regio of datum voordat je gaat zoeken.
- Herschrijf de vraag. Zet een vage vervolgvraag in de vorm van ‘hoe zit het met de tweede?’ tot een volledige vraag.
Tip: Voordat je het model de schuld geeft, kijk eerst wat het ophalen daadwerkelijk heeft opgeleverd. Als de juiste passage niet in de context stond, had geen enkel model hieruit correct kunnen antwoorden.
RAG versus fijnafstemming
| Vraag | RAG | Fijnafstemming |
|---|---|---|
| Wat voegt het toe? | Kennis tijdens het vragenuur | Getraind gedrag of stijl |
| Informatie bijwerken | Indexeer het document opnieuw | Weer trainen |
| Kan zij bronnen vermelden? | Ja | Niet betrouwbaar |
| Beste voor | Feiten die veranderen | Consistent formaat of toon |
Ze sluiten elkaar niet uit. Onze vergelijking van RAG versus verfijning versus snelle engineering laat zien hoe u dieper kunt kiezen.
Hoe een RAG-systeem te testen
RAG is software en vereist tests zoals elke andere software. Creëer een reeks echte vragen, samen met de passages en antwoorden die u verwacht, en meet vervolgens de twee fasen afzonderlijk:
| Stadium | Vraag om te stellen | Algemene naam |
|---|---|---|
| Ophalen | Hebben we de juiste passage gevonden? | Contextherinnering |
| Ophalen | Hoeveel van wat we haalden was nuttig? | Contextprecisie |
| Generatie | Wordt het antwoord ondersteund door de context? | Trouw |
| Generatie | Beantwoordt het daadwerkelijk de vraag? | Relevantie van het antwoord |
Voeg ook lastige gevallen toe: vragen zonder antwoord in uw gegevens, vragen met andere bewoordingen en vragen met tegenstrijdige bronnen. Voer deze set opnieuw uit wanneer u chunking, modellen of aanwijzingen wijzigt, net als bij een regressiesuite. Onze pytest-tutorial laat zien hoe u veel invoer via één test kunt uitvoeren.
Waarom RAG-systemen falen
- Het antwoord staat niet in de gegevens. Het model kan het nog steeds proberen, dus vertel het hoe het moet weigeren.
- Het juiste segment is niet opgehaald. Dit is vaak een probleem met het segmenteren of zoeken.
- Te veel context. Irrelevante passages kunnen het model afleiden en de kosten verhogen.
- Verouderde documenten. Een oud beleid kan net zo veilig worden opgehaald als het huidige beleid.
- Tabellen en pdf’s worden slecht geparseerd. Als de extractie de tekst vervormt, wordt het ophalen nooit hersteld.
- Alleen testen met demovragen. Echte gebruikers verwoorden de zaken heel anders.
Beveiliging en machtigingen
RAG brengt twee risico’s met zich mee die gemakkelijk te missen zijn. Ten eerste de toegangscontrole: als de index HR-bestanden bevat, mag de vraag van een juniormedewerker deze niet ophalen. Pas de machtigingen van elke gebruiker toe tijdens het ophalen, omdat het instrueren van het model om geheimen te bewaren geen betrouwbare beveiliging is.
Ten tweede: een snelle injectie. Een opgehaalde webpagina of document kan tekst bevatten zoals “negeer uw instructies”. Behandel opgehaalde inhoud als niet-vertrouwde gegevens, beperk de acties die het model kan ondernemen en eis dat een mens gevoelige acties goedkeurt.
Tot slot
RAG is een eenvoudig idee met veel praktische details: zoek de juiste informatie en vraag het model vervolgens om deze te gebruiken. Begin met een kleine, duidelijke set documenten en ongeveer twintig echte vragen. Zorg ervoor dat het ophalen goed werkt voordat u complexiteit toevoegt, omdat een bescheiden pijplijn met goede gegevens doorgaans beter is dan een geavanceerde pijplijn met slechte gegevens.
Veelgestelde vragen
Waar staat RAG voor in AI?
RAG staat voor Retrieval Augmented Generation. Een systeem haalt relevante informatie op, voegt deze toe aan de prompt en het model genereert daaruit een antwoord.
Houdt RAG AI-hallucinaties tegen?
Het vermindert deze door het model echte bronnen te geven, maar verwijdert ze niet. Een model kan de context nog steeds verkeerd interpreteren, dus test antwoorden en toon citaten.
Heb ik een vectordatabase nodig voor RAG?
Niet altijd. Kleine projecten kunnen een in-memory index, trefwoordzoekopdracht of SQL gebruiken. Vectordatabases helpen bij grote collecties en op betekenis gebaseerd zoeken.
Wat is het verschil tussen RAG en fijnafstemming?
RAG verstrekt informatie tijdens het vragenuur, waardoor updates snel plaatsvinden. Door fine-tuning wordt een model getraind om zijn gedrag of stijl te veranderen, en het is minder geschikt voor het veranderen van feiten.
Wat is een inbedding?
Een inbedding is een lijst met getallen die de betekenis van tekst vertegenwoordigen. Passages met vergelijkbare betekenissen hebben vergelijkbare nummers, wat betekenisgericht zoeken mogelijk maakt.
Blijf leren
Hulp nodig met testen, WordPress of SEO?
We helpen teams betere software te leveren en hun sites te laten groeien. Vertel ons waar u mee bezig bent en wij stellen een duidelijke volgende stap voor.
Meer handleidingen over testen, AI en moderne ontwikkeling
Genoten van dit artikel? Kies een onderwerp en ga direct naar onze nieuwste tutorials.
AI-hallucinaties uitgelegd: waarom taalmodellen dingen verzinnen en hoe ze te verminderen
AI-hallucinaties uitgelegd: wat ze zijn, waarom taalmodellen ze produceren, veelvoorkomende typen, hoe je ze kunt verminderen met aarding en aanwijz…
Lees artikel →DevOpsOmgevingsvariabelen uitgelegd: .env-bestanden, geheimen en configuratie goed gedaan
Omgevingsvariabelen uitgelegd met Python-voorbeelden die we hebben uitgevoerd: ze lezen en instellen, waarom elke waarde een string is, .env-bestand…
Lees artikel →SoftwareontwikkelingAPI-snelheidsbeperking uitgelegd: algoritmen, headers en afhandeling van 429-fouten
API-snelheidsbeperking uitgelegd met een simulatie die we hebben uitgevoerd: token-bucket, vast venster, schuifvenster, 429 reacties, headers van sn…
Lees artikel →TestautomatiseringSpotten in Python: unittest.mock, patch en de fouten die tests doen liegen
Spotten in Python met unittest.mock, getest: Mock en return_value, side_effect, patchen waar een naam wordt gebruikt, spec en autospec, spotdatums e…
Lees artikel →SoftwaretestenCodedekking uitgelegd: lijn versus filiaaldekking en wat 100% werkelijk betekent
Codedekking uitgelegd met een echte dekking.py-run: dekking van lijnen, vertakkingen en condities, een rapport lezen, waarom 100% dekking nog steeds…
Lees artikel →Databases & SQLDELETE versus TRUNCATE versus DROP in SQL: verschillen, terugdraaien en wanneer elk te gebruiken
DELETE versus TRUNCATE versus DROP uitgelegd met geteste SQL: wat elk verwijdert, terugdraaien, triggers, identiteitsreset, snelheid en hoe PostgreS…
Lees artikel →Databases & SQLSQL-weergaven uitgelegd: creëer, gebruik en vermijd de valkuilen, met voorbeelden
SQL-weergaven uitgelegd met query's die we hebben uitgevoerd: een weergave maken, live resultaten, kolommen verbergen, prestaties, bijwerkbare en ge…
Lees artikel →SoftwareontwikkelingTypeScript-interface versus type: echte verschillen, getest met de compiler
TypeScript-interface versus type, gecontroleerd met de echte compiler: wat beide kunnen doen, wat slechts één kan doen, samenvoegen van declaraties,…
Lees artikel →SoftwareontwikkelingPython *args en **kwargs uitgelegd: flexibele functies met duidelijke voorbeelden
Python *args en **kwargs uitgelegd met code die we hebben uitgevoerd: in- en uitpakken, parametervolgorde, argumenten die alleen trefwoorden en posi…
Lees artikel →SoftwareontwikkelingPython Lambda-functies: syntaxis, echt gebruik en wanneer u ze niet moet gebruiken
Python lambda-functies uitgelegd met code die we hebben uitgevoerd: syntaxis, sorteren met sleutel, kaart en filter, sluitingen, de laat-bindende va…
Lees artikel →Kunstmatige intelligentieWat zijn AI-agenten? Hoe ze werken, met een eenvoudige agentloop die u kunt uitvoeren
Wat zijn AI-agenten? Een duidelijke gids voor de agentenlus, tools, geheugen en vangrails, met een kleine Python-lus die we hebben uitgevoerd, echte…
Lees artikel →DevOpsMonitoring versus waarneembaarheid: het echte verschil, met logboeken, statistieken en sporen
Monitoring versus waarneembaarheid uitgelegd: bekende en onbekende fouten, logboeken, statistieken en sporen, een walkthrough voor afrekenincidenten…
Lees artikel →DevOpsDocker-volumes versus bindingsmounts: bewaar containergegevens op de juiste manier
Docker-volumes versus bind-mounts uitgelegd: waarom containergegevens verdwijnen, benoemde volumes, bind-mounts, tmpfs, Compose-voorbeelden, back-up…
Lees artikel →TestautomatiseringTDD versus BDD: belangrijkste verschillen, één functie die op beide manieren is gebouwd en wanneer deze moet worden gebruikt
TDD versus BDD uitgelegd met één kortingsfunctie die in beide richtingen is gebouwd: rood-groen-refactor met code die we hebben uitgevoerd, gegeven-…
Lees artikel →SoftwaretestenGebruikersacceptatietesten (UAT): proces, checklist en echte voorbeelden
Gebruikersacceptatietesten uitgelegd: wie voert het uit, hoe het verschilt van QA, een proces in zeven stappen, een UAT-testcase-sjabloon, een check…
Lees artikel →Databases & SQLSQL NULL-waarden uitgelegd: IS NULL, COALESCE, NULLIF en de te vermijden vallen
SQL NULL-waarden uitgelegd met query's die we hebben uitgevoerd: logica met drie waarden, IS NULL, COALESCE, NULLIF, hoe aggregaten, joins en sorter…
Lees artikel →Databases & SQLSQL CASE WHEN-instructie: syntaxis, echte voorbeelden en veelvoorkomende fouten
SQL CASE WHEN uitgelegd met vragen die we hebben uitgevoerd: eenvoudige en doorzochte formulieren, volgorde van de voorwaarden, draaipunten met SUM,…
Lees artikel →SoftwareontwikkelingWat is JWT? JSON-webtokens uitgelegd met een werkend voorbeeld
Wat is JWT? JSON Web Tokens uitgelegd: de drie delen, een token gebouwd en waarmee is geknoeid in de code die we hebben uitgevoerd, JWT versus sessi…
Lees artikel →SoftwareontwikkelingJavaScript-gebeurtenislus uitgelegd: call-stack, microtaken en timers met voorbeelden
De JavaScript-gebeurtenislus uitgelegd met code die we hebben uitgevoerd: call-stack, taak- en microtask-wachtrijen, waarom setTimeout 0 niet onmidd…
Lees artikel →SoftwareontwikkelingPython-generatoren en opbrengst uitgelegd: bespaar geheugen met echte voorbeelden
Python-generatoren en opbrengst uitgelegd met code die we hebben uitgevoerd: hoe ze pauzeren en hervatten, gemeten geheugenbesparingen, pijplijnen, …
Lees artikel →Kunstmatige intelligentieWat zijn inbeddingen? Vectoren en cosinusovereenkomst eenvoudig uitgelegd
Wat zijn insluitingen? Een gids in duidelijke taal over vectoren, cosinusovereenkomst en semantisch zoeken, met een klein voorbeeld dat we hebben ui…
Lees artikel →DevOpsImplementatie van blauwgroen versus kanarie: verschillen, afwegingen en hoe te kiezen
Blauw-groen versus kanarie-implementatie uitgelegd: hoe elk werkt, kosten, risico's en terugdraaien, stabiele gebruikersbucket die we hebben getest,…
Lees artikel →TestautomatiseringSchilferige tests: wat de oorzaak ervan is en hoe u ze voorgoed kunt oplossen
Zwakke tests uitgelegd met demo's die we hebben uitgevoerd: de belangrijkste oorzaken, hoe je er een kunt bevestigen en diagnosticeren, goede oploss…
Lees artikel →SoftwaretestenBelastingtesten versus stresstesten: verschillen, statistieken en k6-voorbeelden
Belastingtesten versus stresstesten uitgelegd: wat elk bewijst, piek- en soak-tests, de statistieken die er toe doen, waarom gemiddelden misleiden, …
Lees artikel →SoftwaretestenTestcase versus testscenario: belangrijkste verschillen, voorbeelden en wanneer deze te gebruiken
Testcase versus testscenario uitgelegd: duidelijke definities, een tabel naast elkaar, één functie voor het opnieuw instellen van wachtwoorden, over…
Lees artikel →Databases & SQLOptimalisatie van SQL-query's: lees uitvoeringsplannen en repareer langzame query's, met timing
Optimalisatie van SQL-query's getest op een miljoen rijen: lees uitvoeringsplannen, voeg de juiste indexen toe, repareer niet-sargeerbare filters, g…
Lees artikel →Databases & SQLSQL UNION versus UNION ALL: verschillen, voorbeelden en geteste prestaties
SQL UNION versus UNION ALL uitgelegd met de query's die we hebben uitgevoerd: duplicaten, de regels volgen beide, een echte databug, gemeten prestat…
Lees artikel →SoftwareontwikkelingJavaScript Fetch API-tutorial: GET, POST, foutafhandeling en time-outs
Een JavaScript Fetch API-tutorial getest tegen een lokale server: GET en POST, waarom 404 niet gooit, een herbruikbare helper, queryreeksen, time-ou…
Lees artikel →SoftwareontwikkelingPython-bestandsverwerking: lezen, schrijven, CSV, JSON en pathlib met voorbeelden
Het verwerken van Python-bestanden uitgelegd met code die we hebben uitgevoerd: open modi, met het lezen van grote bestanden, CSV, JSON, pathlib, bi…
Lees artikel →SoftwareontwikkelingPython-klassen en -objecten: OOP-zelfstudie met echte voorbeelden
Python-klassen en -objecten uitgelegd met code die we hebben uitgevoerd: __init__, methoden, klasse versus instantie-attributen, overerving, eigensc…
Lees artikel →Kunstmatige intelligentieWat is een groot taalmodel? Hoe LLM's werken, uitgelegd zonder de hype
Wat is een groot taalmodel? LLM's uitgelegd in duidelijke taal: tokens, inbedding, aandacht, training, temperatuur- en contextvensters, een kleine d…
Lees artikel →DevOpsLinux-opdrachten voor beginners: de essentiële terminalgids met voorbeelden
Linux-opdrachten voor beginners, gegroepeerd op taak: navigatie, bestanden, logboeken bekijken, grep, pipelines, machtigingen, processen en archieve…
Lees artikel →TestautomatiseringSelenium versus toneelschrijver: belangrijkste verschillen, code vergeleken en welke te kiezen
Selenium versus Playwright vergeleken: architectuur, wachten, browser- en taalondersteuning, debuggen, dezelfde test in beide tools, migratieadvies …
Lees artikel →SoftwaretestenEquivalentiepartitionering: testontwerptechniek uitgelegd met uitgewerkte voorbeelden
Equivalentiepartitionering uitgelegd: hoe je geldige en ongeldige partities kunt vinden, uitgewerkte voorbeelden voor leeftijden, wachtwoorden en ko…
Lees artikel →SoftwaretestenErnst versus prioriteit bij het testen van software: verschillen, matrix en echte voorbeelden
Ernst versus prioriteit bij het testen van software uitgelegd: duidelijke definities, een vierwegmatrix met voorbeelden, niveauschalen, wie deze bep…
Lees artikel →Databases & SQLTutorial voor SQL-subquery's: typen, gecorreleerde subquery's en BESTAAN met voorbeelden
Een SQL-subquery-tutorial met query's die we hebben uitgevoerd: scalaire, IN-, FROM- en SELECT-subquery's, gecorreleerde subquery's, EXISTS, de NOT …
Lees artikel →Databases & SQLSQL-transacties en ACID uitgelegd: COMMIT-, ROLLBACK- en isolatieniveaus
SQL-transacties en ACID uitgelegd met een bankoverschrijving die we hebben uitgevoerd: COMMIT, ROLLBACK, savepoints, locks, isolatieniveaus, dirty r…
Lees artikel →SoftwareontwikkelingGit Commands Cheat Sheet: de commando's die je daadwerkelijk gebruikt, met voorbeelden
Een spiekbriefje voor Git-opdrachten, gegroepeerd op taak: setup, staging, branches, remotes, stash, geschiedenis en fouten ongedaan maken, met uitv…
Lees artikel →SoftwareontwikkelingJavaScript-beloften uitgelegd: vervolgens catch, Promise.all en veelvoorkomende fouten
JavaScript-beloften uitgelegd met code die we hebben uitgevoerd: staten, dan en catch-ketens, foutafhandeling, Promise.all, allSettled, race en wat …
Lees artikel →SoftwareontwikkelingZelfstudie Python-woordenboek: methoden, voorbeelden en veelvoorkomende patronen
Een Python-woordenboektutorial met code die we hebben uitgevoerd: dictaten, sleutelmethoden, samenvoeg-, begrips-, tel- en groeperingspatronen en ve…
Lees artikel →Kunstmatige intelligentieWat is RAG? Retrieval-Augmented Generation uitgelegd met een werkend voorbeeld
Wat is RAG? Retrieval-augmented generatie stap voor stap uitgelegd: indexeren, chunken, insluiten, ophalen, een klein werkend Python-voorbeeld, eval…
Lees artikel →DevOpsTerraform-zelfstudie voor beginners: infrastructuur als code van het eerste bestand tot modules
Een Terraform-tutorial voor beginners: begin zonder cloudaccount, leer init, plan en pas toe, vervolgens variabelen, outputs, status, modules en een…
Lees artikel →DevOpsDocker versus Kubernetes: belangrijkste verschillen, hoe ze samenwerken en welke u nodig heeft
Docker vs Kubernetes legde uit: wat elk doet, dezelfde app draait met beide, Docker Compose en Swarm vergeleken, de dockershim veranderen en hoe je …
Lees artikel →TestautomatiseringPytest-tutorial voor beginners: armaturen, parametriseren en echte voorbeelden
Een pytest-tutorial voor beginners met tests die we hebben uitgevoerd op pytest 9.2: beweringen, armaturen, parametrize, conftest, markers, tmp_path…
Lees artikel →SoftwaretestenLevenscyclus van softwaretests (STLC): 6 fasen, in- en uitgangscriteria, voorbeeld
De levenscyclus van softwaretesten uitgelegd: zes STLC-fasen met in- en uitstapcriteria, deliverables, een voorbeeld van een uitgewerkte inlogfuncti…
Lees artikel →SoftwareontwikkelingGit merge vs rebase: verschillen, voorbeelden en wanneer je wat gebruikt
Git merge vs rebase uitgelegd met echte logoutput, een vergelijkingstabel, de gouden regel van rebase en een veilige teamwerkwijze.
Lees artikel →SoftwareontwikkelingPython list comprehension: syntaxis, voorbeelden en wanneer je het vermijdt
Python list comprehension uitgelegd: syntaxis, filteren, if-else, geneste lussen, gemeten tijden en wanneer een gewone for-lus beter is.
Lees artikel →Databases & SQLSQL JOIN uitgelegd met voorbeelden (Inner, Left, Right, Full)
Begrijp SQL joins stap voor stap met voorbeeldtabellen en queries: INNER, LEFT, RIGHT, FULL, CROSS en SELF, plus veelgemaakte fouten en prestatietips.
Lees artikel →