Hoe werkt een vectordatabase?
Een gewone database zoekt op exacte waarden, zoals een ordernummer of een prijs. Vectoren hebben geen vaste volgorde, dus een vectordatabase zoekt op afstand. Elke tekst staat er als embedding in: een lange reeks getallen. Bij een vraag maakt het systeem ook van de vraag een embedding. Daarna zoekt het de vectoren die er het dichtst bij liggen.
- Dichtstbijzijnde buren zoeken: het systeem zoekt de k vectoren die het dichtst bij de vraag liggen. Google Cloud noemt als maten voor die afstand onder meer cosinusgelijkenis en de euclidische afstand.
- Zoeken bij benadering (ANN): de vraag exact vergelijken met elke opgeslagen vector kost veel rekenkracht. ANN-algoritmen zoeken veel sneller en leveren daarvoor een klein beetje nauwkeurigheid in.
- Vectorindex: een index groepeert vectoren die dicht bij elkaar liggen, zodat het zoeken sneller gaat.
- Filteren op metadata: je combineert betekenis met harde voorwaarden. Google Cloud geeft als voorbeeld een boek dat lijkt op ‘a heartwarming story about a fish’, maar onder de 20 dollar kost.
De open-source-extensie pgvector voegt zulke zoekfuncties toe aan PostgreSQL. Zonder index zoekt pgvector exact en mist het geen enkele dichtstbijzijnde buur. Met een index zoals HNSW of IVFFlat zoekt het bij benadering. Dan ruil je wat volledigheid in voor snelheid, en kan dezelfde vraag andere resultaten geven dan zonder index.
Waarvoor gebruik je een vectordatabase?
- RAG: een taalmodel haalt eerst passende stukken uit je eigen documenten en antwoordt daarmee. Volgens Google Cloud kan dat hallucinaties verminderen.
- Zoeken op betekenis: bezoekers zoeken op een begrip in plaats van op de exacte formulering.
- Aanbevelingen: producten of content voorstellen die passen bij wat iemand eerder bekeek.
- Dubbele records opsporen: gegevens herkennen die net anders gespeld zijn, zoals ‘Main St.’ en ‘Main Street’.
Bij RAG hoort een vaste volgorde. Het systeem knipt documenten eerst in stukken (chunking). Een embeddingmodel maakt van elk stuk een vector en zet die in de vectordatabase. Bij OpenAI gaat dat automatisch. Voeg je een bestand toe aan een vector store, dan knipt, vectoriseert en indexeert het systeem het zelf.
Voorbeeld: een zoekfunctie voor een kennisbank
Installatiebedrijf Warmhuys uit Apeldoorn heeft honderden artikelen over warmtepompen op de site. Bezoekers typen vragen als ‘pomp maakt herrie ’s nachts’. De oude zoekfunctie vond alleen artikelen met precies die woorden. Warmhuys zet daarom alle artikelen als embeddings in een vectordatabase. Nu verschijnt ook het artikel over geluidsoverlast van de buitenunit.
Storingscodes zoals ‘E-112’ vindt zoeken op betekenis niet altijd. Anthropic geeft een vergelijkbaar voorbeeld: een embeddingmodel vindt content over foutcodes in het algemeen, maar kan de exacte code missen. Warmhuys combineert de vectorzoekopdracht daarom met zoeken op trefwoorden.
Verwar een vectordatabase niet met
- Embeddings: de getallen zelf. De vectordatabase is de plek waar je ze opslaat en doorzoekt.
- Gewone database: zoekt op exacte waarden, zoals een postcode. Ook gewone databases kunnen vectoren opslaan, zoals PostgreSQL met pgvector. Microsoft noemt dat een geïntegreerde vectordatabase, naast de losse (pure) variant.
Veelgestelde vragen over Vectordatabase
Wat is het verschil tussen embeddings en een vectordatabase?
Embeddings zijn de getallen die de betekenis van een tekst vastleggen. Een vectordatabase slaat die getallen op. Daarna zoekt die database snel welke vectoren het dichtst bij je vraag liggen.
Heb je een vectordatabase nodig voor RAG?
Niet per se een aparte. Je moet tekststukken wel op betekenis kunnen terugvinden. Dat kan met een vectordatabase of met een gewone database met vectorfuncties, zoals PostgreSQL met pgvector. De file search van OpenAI regelt die opslag zelf.
Vindt een vectordatabase ook exacte woorden?
Niet altijd. Zoeken op betekenis kan een exacte code missen, zoals een foutcode of artikelnummer. Daarom kun je het combineren met zoeken op trefwoorden. Dat heet hybride zoeken.