RAG opzetten voor je eigen documenten: een praktische walkthrough
Ik krijg veel vragen over RAG (Retrieval-Augmented Generation) dus hier een no-nonsense uitleg van hoe ik het opgezet heb voor mijn eigen project.
Wat is het probleem: je wilt een LLM vragen stellen over JE data - interne documenten, handleidingen, klant-informatie. Maar het model kent die data niet. RAG lost dit op door relevante stukken tekst op te halen en mee te geven als context.
Mijn stack:
- Supabase met pgvector extensie als vector database
- OpenAI's text-embedding-3-small model voor embeddings (goedkoper dan ada-002 en betere kwaliteit)
- Claude als het LLM dat de antwoorden genereert
Het proces in stappen:
1. Documenten opsplitsen in chunks van 500-800 tokens. Niet te klein (verliest context) en niet te groot (verspilt tokens). Ik splits op paragraafgrenzen waar mogelijk.
2. Elke chunk door het embedding model halen. Dit geeft je een vector van 1536 dimensies.
3. Vectors opslaan in Supabase (pgvector kolom).
4. Bij een vraag: de vraag ook embedden, similarity search doen in Supabase, top 5 resultaten pakken.
5. Die 5 chunks meegeven aan Claude met de originele vraag.
Wat ik fout deed in het begin: te grote chunks gebruiken. Mijn eerste versie gebruikte hele pagina's als chunks en de antwoorden waren vaag. Kleinere chunks met overlap van 50 tokens gaven veel preciezere antwoorden.
Kosten: embedding kost bijna niks (minder dan 1 euro per 100.000 chunks). De Claude API calls zijn het duurste deel maar dat valt mee als je de context beperkt houdt.
Voor wie het wil proberen: begin met een klein corpus van 10-20 documenten. Pas als dat goed werkt ga je opschalen.
Reageer
jeroen.h36 dagen geleden
Goede walkthrough. Een toevoeging: als je met PDF's werkt is het opsplitsen in chunks lastiger dan met plain text. Ik gebruik PyMuPDF om eerst clean text te extracten voordat ik ga chunken. Anders krijg je headers en footers midden in je chunks.
floris_9135 dagen geleden
Die overlap van 50 tokens tussen chunks is slim. Ik had eerst geen overlap en kreeg regelmatig antwoorden waar informatie miste omdat het relevant stuk precies op de grens van twee chunks lag. Met overlap is dat probleem weg.
thijs_vd35 dagen geleden
Bedankt voor de uitleg! Ik lees hier veel over RAG maar dit is de eerste keer dat iemand het zo stap-voor-stap uitlegt. Is Supabase met pgvector ook geschikt als je honderden documenten hebt? Of loop je dan tegen performance problemen aan?