
Hoe bouw je een AI-chatbot die niet hallucineert? (RAG-aanpak)
AI-chatbots hallucineren omdat ze antwoorden genereren op basis van algemene training-data, niet op basis van jouw specifieke content. RAG (Retrieval-Augmented Generation) lost dit op: bij elke vraag haalt het systeem eerst relevante stukken op uit jouw eigen documenten (FAQ, productinformatie, kennisbank) en geeft die mee als context aan het LLM. Resultaat: het model citeert jouw bronnen in plaats van te verzinnen. Setup vraagt vector-database (Pinecone, Weaviate, of Postgres met pgvector), embeddings (OpenAI's text-embedding-3 of vergelijkbaar), en een goed gestructureerde document-store.
Waarom hallucineren AI-chatbots eigenlijk?
Een LLM (GPT-4o, Claude, Gemini) is getraind op miljarden tokens van het internet. Hij weet veel maar weet niet wat hij niet weet — als je vraagt "wat zijn jullie openingstijden?" en hij heeft die info niet, dan genereert hij plausibel klinkende tekst. Dat is een hallucinatie.
Drie typische triggers voor hallucinaties:
- Vraag over specifieke informatie die niet in de training data zit (jouw productinformatie, prijzen, processen).
- Vraag over recente events na de training-cutoff.
- Vraag waarvan het antwoord moeilijk verifieerbaar is maar plausibel.
Wat RAG doet — in één plaatje
RAG (Retrieval-Augmented Generation) bestaat uit drie stappen bij elke vraag:
- 1. Embedden van de vraag. De gebruikersvraag wordt omgezet naar een numerieke vector via een embedding-model (text-embedding-3-large van OpenAI, of mxbai-embed-large open-source).
- 2. Zoeken in een vector-database. Die vector wordt vergeleken met vectoren van jouw gedocumenteerde content (FAQ-items, productpagina's, handleidingen, blog-posts). De top-5 of top-10 meest relevante stukken worden teruggehaald.
- 3. Antwoord genereren met context. Het LLM krijgt de oorspronkelijke vraag plus die top-relevante stukken als context, met instructie: "Beantwoord alleen op basis van deze context. Weet je het niet? Zeg dat dan."
Resultaat: het model citeert jouw bronnen in plaats van verzinnen. En je kunt zelfs links naar de bron-pagina's toevoegen.
De componenten die je nodig hebt
- Document-store. Je bestaande content: FAQ, productpagina's, blog, kennisbank, handleidingen. Kwaliteit van je documenten = kwaliteit van je chatbot.
- Chunking-strategie. Documenten worden in stukjes van 200-500 tokens gesplitst (paragrafen of secties). Te grote chunks = onnauwkeurige retrieval; te kleine = verlies van context.
- Embedding-model. OpenAI text-embedding-3-large ($0.13/M tokens) is industry-standaard. Open-source alternatieven: bge-large, mxbai-embed-large.
- Vector-database. Pinecone (managed, $70+/maand), Weaviate (open-source), Postgres met pgvector (gratis, eigen hosting), Supabase (Postgres + pgvector ingebouwd).
- Generation LLM. Claude 3.5 Sonnet of GPT-4o voor productie; Gemini Flash of GPT-4o-mini voor budget-cases.
- Orchestration-laag. LangChain of LlamaIndex (Python/TS), of zelfgeschreven service in Node.js/Python.
Wat het in praktijk kost
Voor een MKB-website met 200 FAQ-items, blog-posts en productpagina's (totaal ~50.000 woorden) en 1.000 chatbot-vragen/maand:
- Eenmalige bouw: €8.000-€20.000 (architectuur, ingestion-pipeline, frontend, prompt-engineering, testen).
- Embedding-kosten eerste indexering: €1-€5 (eenmalig).
- Vector DB: Postgres+pgvector: ~€10/maand. Pinecone: €70/maand.
- LLM-kosten: GPT-4o-mini voor 1.000 vragen ~€5/maand. Claude 3.5 Sonnet voor 1.000 vragen ~€30/maand.
- Re-indexering bij nieuwe content: incrementeel, paar cent per update.
Totaal operationeel: €30-€150/maand voor een MKB-bot. Plus 4-8 uur/maand onderhoud (content-updates, prompt-tweaks).
Hoe je 't kwalitatief op orde houdt
- Documenteer alleen wat je wilt dat de bot weet. Geen "interne notities" of "draft"-content in je index.
- Update je index bij elke content-wijziging. Automatiseer via cron of webhooks.
- Bouw een "weet ik niet"-flow. Als RAG geen relevante chunks vindt: laat het model dat zeggen en bied een formulier of een live-chat aan.
- Monitor antwoorden. Sla vraag + antwoord + bron-chunks op; review wekelijks de slechtste 10% (op basis van user-feedback of unanswered-flag).
- Cite je bronnen. Toon de bron-pagina onder elk antwoord. Bouwt vertrouwen en helpt gebruikers bij follow-up.
Veelgemaakte fouten
- Documentkwaliteit onderschatten. Vage of inconsistente content levert vage of foute antwoorden. Schoon eerst je content op.
- Chunking te gulzig. Hele pagina's als één chunk leiden tot irrelevante retrieval. Splits per logische sectie.
- Geen system prompt met regels. Zonder expliciete instructies ("Antwoord alleen op basis van de context", "Hallucineer niet", "Verwijs naar contact bij twijfel") kan het model alsnog uit zijn algemene kennis putten.
- Geen evaluatie-set. Maak een set van 50-100 vragen met goede antwoorden, draai die als regression test bij elke wijziging.
- Vergeten de bot een toon te geven. RAG-output zonder consistente toon klinkt klinisch. Geef de bot een persona in je system prompt.
Veelgestelde vragen
Werkt RAG ook in het Nederlands?
Ja. Embedding-modellen als text-embedding-3-large werken multi-lingual met goede performance voor Nederlands. Generation-modellen (GPT-4o, Claude 3.5) hebben sterke Nederlandse output.
Hoe kies ik tussen Pinecone, Weaviate en pgvector?
Pinecone: managed, simpel, $70+/maand. Weaviate: open-source, krachtig, self-host of cloud. pgvector: gratis bij PostgreSQL, perfect voor MKB tot ~1M documenten. Voor MKB-projecten meestal pgvector of Supabase.
Kan ik mijn AI-chatbot zelf trainen op mijn data?
Fine-tuning is mogelijk maar zelden de juiste oplossing. RAG is goedkoper, sneller te updaten en geeft betere controle dan fine-tuning voor de meeste MKB-use-cases.
Hoeveel content heb ik minimaal nodig voor een goede RAG-bot?
Voor een bruikbare bot: minimaal 50-100 goed gestructureerde FAQ-items of vergelijkbaar (5-10k woorden). Met minder krijg je zwakke antwoorden of veel "weet niet"-momenten.
Werkt het ook met PDF's en Word-bestanden?
Ja. Tools als LangChain's document loaders parsen PDF, Word, Markdown, HTML. Kwaliteit van extraction varieert — voor complexe PDF's (tabellen, formules): test eerst.
Wat als de chatbot toch hallucineert?
Add post-processing checks: vergelijk antwoord met retrieved chunks (Claude's "citation"-functie of een eigen check). Als antwoord woorden bevat die niet in chunks staan: flag of vraag user om herformulering.
Klaar om te beginnen?
Lees onze aanpak voor een AI-assistent voor je website, of plan een korte kennismaking — we kijken vrijblijvend mee en geven een eerlijke inschatting van scope, kosten en doorlooptijd.