{"id":2241,"date":"2025-02-26T11:05:00","date_gmt":"2025-02-26T10:05:00","guid":{"rendered":"https:\/\/pletzenauer.com\/?p=2241"},"modified":"2026-08-05T17:23:45","modified_gmt":"2026-08-05T15:23:45","slug":"agentic-rag-n8n-kennisdatabase","status":"publish","type":"post","link":"https:\/\/pletzenauer.com\/nl\/2025\/02\/26\/agentic-rag-n8n-kennisdatabase\/","title":{"rendered":"Agentic RAG in n8n: waarom klassieke RAG vaak faalt \u2013 en hoe het beter kan"},"content":{"rendered":"<p>Veel bedrijven zetten tegenwoordig in op AI-assistenten die vragen over eigen documenten moeten beantwoorden \u2013 over vergadernotulen, kengetallentabellen of klantfeedback. De gangbare methode daarachter heet Retrieval Augmented Generation (RAG). Ze is wijdverbreid, goed ondersteund en in no-code-instrumenten als n8n snel gerealiseerd. Alleen: in de praktijk levert klassieke RAG verrassend vaak onjuiste of onvolledige antwoorden. Cole Medin laat in zijn video zien waar dat aan ligt en hoe een zogenoemde agentic-RAG-opzet de typische zwaktes omzeilt. Ik vat de belangrijkste punten nuchter samen.<\/p>\n<div style=\"background:#FFE6D6;border-left:4px solid #F26A21;padding:16px 20px;border-radius:6px;margin:24px 0;\"><strong>Het belangrijkste in het kort<\/strong><\/p>\n<ul>\n<li>Klassieke RAG faalt vooral op twee punten: ze kan niet naar hele documenten &#8220;uitzoomen&#8221; en ze kan geen echte data-analyse over tabellen uitvoeren.<\/li>\n<li>Agentic RAG geeft de AI-agent meerdere instrumenten in plaats van alleen een zoekfunctie \u2013 hij bepaalt zelf hoe hij de kennisdatabase doorzoekt.<\/li>\n<li>Tabellen (CSV\/Excel) worden apart opgeslagen, zodat ze via SQL bevraagd kunnen worden \u2013 zonder voor elk bestand een eigen tabel aan te leggen.<\/li>\n<li>De agent kan documenten opsommen, hele bestanden ophalen, bronnen citeren en zo nodig de zoekopdracht verbeteren.<\/li>\n<li>De getoonde n8n-opzet is een uitbreidbaar sjabloon, geen kant-en-klaar product \u2013 prompts en instrumenten moeten aan de eigen toepassing worden aangepast.<\/li>\n<\/ul>\n<\/div>\n<figure style=\"margin:28px 0;\"><img decoding=\"async\" src=\"https:\/\/pletzenauer.com\/wp-content\/uploads\/2026\/06\/1487-1.png\" alt=\"Vergelijking in twee kolommen van klassieke RAG en agentic RAG met elk vier kernpunten\" style=\"width:100%;height:auto;border-radius:8px;border:1px solid #E5E2DE;\"\/><figcaption style=\"font-size:0.9em;color:#6b6b6b;margin-top:8px;\">Agentic RAG geeft de AI-agent meerdere instrumenten in plaats van alleen een zoekfunctie.<\/figcaption><\/figure>\n<h2>Waarom klassieke RAG in de praktijk teleurstelt<\/h2>\n<p>RAG werkt via een gelijkenis-zoekopdracht: de vraag wordt vergeleken met opgeslagen tekstfragmenten (&#8220;chunks&#8221;), en de best passende gaan door naar het taalmodel. Het probleem is de selectie. Die mist regelmatig belangrijke context.<\/p>\n<p>Medin noemt twee concrete zwakke plekken:<\/p>\n<ul>\n<li><strong>Geen blik op hele documenten:<\/strong> RAG haalt alleen losse fragmenten aan. Wie trends in een tabel wil analyseren, krijgt misschien maar een kwart van de rijen \u2013 en daarmee een verkeerd resultaat.<\/li>\n<li><strong>Geen echte data-analyse:<\/strong> Sommen of maximumwaarden over een tabel laten zich met een pure tekstzoekopdracht niet betrouwbaar berekenen.<\/li>\n<\/ul>\n<p>Daar komt een praktisch ongemak bij: wordt er naar de notulen van een bepaalde datum gevraagd, dan haalt RAG soms het document van de verkeerde dag \u2013 hoewel de datum in de titel staat. En verschillende documenten met elkaar verbinden om een breder verband te leggen, lukt zelden.<\/p>\n<h2>Wat agentic RAG anders doet<\/h2>\n<p>De kerngedachte is eenvoudig: in plaats van de AI-agent slechts \u00e9\u00e9n zoekinstrument te geven, krijgt hij er meerdere \u2013 en mag hij zelf bepalen hoe hij de kennisdatabase ontsluit. Medin definieert agentic RAG zo:<\/p>\n<blockquote><p>Agentic RAG betekent de agent het vermogen geven om na te denken over <strong>hoe<\/strong> hij de kennisdatabase doorzoekt \u2013 in plaats van hem op \u00e9\u00e9n instrument vast te pinnen.<\/p><\/blockquote>\n<p>Concreet kan de agent daardoor zijn zoekopdrachten verbeteren, zo nodig een ander instrument kiezen en meerdere wegen proberen tot hij een houdbaar antwoord heeft. Faalt de pure RAG-zoekopdracht, dan zit hij niet langer vast.<\/p>\n<h3>De vier instrumenten van de agent<\/h3>\n<p>In de n8n-workflow staan de agent de volgende instrumenten ter beschikking:<\/p>\n<ul>\n<li><strong>RAG-zoekopdracht<\/strong> \u2013 de klassieke gelijkenis-zoekopdracht, in de verbeterde versie inclusief bronvermelding.<\/li>\n<li><strong>Documenten opsommen<\/strong> \u2013 de agent haalt alle documenten met titels en ID&#8217;s op en overweegt welke relevant kunnen zijn.<\/li>\n<li><strong>Bestandsinhoud ophalen<\/strong> \u2013 via de bestands-ID haalt hij de volledige tekst van een bepaald document op (bijvoorbeeld de notulen van 23 februari, herkenbaar aan de titel).<\/li>\n<li><strong>SQL-query over tabellen<\/strong> \u2013 CSV- en Excel-bestanden worden als SQL-tabellen bevraagd, om sommen, maxima en soortgelijke analyses mogelijk te maken.<\/li>\n<\/ul>\n<p>In de systeemprompt krijgt de agent de instructie met RAG te beginnen en pas naar de overige instrumenten uit te wijken wanneer de zoekopdracht niet het juiste oplevert. Een belangrijke aanwijzing uit de video: de agent uitdrukkelijk tot eerlijkheid aansporen \u2013 dus open zeggen wanneer er geen antwoord is gevonden \u2013 vermindert hallucinaties merkbaar.<\/p>\n<h2>Hoe tabeldata worden opgeslagen<\/h2>\n<p>Het technisch interessantste deel betreft tabellen. In Supabase worden daarvoor drie tabellen aangelegd:<\/p>\n<ul>\n<li><strong>documents<\/strong> \u2013 bevat de embeddings voor RAG, metadata en de inhoud van de afzonderlijke chunks.<\/li>\n<li><strong>document_metadata<\/strong> \u2013 slaat overkoepelende informatie op: titels, URL&#8217;s voor bronvermeldingen en \u2013 bij tabellen \u2013 het schema (dus de kolomnamen).<\/li>\n<li><strong>document_rows<\/strong> \u2013 legt de tabelrijen vast. De eigenlijke data belanden in een flexibele <strong>JSONB<\/strong>-kolom met de naam <code>row_data<\/code>.<\/li>\n<\/ul>\n<p>De truc: via JSONB laten zich willekeurige kolomstructuren opslaan zonder voor elk CSV- of Excel-bestand een eigen SQL-tabel te moeten aanmaken. De agent leest eerst het schema uit de metadata, begrijpt de beschikbare kolommen en formuleert dan een SQL-query tegen <code>row_data<\/code>. Medin wijst er uitdrukkelijk op dat deze opzet vereenvoudigd is \u2013 het schema verraadt bijvoorbeeld niets over datatypes, waardoor een som over een kolom met dollartekens kan mislukken. Het gaat hem om het concept, niet om een perfecte uitvoering.<\/p>\n<h2>De RAG-pijplijn: van Google Drive naar Supabase<\/h2>\n<p>Voordat de agent kan werken, moet de kennisdatabase gevuld worden. De pijplijn verloopt daarbij in meerdere stappen:<\/p>\n<ul>\n<li><strong>Trigger:<\/strong> Een Google Drive-trigger controleert elke minuut op nieuwe of gewijzigde bestanden. Als alternatief werken Dropbox of een lokale bestandstrigger. Verwijderde bestanden worden echter niet herkend.<\/li>\n<li><strong>Meerdere bestanden tegelijk:<\/strong> Een nieuw ingebouwde lus verwerkt nu ook meerdere bestanden die in hetzelfde polling-interval binnenkomen \u2013 een bekend tekort van de vorige versie.<\/li>\n<li><strong>Oude data verwijderen:<\/strong> V\u00f3\u00f3r elke import worden bestaande records bij de betreffende bestands-ID verwijderd. Zo blijft er geen verouderde chunk achter wanneer een document korter is geworden.<\/li>\n<li><strong>Inhoud extraheren:<\/strong> Een switch-knooppunt vertakt per bestandstype \u2013 PDF, Google Doc, tekst of tabel worden verschillend uitgelezen. Verdere formaten zoals JSON of HTML laten zich via extra knooppunten aanvullen.<\/li>\n<li><strong>Tabellen dubbel opslaan:<\/strong> CSV-bestanden worden enerzijds als tekstdocument voor RAG klaargezet, anderzijds rij voor rij in <code>document_rows<\/code> opgeslagen voor SQL-query&#8217;s.<\/li>\n<\/ul>\n<p>Een praktisch struikelblok bij de inrichting: voor de Postgres-verbinding met Supabase moet volgens de video de <strong>transaction pooler<\/strong> worden gebruikt (poort 6543), niet de directe verbinding. De n8n-documentatie zou op dit punt onduidelijk zijn.<\/p>\n<h3>Gebruikte modellen<\/h3>\n<p>Voor de embeddings komt OpenAI&#8217;s <code>text-embedding-3<\/code> aan bod, als taalmodel <code>GPT-4o mini<\/code> \u2013 bewust goedkoop en snel gekozen. Voor veeleisender gevallen adviseert Medin krachtiger modellen als GPT-4o of Claude Sonnet 4. Belangrijk: bij het invoegen en bij het ophalen moet hetzelfde embeddingmodel met hetzelfde aantal dimensies worden gebruikt.<\/p>\n<h2>Drie voorbeelden uit de video<\/h2>\n<p>Medin demonstreert hoe de agent afhankelijk van de vraag verschillende instrumenten kiest:<\/p>\n<ul>\n<li><strong>Tabelvraag:<\/strong> Op &#8220;In welke maand hadden we de meeste nieuwe klanten?&#8221; schrijft de agent een SQL-query en levert het juiste resultaat (december, 129 nieuwe klanten) \u2013 in plaats van op onvolledige chunks te vertrouwen.<\/li>\n<li><strong>Pure RAG-vraag:<\/strong> Op &#8220;Waar kunnen we beter worden?&#8221; vindt de gelijkenis-zoekopdracht het feedbackdocument, hoewel het woord &#8220;verbetering&#8221; bewust niet is gebruikt.<\/li>\n<li><strong>Bestand ophalen met bron:<\/strong> Bij het ophalen van complete vergadernotulen levert de agent de action items en op navraag een aanklikbare link naar de bron.<\/li>\n<\/ul>\n<h2>Conclusie<\/h2>\n<p>De bijdrage laat nuchter zien waarom na\u00efeve RAG voor veel zakelijke toepassingen niet volstaat: ze mist context en kan niet rekenen met tabellen. De agentic aanpak lost dat pragmatisch op door de AI-agent meerdere instrumenten en beslissingsruimte te geven. Voor mkb-beslissers die een documentassistent overwegen, is dat een belangrijk inzicht: de kwaliteit staat of valt niet met het model alleen, maar met de architectuur erachter. Wie de gepresenteerde n8n-opzet overneemt, moet die als vertrekpunt zien \u2013 prompts, instrumenten en datamodel horen op de eigen databestanden te worden afgestemd. Juist de SQL-query over tabellen en de omgang met datatypes bieden ruimte voor verbetering.<\/p>\n<p><strong>Bron:<\/strong> Cole Medin \u2013 \u201eI Built the ULTIMATE n8n RAG AI Agent Template&#8221;, <a href=\"https:\/\/www.youtube.com\/watch?v=mQt1hOjBH9o\">https:\/\/www.youtube.com\/watch?v=mQt1hOjBH9o<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Klassieke RAG mist vaak context en tabeldata. Hoe een agentic-RAG-opzet in n8n kennisdatabases betrouwbaarder doorzoekt \u2013 praktijkgericht uitgelegd.<\/p>\n","protected":false},"author":0,"featured_media":1507,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-2241","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-unkategorisiert"],"_links":{"self":[{"href":"https:\/\/pletzenauer.com\/nl\/wp-json\/wp\/v2\/posts\/2241","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pletzenauer.com\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pletzenauer.com\/nl\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/pletzenauer.com\/nl\/wp-json\/wp\/v2\/comments?post=2241"}],"version-history":[{"count":1,"href":"https:\/\/pletzenauer.com\/nl\/wp-json\/wp\/v2\/posts\/2241\/revisions"}],"predecessor-version":[{"id":2757,"href":"https:\/\/pletzenauer.com\/nl\/wp-json\/wp\/v2\/posts\/2241\/revisions\/2757"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pletzenauer.com\/nl\/wp-json\/wp\/v2\/media\/1507"}],"wp:attachment":[{"href":"https:\/\/pletzenauer.com\/nl\/wp-json\/wp\/v2\/media?parent=2241"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pletzenauer.com\/nl\/wp-json\/wp\/v2\/categories?post=2241"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pletzenauer.com\/nl\/wp-json\/wp\/v2\/tags?post=2241"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}