Ga naar inhoud

Prompt Engineering

De kwaliteit van je AI-gegenereerde code is precies zo goed als de instructies die je geeft. Leer de kunst van het goede gesprek met AI.

Introductie

De bottleneck bij software bouwen is verschoven. Het probleem is niet langer “ik kan niet programmeren.” Het probleem is: “ik kan niet helder uitleggen wat ik wil.”

AI-modellen zijn spectaculair goed geworden in het genereren van code. Maar ze zijn volledig afhankelijk van jouw instructies. Geef een vaag verzoek, en je krijgt vage code. Geef een gestructureerde, specifieke prompt, en je krijgt code die doet wat je bedoelt — op de manier die je bedoelt.

Prompt engineering is geen mysterieuze kunst. Het is een vaardigheid die je kunt leren. In deze module ontleden we de anatomie van een goede prompt, leer je acht patronen die je dagelijks kunt inzetten, en ontdek je hoe je de AI effectief bijstuurt wanneer het resultaat niet klopt.

Of je nu een ondernemer bent die een MVP bouwt of een developer die sneller wil werken: de principes zijn hetzelfde. Wie beter leert communiceren met AI, bouwt betere software.

De vijf bouwstenen van een goede prompt

Elke effectieve prompt bevat — bewust of onbewust — een combinatie van vijf elementen. Hoe meer bouwstenen je expliciet meeneemt, hoe beter het resultaat.

1. Context

Geef de AI achtergrond over je project, de gebruikte technologie en de bestaande codebase. Zonder context maakt de AI aannames die vaak verkeerd zijn.

Zwak: “Maak een loginpagina.”
Sterk: “Ik bouw een Next.js 16 app met Supabase Auth en Tailwind CSS. Maak een loginpagina met e-mail/wachtwoord die de Supabase client-side auth gebruikt en na succesvolle login doorstuurt naar /dashboard.”

2. Taak

Beschrijf concreet wat de AI moet doen. Gebruik werkwoorden: maak, voeg toe, refactor, los op, test. Vermijd abstracte beschrijvingen.

Zwak: “Doe iets met de database.”
Sterk: “Maak een Supabase migration die een posts-tabel aanmaakt met kolommen voor id (uuid), title (text), slug (text, unique), content (text), status (text, default 'draft'), en created_at (timestamptz).”

3. Richtlijnen

Geef aan welke conventies, patronen of stijlen je wilt volgen. Dit voorkomt dat de AI eigen keuzes maakt die niet passen bij je project.

Zwak: “Maak het netjes.”
Sterk: “Gebruik Server Components waar mogelijk, 'use client' alleen bij hooks. Importeer via @/ pad-alias. Foutmeldingen in het Nederlands. Volg de bestaande naamconventies in het project.”

4. Beperkingen

Vertel de AI wat het niet moet doen. Beperkingen zijn minstens zo belangrijk als instructies. Ze voorkomen dat de AI te veel doet, verkeerde bibliotheken kiest, of bestaande code breekt.

Zwak: “Maak het niet te ingewikkeld.”
Sterk: “Gebruik geen externe libraries. Wijzig geen bestaande bestanden. Voeg geen database-migraties toe. Houd de component onder 100 regels.”

5. Output-formaat

Geef aan hoe je het resultaat wilt ontvangen. Wil je een volledig bestand? Alleen het verschil? Een stap-voor-stap uitleg? Het formaat bepaalt de bruikbaarheid van het antwoord.

Zwak: “Laat zien hoe het moet.”
Sterk: “Geef het volledige bestand met bestandsnaam als commentaar bovenaan. Voeg inline commentaar toe bij complexe logica. Eindig met een lijst van bestanden die ik moet aanpassen.”

Acht prompt patronen

Patronen die je steeds opnieuw kunt inzetten. Elk patroon heeft een vast sjabloon dat je aanpast aan je situatie.

De Planner

Sjabloon: “Ik wil [feature] bouwen. Maak eerst een plan met alle bestanden, componenten en stappen voordat je code schrijft.”

Wanneer: Bij het starten van een nieuw onderdeel. Voorkomt dat de AI direct begint met coderen zonder overzicht.

