𝗜𝗸 𝗵𝗲𝗯 𝗥𝗔𝗚 𝘃𝗮𝗻𝗮𝗳 𝗻𝘂𝗹 𝗴𝗲𝗯𝗼𝘂𝘄𝗱 𝗶𝗻 𝗣𝘆𝘁𝗵𝗼𝗻 𝗼𝗺 𝗵𝗲𝘁 𝘁𝗲 𝗯𝗲𝗴𝗿𝗶𝗽𝗽𝗲𝗻
Ik heb zes maanden lang LangChain in productie gebruikt. Ik kon niet uitleggen hoe het werkte. Ik wist niet waarom ik specifieke metrieken koos of hoe tekst vectoren werd. De bibliotheek verborg de logica.
Om dit op te lossen, heb ik het framework verwijderd. Ik heb een RAG-pipeline vanaf nul geschreven met 500 regels pure Python.
Dit is wat ik heb geleerd door de stack handmatig op te bouwen.
The Problem with Black Boxes Wanneer je gebruikmaakt van high-level bibliotheken, verlies je de controle. Ik zag modellen feiten hallucineren of verkeerde citaten geven. Ik kon niet zien of de fout in de chunker, het embedding-model of de prompt zat.
Wanneer je het zelf bouwt, is elke laag inspecteerbaar. Je kunt de exacte chunks printen die naar de LLM worden gestuurd. Je kunt precies zien waar een zin wordt afgebroken.
The Five Layers of RAG RAG is niet één algoritme. Het is een stapeling van vijf verschillende processen:
- Chunking: Beslissen hoe je tekst splitst.
- Embedding: Tekst omzetten in wiskunde.
- Retrieval: De juiste stukjes vinden.
- Prompt Construction: Het model vertellen hoe het zich moet gedragen.
- Generation: Het uiteindelijke antwoord krijgen.
Lessons from the Build
Chunking is de belangrijkste stap De meeste tutorials slaan dit over. Als je geen overlap gebruikt, verlies je context bij de grenzen. Ik gebruikte een sliding window met overlap op karakterniveau. Dit zorgt ervoor dat het model de verbinding tussen twee chunks ziet.
Afstandsmetrieken zijn belangrijk Ik heb urenlang gedebbugd vanwege slechte zoekresultaten. Het probleem lag niet bij de data, maar bij de metriek. ChromaDB gebruikt standaard L2-afstand. Voor semantisch zoeken heb je Cosine similarity nodig. Eén regel code veranderde alles.
Prompts hebben beperkingen nodig Een LLM is een aanvuller, geen orakel. Als je een vage vraag stelt, zal het een antwoord verzinnen. Ik heb geleerd om een strikt weigeringssjabloon te gebruiken. Ik zei tegen het model: "Als de context het antwoord niet bevat, zeg dan dat je het niet weet." Dit verlaagde de hallucinaties van 40% naar 5%.
Batch je verzoeken Het versturen van één HTTP-verzoek per chunk is traag. Het versturen in batches is veel sneller. Het stelt het lokale model in staat om het werk te pipelinen.
Test van onder naar boven Schrijf je tests niet pas aan het einde. Test eerst je chunker. Test daarna je embedder. Test vervolgens je store. Als je pas aan het einde test, test je de bugs in plaats van de logica.
Als je het gevoel hebt dat je je AI-stack niet echt begrijpt, bouw het dan zelf. De code is niet het doel. Het denken is het doel.
Optionele leercommunity: https://t.me/GyaanSetuAi
