De ultieme test voor een lokale LLM? Een wifi-storing.

Twee dagen het kantoor vol Newspark-collega’s en overal groepjes die aan hun eigen AI-opdracht werkten. Met tussendoor net zoveel kennisdeling als koffie, (alcoholvrije) biertjes, snoep en snacks. Ik ontdekte tussen twee testruns door dat Jelle, net als ik, recent in IJsland was geweest. Voor je het weet sta je vakantiekiekjes te vergelijken in plaats van code.

Samen met Bas en Hidde ging ik aan de slag met de opdracht 'een lokale code review bot inrichten met Ollama en een LLM'. We schoten al snel alle drie onze eigen kant op, niet in de laatste plaats omdat ons startniveau qua ervaring met AI nogal uiteenliep. Maar we kwamen steeds weer bij elkaar terug om te laten zien hoe we er mee bezig waren. Dat 'heen-en-weer' leverde meer op dan wanneer we allemaal hetzelfde pad hadden gevolgd. Het grappigste moment kwam al vroeg op dag één: nog geen vijf minuten nadat ik, direct na de installatie van Ollama en Qwen, mijn allereerste vliegtuigmodus-test had afgerond, viel het internet op kantoor daadwerkelijk uit.

Terwijl een deel van mijn collega’s stillag omdat ze afhankelijk waren van cloud-AI, kon ik gewoon lokaal doorwerken. Puur toeval. Maar wel een toeval dat precies liet zien waarom lokaal draaien meer is dan een leuk hackathon-experiment.

De ultieme test voor een lokale LLM? Een wifi-storing.

Drie testers, drie aanpakken, één opdracht

De opdracht klonk simpel: richt lokaal een LLM in dat code kan reviewen, zonder dat jouw code de deur uit hoeft voor een cloud-dienst. Het doel van de hackaton was vooral leren én plezier hebben: welke tools zijn er, hoe zet je zoiets op en welke coding guidelines wil je de AI eigenlijk laten toetsen.

Bas, Hidde en ik hadden alle drie een ander startpunt qua AI-ervaring, en dat was precies waarom we al snel uit elkaar dreven in onze aanpak. Ieder van ons verkende het onderwerp op zijn eigen manier en op zijn eigen tempo en juist door elkaar tussendoor te laten zien waar we tegenaan liepen, pikten we bij elkaar dingen op, die we zelf niet hadden gevonden. Dat is voor mij de kern van een hackathon: je wint er niks mee als je in je eentje het snelste resultaat neerzet, het draait juist om die omwegen van elkaar mogen zien.

De ultieme test voor een lokale LLM? Een wifi-storing.

Ollama en qwen2.5-coder: sneller opgezet dan ik het kon lezen

Ik startte met een vraag in de strekking van 'waar begin ik?' aan Claude. Als antwoord kwam 'Ollama downloaden en installeren en daarna een model kiezen'. Ik was van plan om eerst de officiële quickstart-documentatie door te lezen voordat ik zou beginnen, maar voordat ik daar goed en wel aan toe was, stond Ollama al geïnstalleerd. Dat zegt denk ik meer over de drempel van dit soort tools, dan ik van tevoren had verwacht. Die drempel is eigenlijk verrassend laag.

Van de voorgestelde modellen koos ik qwen2.5-coder, dat het meest geschikt leek voor codegerelateerde taken. Ik heb tijdens de hackathon bewust geen andere modellen uitgeprobeerd. Het doel was niet het perfecte model vinden, maar hands-on ervaren hoe je zoiets opzet en welke theorie en andere randzaken daarbij komen kijken.

De ultieme test voor een lokale LLM? Een wifi-storing.

Testdata, commits en een reviewer die meekijkt

Een AI die code reviewt, heb je pas echt getest als je hem tegen iets aan laat lopen. Daarvoor bouwde ik een klein testproject in git, met een reeks commits die ik bewust liet groeien. Elke commit gaf de reviewer nieuwe input in de vorm van een diff.

Wat ik uiteindelijk bouwde, groeide uit tot een kleine .NET-consoletool die:

  • een git diff tussen twee commits ophaalt
  • een markdown-bestand met team-conventies inleest
  • diff en conventies naar Ollama stuurt
  • de review teruggeeft via een paar losse review-agents: een Security Agent, een Code Style Agent en een Test Conventions Agent