De Stapsgewijze Bouwer

Sjabloon: “Bouw [feature] in drie stappen: 1) het datamodel, 2) de API-route, 3) de UI-component. Wacht na elke stap op mijn goedkeuring.”

Wanneer: Bij complexe features waar je tussentijds wilt controleren en bijsturen.

De Fixer

Sjabloon: “Deze code geeft de volgende fout: [foutmelding]. Het verwachte gedrag is [beschrijving]. Los het op zonder andere functionaliteit te wijzigen.”

Wanneer: Bij bugs en foutmeldingen. De foutmelding en het verwachte gedrag zijn essentieel voor een goede fix.

De Reviewer

Sjabloon: “Review deze code op [security / performance / leesbaarheid]. Geef per bevinding: wat het probleem is, waarom het ertoe doet, en hoe ik het oplos.”

Wanneer: Voordat je code naar productie brengt. Laat de AI als kritische collega meekijken.

De Vertaler

Sjabloon: “Vertaal deze [Python/JavaScript/SQL] code naar [doeltaal]. Behoud dezelfde functionaliteit en naamconventies. Gebruik idiomatische patronen van de doeltaal.”

Wanneer: Bij het migreren tussen talen of frameworks, of het omzetten van pseudocode naar werkende code.

De Refactorer

Sjabloon: “Refactor deze code zodat [doel: leesbaarder / herbruikbaar / testbaar]. Verander het externe gedrag niet. Leg uit welke wijzigingen je maakt en waarom.”

Wanneer: Als code werkt maar rommelig is. De beperking “verander het gedrag niet” is cruciaal.

De Uitlegger

Sjabloon: “Leg uit wat deze code doet, regel voor regel. Gebruik eenvoudige taal en geef aan waarom bepaalde keuzes zijn gemaakt.”

Wanneer: Als je code hebt die werkt maar die je niet begrijpt. Begrip voorkomt problemen later.

De Testschrijver

Sjabloon: “Schrijf tests voor [component/functie]. Test het verwachte gedrag, edge cases en foutafhandeling. Gebruik [Vitest / Jest / Playwright].”

Wanneer: Na het bouwen van een feature. Tests geven vertrouwen dat toekomstige wijzigingen niets breken.

Context management

AI-modellen hebben een contextvenster: een maximale hoeveelheid tekst die ze tegelijk kunnen verwerken. Hoe groter je project wordt, hoe belangrijker het is om slim met die ruimte om te gaan. Drie strategieën helpen je daarbij.

Rules files: je project op papier

Leg de kernregels van je project vast in een bestand dat de AI altijd meeleest. Tools als Cursor (.cursorrules), Claude (CLAUDE.md) en Windsurf (.windsurfrules) ondersteunen dit. Beschrijf hierin je techstack, naamconventies, mappenstructuur en veelgemaakte fouten.

Dit bespaart je tientallen herhaalde instructies per sessie. De AI “onthoudt” je projectregels zonder dat je ze elke keer opnieuw hoeft te typen.

Context layering: geef alleen wat relevant is

Stuur niet je hele codebase mee. Selecteer de bestanden die direct relevant zijn voor je vraag. Werk in lagen: begin met het bestand dat je wilt wijzigen, voeg gerelateerde types en interfaces toe, en verwijs naar patronen die elders in het project worden gebruikt.

Hoe gerichter de context, hoe beter het antwoord. Een AI die drie relevante bestanden ziet presteert beter dan een die honderd bestanden moet doorzoeken.

Nieuwe gesprekken: de reset-knop

Start een nieuw gesprek wanneer je van onderwerp wisselt. Een lang gesprek over authenticatie dat overgaat in styling en vervolgens in database-optimalisatie verliest focus. De AI raakt in de war over wat er nu eigenlijk gevraagd wordt.

Een nieuw gesprek met een heldere openingsprompt is bijna altijd beter dan doormodderen in een vervuild gesprek.

Iteratief prompten

De eerste reactie van de AI is zelden perfect. Dat is normaal. Het echte werk zit in het bijsturen. Er zijn drie niveaus van feedback, elk met een andere intensiteit.

Richting bijsturen

