Ik heb een RAG-app gebouwd, en toen ik vroeg welke auto ik leuk vind, wist hij het niet.

Ik ben een document-chattool genaamd Kenning aan het bouwen. Deze maakt gebruik van RAG (Retrieval-Augmented Generation) zodat gebruikers vragen kunnen stellen over geüploade bestanden.

Ik heb de volledige pipeline vanaf nul opgebouwd met:

  • Java 21 en Spring Boot
  • Spring AI
  • PostgreSQL met pgvector
  • Ollama (draaiend op llama3.2:3b en nomic-embed-text)
  • Docker Compose

De pipeline werkt als volgt: Bestand uploaden → Tekst extraheren → Tekst in chunks verdelen → Chunks omzetten naar vectoren → Opslaan in pgvector → Zoeken naar vergelijkbare chunks → Chunks + vraag naar het model sturen → Antwoord met bronnen ontvangen.

Het systeem werkte, maar ik liep tegen twee verschillende fouten aan. Ze leken op elkaar, maar de oorzaken waren verschillend.

Fout 1: Het model was in de war.

Ik vroeg: "Welk embedding-model gebruikt dit project?" Het document gaf het antwoord expliciet aan. Het model haalde de juiste tekst op. Toch antwoordde het met dat het het niet wist, terwijl het in de volgende zin de juiste modelnaam wel herhaalde.

Mijn theorie: Het 3B-model is te klein. Het haalde de juiste gegevens op, maar kon geen zelfverzekerd antwoord geven. Een groter model zou dit waarschijnlijk oplossen.

Fout 2: Het model vond niets.

Ik vroeg: "Van welk automerk houd ik?" In het document stond dat ik van BMW houd. Maar het systeem gaf nul resultaten terug. De similarity score was te laag om mijn drempelwaarde te halen.

Mijn theorie: Chunk-dilutie (verwatering). Mijn testdocument was kort. Het mengde veel onderwerpen zoals Spring AI, OAuth2 en mijn voorkeur voor auto's in één chunk. De vector voor die chunk raakte verdund over al die onderwerpen. Een specifieke vraag over auto's verloor zijn kracht tegenover een brede chunk. Een betere chunking-strategie zou dit oplossen.

Geleerde lessen:

  • Kleine modellen hebben beperkingen in hun redeneervermogen.
  • Naïeve chunking beïnvloedt de nauwkeurigheid van de retrieval.
  • Het debuggen van het "waarom" is belangrijker dan alleen het oplossen van de fout.

De architectuur is solide. Het is traag en soms onjuist, maar de loop is compleet.

Source: https://dev.to/mido-dev/i-built-a-rag-app-then-asked-it-what-car-i-like-it-didnt-know-583n

Optional learning community: https://t.me/GyaanSetuAi