Die drie agents draaien los van elkaar, met een taal als losse parameter, dus is de tool in theorie ook bruikbaar voor een andere stack dan C# (dit heb ik overigens nog niet getest, of dat ook daadwerkelijk zo werkt) en met een ander conventies-bestand. Deze opzet was overigens puur voor het leerproces: er bestaan inmiddels ook gewoon kant-en-klare plugins voor onder andere Visual Studio Code en andere IDE’s om vergelijkbare acties met Ollama uit te voeren.

De ultieme test voor een lokale LLM? Een wifi-storing.

Bewust klein en behapbaar

Ik denk dat ik afweek van veel andere hackathon-experimenten: ik wilde de codebase die ik liet genereren voor bijna 100% zelf kunnen lezen en begrijpen. Ik heb het vermoeden dat een aantal collega’s in twee dagen grotere of meer werkende projecten hebben neergezet, maar niet weten wat er allemaal in die codebase zit. Dat zie ik zelf vooralsnog als een (groot) risico. Als tester ben ik nu eenmaal wantrouwend aangelegd, ook richting mijn eigen output, en die controle wilde ik niet inleveren voor snelheid. Al zal de tijd leren of ik daar straks ook aan moet geloven ��.

Dag twee: zijpaadjes met GitHub Copilot Chat

Op dag twee ben ik bewust even van het hoofdpad afgeweken. Naast de lokale reviewer heb ik in Visual Studio Code met GitHub Copilot Chat geëxperimenteerd, dus niet lokaal, maar cloud-based, om te kijken hoe ver je komt met codeverbeteringen, refactoren en het herstructureren van lagen en mappen. Dat leverde waardevolle vergelijkingsstof op (ook ten opzichte van andere tools als ChatGpt en Claude die ik tot dusver veel heb gebruikt), ook al viel dit strikt genomen buiten de oorspronkelijke opdracht.

Aan de prompts zelf heb ik in die twee dagen nauwelijks gesleuteld. Er ligt nog volop ruimte om de reviewer betere, scherpere feedback te laten geven door de prompts te verfijnen, daar ben ik van overtuigd. Maar daar hebben we bewust niet de focus op gelegd. Dat was ook niet erg, want een groot deel van de tijd ging simpelweg op aan uitproberen, uitleggen en lol hebben met elkaar.

De eyeopener: mijn laptop kan meer dan ik dacht

Het grootste “aha”-moment kwam niet van de code, maar van de performance. Mijn Newspark-laptop heeft 32 GB RAM en een grafische kaart met 4 GB, en qwen2.5-coder draaide daar merkbaar soepel op, ook zonder internetverbinding, zoals die wifi-storing per ongeluk bewees. Ik geef er meteen bij aan dat de specs van mijn laptop waarschijnlijk robuuster zijn dan die van bijvoorbeeld de laptop waar ik momenteel bij mijn klant op werk, dus dit is geen garantie voor elke machine. Dat ik zo verrast was, kwam door mijn eerdere verwachting: in het verleden heb ik weleens meegekeken met anderen die lokaal een AI-model draaiden, en dat zag er toen tergend traag uit. Of dat kwam doordat de hardware toen aanzienlijk minder krachtig was, of doordat de techniek inmiddels flink is doorontwikkeld, weet ik niet, maar het verschil met nu is in elk geval groot.

En dat opent deuren. Lokaal draaien is niet alleen relevant vanuit privacy/security-oogpunt, je code hoeft nooit een externe dienst in, het maakt je ook minder afhankelijk van een verbinding die, zoals bleek, helemaal niet zo vanzelfsprekend aanwezig is als je zou denken. Voor welke concrete usecases dat interessant wordt, hou ik voorlopig nog even voor mezelf en mijn collega’s. Wie weet kom ik daar in een volgende blog op terug ��.

Tot slot

Twee dagen, drie totaal verschillende aanpakken, en één simpele wifi-storing die precies liet zien waar de waarde van lokaal draaien zit. Wil je zelf verder experimenteren met de tool die ik tijdens de hackathon bouwde? De code staat open op GitHub: ReviewerToolHackathonExperiment.

#replace title#