Het resultaat is in de goede richting, maar mist details of maakt verkeerde aannames. Je geeft kleine correcties: “Gebruik een dropdown in plaats van radiobuttons”, “Voeg validatie toe op het e-mailveld”, “De foutmelding moet in het Nederlands.”

Dit is het mildste niveau. Je bouwt voort op wat de AI al heeft gemaakt.

Aanpak corrigeren

De AI heeft een fundamenteel verkeerde aanpak gekozen. Misschien gebruikt het client-side rendering waar server-side beter past, of kiest het een bibliotheek die je niet wilt gebruiken.

Hier geef je duidelijk aan wat er mis is met de gekozen aanpak en beschrijf je de gewenste richting: “Dit moet een Server Component zijn, geen Client Component. Haal de data op met een server-side fetch in plaats van useEffect.”

Terugdraaien en opnieuw beginnen

Soms is het sneller om opnieuw te beginnen dan om een verkeerd resultaat te repareren. Herken dit moment. Als je merkt dat je meer tijd besteedt aan het corrigeren dan aan het bouwen, is een nieuwe prompt met betere instructies effectiever.

Gebruik wat je hebt geleerd van de eerste poging om de tweede prompt scherper te maken. Omschrijf expliciet wat er de vorige keer misging.

Debuggen met AI

Debuggen is een van de krachtigste toepassingen van AI. Maar de manier waarop je een bug presenteert, bepaalt of je een werkende fix krijgt of een reeks zinloze suggesties. Volg deze vier stappen.

Stap 1: Beschrijf het verwachte gedrag

Begin altijd met wat er zou moeten gebeuren: “Wanneer een gebruiker op 'Opslaan' klikt, moet het formulier naar de server worden verstuurd en moet de gebruiker een bevestigingsmelding zien.”

Stap 2: Beschrijf het werkelijke gedrag

Beschrijf concreet wat er in plaats daarvan gebeurt: “De pagina herlaadt volledig, de data wordt niet opgeslagen, en er verschijnt geen foutmelding.”

Stap 3: Deel de foutmelding en relevante code

Kopieer de volledige foutmelding, inclusief de stacktrace. Voeg de code toe die het probleem veroorzaakt. Meer context is beter: de AI kan niet raden wat er in bestanden staat die je niet deelt.

Stap 4: Vraag om uitleg, niet alleen een fix

Voeg toe: “Leg uit waarom deze fout optreedt voordat je een oplossing geeft.” Dit dwingt de AI om het probleem te analyseren in plaats van blind code aan te passen. Je leert ervan en kunt beoordelen of de fix logisch is.

Error-forward prompting: plak de foutmelding letterlijk in je volgende bericht. Dit is de snelste manier om te debuggen. De AI herkent bekende foutpatronen en kan vaak in één keer de juiste oplossing geven.

Tien prompt anti-patronen

Veelgemaakte fouten die leiden tot slechte resultaten. Herken ze en vermijd ze.

1. De muurprompt

Niet doen: Alles in één gigantische prompt proppen zonder structuur.

Beter: Splits op in duidelijke secties met koppen of nummering.

2. De vage opdracht

Niet doen: “Maak het beter” of “Fix de bugs.”

Beter: Benoem precies wat “beter” betekent en welke bugs je bedoelt.

3. Context vergeten

Niet doen: Code vragen zonder te vertellen welke taal, framework of versie je gebruikt.

Beter: Begin elke sessie met je techstack en projectcontext.

4. Teveel tegelijk vragen

Niet doen: “Bouw een complete webshop met betalingen, accounts en dashboards.”

Beter: Splits het op in behapbare stappen. Begin met het datamodel.

5. Feedback negeren

Niet doen: De eerste reactie accepteren zonder te controleren of het klopt.

Beter: Test het resultaat, geef feedback, en itereer tot het goed is.

6. Copy-paste zonder begrip

Niet doen: Code overnemen zonder te begrijpen wat het doet.

Beter: Vraag de AI om uitleg bij complexe code. Begrip voorkomt fouten later.

7. Het vervuilde gesprek

Niet doen: Twintig verschillende onderwerpen in één gesprek behandelen.

