Wat is RAG en waarom heb je het nodig?
RAG staat voor Retrieval-Augmented Generation. In plaats van een AI te trainen op jouw data (duur en complex), zoekt het systeem bij elke vraag eerst de meest relevante stukken uit jouw documenten op - en geeft die als context mee aan het taalmodel.
Het resultaat: een chatbot die precies jouw kennisbank kent, geen dingen verzint die er niet in staan, en altijd up-to-date is als je documenten toevoegt.
Architectuur van het systeem
Het systeem bestaat uit twee flows: (1) een indexeer-pipeline die documenten verwerkt en opslaat, en (2) een query-pipeline die vragen beantwoordt.
Kernconcepten
Chunks: je documenten worden opgedeeld in blokken van ~500 woorden. Embeddings: elk blok wordt omgezet naar een vector van getallen die de betekenis representeert. Similarity search: bij een vraag zoek je de meest vergelijkbare vectoren op.
Stap 1: Supabase instellen met pgvector
Maak een gratis Supabase account aan. Activeer de pgvector extensie en maak een documenten-tabel aan.
-- Activeer pgvector extensie
create extension if not exists vector;
-- Maak documenten tabel
create table documents (
id bigserial primary key,
content text,
embedding vector(1536),
metadata jsonb,
created_at timestamp default now()
);
-- Maak index voor snelle similarity search
create index on documents
using ivfflat (embedding vector_cosine_ops)
with (lists = 100);
Stap 2: Document indexeer-pipeline in n8n
Bouw een n8n workflow die: (1) een document inleest, (2) het opdeelt in chunks van ~500 woorden, (3) voor elke chunk een embedding aanvraagt bij OpenAI, (4) de embedding opslaat in Supabase.
{
"model": "text-embedding-3-small",
"input": "{{$json.chunk_text}}"
}
Stap 3: Query-pipeline bouwen
De query-pipeline: (1) gebruiker stelt vraag, (2) maak embedding van de vraag, (3) zoek de 5 meest vergelijkbare chunks op in Supabase, (4) stuur vraag + chunks naar GPT-4o als context, (5) stuur antwoord terug.
-- Similarity search in Supabase
select content, metadata,
1 - (embedding <=> $1::vector) as similarity
from documents
order by embedding <=> $1::vector
limit 5;
Verwachte kosten
OpenAI text-embedding-3-small: $0.02 per 1M tokens (indexeren is eenmalig). GPT-4o-mini voor antwoorden: circa $0.001 per vraag. Voor een kennisbank van 100 paginas is de indexeerkosten circa $0.05 eenmalig.
Kwaliteit verbeteren
Test je chatbot door dezelfde vragen te stellen die je klanten stellen. Analyseer antwoorden die incorrect zijn en check of de juiste chunks worden opgehaald. Verklein chunk-grootte bij slechte retrieval.