# Bouwinstructie: een weekblad dat zichzelf samenstelt

Thijs Leufkens, datawijs.nl. Uit LAB-003 in Het Lab. Vrij te gebruiken en aan te passen.

Je laat een taalmodel op je eigen computer of server elke week een overzicht samenstellen uit bronnen die jij kiest. Het model leest en beoordeelt, een vast script kiest. Zo blijft de selectie voorspelbaar en weet je achteraf waarom iets erin stond.

## Wat je nodig hebt

- Een machine die 's avonds aanstaat (een kleine server of een oude laptop).
- Een lokaal taalmodel met een OpenAI-compatibele API, bijvoorbeeld via llama.cpp of Ollama. Een model van rond de 30 miljard parameters is ruim genoeg; kleiner werkt ook, maar minder consequent.
- Een scripttaal die je kent. Python met de standaardbibliotheek volstaat.
- Een lijst bronnen met een RSS-feed.

## De vijf stappen

### 1. Bronnen kiezen

Begin met tien tot twintig feeds. Zet per bron in een configbestand: naam, feed-url, taal en een gewicht (hoe graag je die bron terugziet). Respecteer `robots.txt`: weert een site bots, haal dan alleen de samenvatting uit de feed op en link naar het origineel.

### 2. Elke avond ophalen

Lees de feeds, haal van elk nieuw stuk de tekst op en bewaar alles in een kleine database (SQLite is genoeg). Sla per stuk op: bron, titel, url, datum, tekst en een status (`opgehaald`, `gelabeld`, `fout`).

### 3. Laten labelen door het model

Stuur elk stuk apart naar het model, met een vaste systeemprompt vooraan en de tekst ingekort tot een paar duizend woorden. Vraag om JSON volgens een vast schema, zodat het antwoord altijd te verwerken is. Bijvoorbeeld:

```json
{
  "onderwerp": "een van je vaste onderwerpen",
  "kwaliteit": 4,
  "kwaliteit_reden": "één zin",
  "samenvatting": "twee zinnen",
  "waarom": "waarom dit het lezen waard is, als tip van een vriend"
}
```

Tips:

- Zet de temperatuur laag (0,1) en, als je model dat kent, het "denken" uit. Dat is sneller en consequenter.
- Doe één verzoek tegelijk. Een lokaal model wordt niet sneller van parallelle verzoeken.
- Controleer het antwoord in je script. Staat er iets in wat je niet wilt, vraag dan één keer opnieuw en laat het veld daarna leeg.

### 4. Vrijdagavond samenstellen

Kies de stukken met een vast script, niet met het model. Bijvoorbeeld: de hoogste kwaliteit eerst, hooguit twee stukken per bron, minstens drie verschillende onderwerpen, samen niet langer dan twee uur lezen. Laat het model daarna hooguit een titel of een korte inleiding voor het nummer schrijven.

### 5. Zaterdag verschijnen

Zet het nummer als webpagina of mail klaar en publiceer het op een vast moment. Plan de drie stappen met een timer (cron of systemd): elke avond ophalen en labelen, vrijdagavond samenstellen, zaterdagochtend publiceren.

## Wat niet werkte

Ik probeerde eerst te meten hoe ver een stuk van mijn eigen notities af lag, met embeddings. Die score onderscheidde niets: de rangcorrelatie met wat ik zelf interessant vond bleef rond 0,1. Het oordeel van het model zelf, gevraagd in het schema, deed dat wel. Meet dit eerst voordat je erop gaat selecteren: leg een week labels naast je eigen oordeel.

## Klaar als

Je krijgt drie weken achter elkaar een nummer dat je ook echt opent. Open je de helft niet, zet het dan uit of verander de bronnen.