Beter: Start een nieuw gesprek per onderwerp of feature.

8. Beperkingen vergeten

Niet doen: Alleen zeggen wat je wilt, niet wat je niet wilt.

Beter: Benoem expliciet: geen externe libraries, niet meer dan X regels, wijzig bestand Y niet.

9. De eindeloze correctielus

Niet doen: Tien keer dezelfde fout corrigeren in hetzelfde gesprek.

Beter: Na drie pogingen: nieuw gesprek met een betere startprompt.

10. Security als bijzaak

Niet doen: Nooit om security-checks vragen. “Dat komt later wel.”

Beter: Vraag bij elke feature expliciet om inputvalidatie, authenticatie-checks en foutafhandeling.

Geavanceerde technieken

Zodra je de basis beheerst, zijn er drie geavanceerde technieken die je resultaten naar een hoger niveau tillen.

Multi-agent workflows

Gebruik verschillende AI-gesprekken voor verschillende rollen. Eén gesprek plant de architectuur, een ander schrijft de code, een derde reviewt het resultaat. Door de AI steeds een specifieke rol te geven — “je bent een security-expert” of “je bent een database-architect” — krijg je diepere, meer gespecialiseerde antwoorden.

Dit simuleert een team van specialisten. De planner denkt in structuur, de bouwer in implementatie, de reviewer in risico's. Elk perspectief vangt blinde vlekken van de ander.

Constraint anchoring

Zet je beperkingen aan het begin van de prompt, niet aan het einde. AI-modellen geven meer gewicht aan instructies die vroeg in de prompt staan. Begin met: “Gebruik uitsluitend TypeScript strict mode. Geen any types. Geen externe dependencies.” en geef daarna pas de taak.

Dit principe werkt ook bij langere prompts: plaats de belangrijkste regels bovenaan en herhaal ze eventueel onderaan als samenvatting.

Voorbeeldgestuurd prompten

Geef de AI een voorbeeld van het gewenste resultaat. In plaats van te beschrijven hoe een API-route eruit moet zien, plak je een bestaande route uit je project en zeg: “Maak een nieuwe route voor [feature] die dezelfde structuur volgt als dit voorbeeld.”

Voorbeelden zijn krachtiger dan beschrijvingen. De AI pikt naamconventies, foutafhandeling, import-structuur en stijl automatisch op uit het voorbeeld. Dit is de meest betrouwbare manier om consistentie te waarborgen.

Je prompt-toolkit

Zes sjabloonprompts die je direct kunt gebruiken. Pas de tekst tussen vierkante haken aan voor je eigen situatie.

Projectstart

“Ik start een nieuw project: [beschrijving]. Techstack: [framework, database, styling]. Maak een mappenstructuur, benoem de kernbestanden, en beschrijf per bestand wat erin komt. Schrijf nog geen code.”

Nieuwe feature

“Voeg [feature] toe aan mijn [framework] app. Huidige structuur: [relevante bestanden]. Vereisten: [lijst]. Beperkingen: [wat niet mag]. Bouw het stap voor stap en wacht na elke stap op mijn feedback.”

Bug fix

“Verwacht gedrag: [wat zou moeten gebeuren]. Werkelijk gedrag: [wat er gebeurt]. Foutmelding: [volledige error]. Relevante code: [code]. Leg uit waarom dit gebeurt en geef een fix.”

Code review

“Review deze code op security, performance en leesbaarheid. Geef per bevinding: (1) wat het probleem is, (2) het risico, (3) een concrete fix. Sorteer op ernst.”

Refactoring

“Refactor [bestand/functie] met als doel: [leesbaarheid / performance / testbaarheid]. Behoud exact hetzelfde externe gedrag. Leg elke wijziging uit. Geef het volledige bestand terug.”

Deployment check

“Controleer mijn project op deployment-gereedheid. Check: environment variables, build errors, security headers, foutafhandeling, en performance-basics. Geef een checklist met status per punt.”

Klaar om beter te prompten?

Prompt engineering is een vaardigheid die groeit met oefening. Begin vandaag met de vijf bouwstenen, experimenteer met de patronen, en merk hoe je resultaten verbeteren.