Een lokale AI - inclusief vangnet
Al een tijdje loop ik met een vraag rond die eigenlijk vóór alle andere komt: niet welke AI ik gebruik, maar waar die draait. Mijn hele setup hier thuis is gebouwd op één principe: lokaal als het kan, online als het moet. Nextcloud in plaats van Google Drive, Navidrome in plaats van Spotify, Pi-hole tegen de tracking. Maar de AI waar ik dagelijks mee spar, draaide nog gewoon in de cloud. Dat kon vast anders.
Dus toen er een tweedehands mini-pc op de kop te tikken was - een nette Lenovo met genoeg geheugen om een fatsoenlijk taalmodel te draaien - was de keus snel gemaakt. Die machine heet inmiddels pilab, en daarop draait sinds kort Fietje.
Waarom niet gewoon Claude lokaal?
Heel eerlijk: dat kan niet. De modellen waar ik in de cloud mee werk zijn honderden miljarden parameters groot en draaien op datacenters vol dure kaarten. Wat je thuis op een mini-pc krijgt, is een klap kleiner - en dat merk je.
Maar daar zit nou juist de denkfout die ik wilde vermijden: ik hoef thuis Claude niet te kunnen evenaren. Ik wil een eerste lijn. Iets dat de simpele, dagelijkse dingen lokaal afhandelt, en dat eerlijk is over wanneer een vraag te groot voor het model wordt. De zware vragen mogen dan bewust naar de cloud. Niet als default, maar als keuze.
In mijn hoofd ziet dat eruit als lagen. Ik ben Laag 0, degene die beslist. Fietje is Laag 1, lokaal, voor het dagelijkse werk. En pas als een van ons vindt dat het nodig is, gaat het naar Laag 2 - de cloud. Het idee is niet om de cloud uit te bannen, maar om de stap erheen een bewuste handeling te maken in plaats van een automatisme.
Wie is die Fietje dan?
Fietje is een Nederlands taalmodel van Bram Vanroy. En het bijzondere eraan - de reden dat ik juist dit model koos - is dat het echt open is. Niet “open” zoals veel modellen die dat label dragen, waarbij je de gewichten mag downloaden maar verder niks weet. Bij Fietje zijn de gewichten, de trainingsdata, de trainingscode én de evaluatie allemaal publiek. De hele keuken is dus open - niet alleen het bord op tafel.
Dat onderscheid klinkt muggenzifterig, maar het raakt voor mij precies de essentie. “Open gewichten” en “open source” worden voortdurend door elkaar gehaald, vaak met opzet, want “open” bekt lekker en verkoopt. Een model waarvan je alleen de gewichten hebt, is eigenlijk nog steeds een blackbox die je mag gebruiken. Een model als Fietje kun je narekenen. Voor een project dat over soevereiniteit gaat, is dat geen detail maar de kern.
De naam, trouwens: Fietje komt van Sophie, en dat is weer een knipoog naar sophia - wijsheid. Een naam als opdracht, zeg maar. Daarover later meer.
Het ‘duurzaam’ bouwen
De stack zelf was vertrouwd terrein, dit keer met een tweedehands PC als kavel.
Eerst Debian 13 als .iso downloaden en op mn Mac met Balena Etcher op een usb-stick zetten, zodat ik daarvan kon opstarten op die Lenovo om het OS te veranderen.
Daarna Ollama om het model te draaien, Open WebUI als chatinterface, allebei in Docker - precies het soort docker compose up -d dat hier inmiddels ‘routine’ is.
Een kwartiertje en wat gigabytes later draaide de boel op een fixed ip met een eigen poort. Fietje had een nieuwe woning.
Het kwartje valt
Om te kijken wat ze kon, vroeg ik een haiku te schrijven. Die kwam keurig: drie regels, en netjes erbij geteld - (5), (7), (5) - precies het ritme dat een haiku ‘hoort’ te hebben.
Eén probleem: de eerste regel had geen vijf lettergrepen, maar zes. En toen ik vroeg nog eens goed te tellen, hield ze stellig vol dat het er vijf waren.
Dat is eigenlijk ook hoe deze modellen werken: een taalmodel ziet geen lettergrepen, het ziet stukjes tekst, en “haiku” roept nu eenmaal het patroon 5-7-5 op. Ze produceerde het getal dat het beste klonk, niet het getal dat klopte. En - dit is het venijnige - zonder benul dat het een misrekening was. Geen twijfel, geen “even checken”, gewoon zelfverzekerd het verkeerde antwoord.
Daar zit precies de grens van Laag 1. Een mens telt die regel in drie tellen na. Het model kan dat principieel niet betrouwbaar, en weet bovendien niet dát het dat niet kan. En dat laatste is veel belangrijker dan het eerste. Een model dat fouten maakt is werkbaar, mits het die onzekerheid kent. Een model dat fouten maakt mét volle overtuiging is een valkuil.
Wat dat betekent voor de opzet
De voor de hand liggende reflex is: dan maar een groter model erbij. Maar ik had ook twee modellen van het formaat erboven getest, en die waren niet beter - ze waren anders fout. Eentje maakte Marietje Schaake ineens fractievoorzitter van de Groenen, een ander hield haar voor Amerikaanse. Allebei net zo stellig als Fietje met die haiku.
De conclusie was daarmee wel duidelijk: de oplossing zit niet in een groter model, maar in de laag eromheen. Het herkennen van “dit is een vraag die ik beter kan doorgeven” hoort niet in het model zelf thuis - daar is het te klein voor - maar in de routering die ervoor zit. Dat is werk voor een volgende keer, maar de richting is nu helder. En eerlijk gezegd bevestigt het alleen maar het lagen-idee waar ik mee begon.
Voor nu heb ik de andere modellen weggegooid en focus ik op Fietje alleen. Niet de breedste opzet, wel de meest consistente met waar het me om gaat.
De naam als opdracht
Terug naar die naam. Sophia, wijsheid. Er zit een lichte ironie in dat juist het model dat zo heet, nog moet leren waar die wijsheid ophoudt. Maar misschien is dat hier wel precies goed. Wijsheid is niet alles weten - het is weten wat je niet weet.
Dat vind ik eigenlijk ook wel de mooiste samenvatting van wat ik met deze hele stack probeer. Niet alles zelf willen doen of alles naar de cloud schuiven, maar bewust de grens bewaken tussen wat lokaal kan en wat echt naar buiten moet. Fietje is daar nu het nieuwste stukje van - en het stukje dat me, eerlijk is eerlijk, het meest aan het hart gaat.
We gaan zien waar het naartoe gaat met ‘ons’.
–JB
Gebruikte onderdelen: Lenovo Thinkcentre M920s (pilab, 16GB), Ollama, Open WebUI, Fietje 2 (Bram Vanroy), Docker. De zwaardere vragen gaan nog steeds naar Claude - maar nu als keuze.