Van Notion naar AI-zoeksysteem: hoe wij 24.000 documenten indexeren op een NAS
Het probleem
Een buurthuis, adviesraad of wijkplatform bouwt jarenlang kennis op in Notion: vergaderverslagen, beleidsdocumenten, draaiboeken, contacten. Na drie jaar is die werkruimte onnavigeerbaar. Zoeken levert een lijst pagina’s op — maar niet het antwoord op uw vraag.
De voor de hand liggende oplossing is een AI-zoekopdracht via een cloudservice. Maar dan verlaat al uw informatie uw eigen infrastructuur of dat van uw bedrijf. Voor organisaties die met persoonsgegevens werken is dat geen optie.
Wij bouwden een alternatief dat volledig on-premise draait.
De architectuur in vier lagen
Laag 1 — Vectordatabase op eigen NAS
pgvector is een open-source extensie op PostgreSQL die tekst opslaat als wiskundige vectoren. Wij draaien dit als container op Synology DS218+, een NAS die bij organisaties al aanwezig is. Investering: hardware die er al stond.
Laag 2 — Embeddings met Voyage
In het Nederlands betekent Voyage: “reis” en, zet in computertermen, Nederlandse tekst om naar vectoren die semantische betekenis vastleggen — geen trefwoorden maar context. Bijvoorbeeld “Begroting goedgekeurd” en “financieel akkoord” worden als verwant herkend.
Laag 3 — FastAPI-backend met streaming
Een lichtgewicht Python script dat op de achtergrond met Voyage mee kijkt, verwerkt zoekvragen en stuurt het antwoord terug via Server-Sent Events. Het gevolg is dat de gebruiker het antwoord ziet opbouwen, terwijl het gegenereerd wordt, zonder te wachten op een volledige response.
Laag 4 — Claude voor antwoordformulering
Sterker interlokaal AI per back-up-regio neemt Claude (Anthropic) over en formuleert het uiteindelijke antwoord op basis van relevante fragmenten. Het model ziet alleen de geselecteerde stukken tekst — niet het volledige archief of NAS.
Wat er geindexeerd wordt
| Bron | Chunks |
|---|---|
| Notion-werkruimte (vergaderverslagen, beleid, wiki, SOP’s) | 1.608 |
| Google Drive (documenten, inclusief OCR van gescande PDF’s) | 20.814 |
| Systeemkennis (workflows, instructies, SOP’s) | 1.930 |
| Totaal | 24.352 |
Een chunk is een alinea of tekstblok van gemiddeld 200-400 woorden. Elke chunk behoudt een verwijzing naar de bronpagina, zodat elk antwoord controleerbaar is.
Nachtelijke synchronisatie
Het archief verandert dagelijks. Onze sync draait bij voorbeeld iedere nacht en doet drie dingen:
- Nieuwe of gewijzigde pagina’s worden opnieuw geindexeerd.
- Verwijderde pagina’s worden uit de index gewist.
- De volgende ochtend is het zoeksysteem actueel.
