# Prompts voor codegeneratie [[TOC]] ## Waarom specifieke prompts voor code? Code is anders dan proza. Een kleine fout in een functienaam, een verkeerde type-aanname of een ontbrekende foutafhandeling kan leiden tot bugs die pas in productie opduiken. Goede codegeneratie-prompts zijn preciezer dan gewone prompts. Ze specificeren niet alleen wat de code moet doen, maar ook in welke taal, met welke stijlconventies, welke foutafhandeling, welke types, en hoe de code getest moet worden. ## De basisstructuur van een codeprompt Een effectieve codegeneratie-prompt bevat zes onderdelen: 1. **Taal en versie**: bijvoorbeeld "Schrijf dit in Python 3.12" of "TypeScript met strikte typing". 2. **Functionele beschrijving**: wat moet de functie doen, eventueel stap voor stap. 3. **Invoer en uitvoer**: welke parameters, welke returntypes, welke randgevallen. 4. **Foutafhandeling**: welke uitzonderingen moeten worden afgehandeld en hoe. 5. **Stijlconventies**: docstrings, wel of geen commentaar, naamgevingsconventies. 6. **Context**: staat dit in een bestaand systeem en welke dependencies zijn beschikbaar? Het verschil tussen een vage en een precieze prompt is groot. **Slechte prompt:** "Schrijf een functie die e-mails valideert." **Goede prompt:** "Schrijf een Python-functie `validate_email(email: str) -> bool` die controleert of een e-mailadres geldig is. Gebruik een reguliere expressie conform RFC 5322. Geef `True` terug voor geldig en `False` voor ongeldig. Voeg een docstring toe met een parameterbeschrijving. Geen externe dependencies." :::info title="Noem altijd taal en versie" "Schrijf een functie" zonder meer levert willekeurig JavaScript, Python of een andere taal op. Specificeer de programmeertaal, de versie en de stijlconventies van je project, zodat de output past binnen je bestaande codebase. ::: ## Technieken voor betrouwbare codegeneratie **Test-first prompting.** Vraag het model eerst testcases te schrijven en daarna de implementatie. Dit dwingt expliciet nadenken over randgevallen. > "Schrijf eerst vijf pytest-testcases voor een functie die een telefoonnummer normaliseert naar E.164-formaat. Schrijf daarna de implementatie die alle tests laat slagen." **Stap-voor-stap implementatie.** Vraag bij complexe functies eerst om een plan, bevestig dat plan, en vraag dan pas de code. > "Leg eerst in stappen uit hoe je een LRU-cache implementeert in Python. Schrijf daarna de implementatie." **Bestaande code uitbreiden.** Geef de bestaande code mee en vraag om een specifieke uitbreiding. Dit houdt de stijl consistent. > "Hier is mijn bestaande UserService-klasse: [code]. Voeg een methode `get_active_users` toe die alle gebruikers met status `active` retourneert, gesorteerd op aanmaakdatum aflopend." :::howto title="Zo bouw je een sterke codeprompt" 1. **Specificeer taal en versie**, altijd en zonder uitzondering. 2. **Definieer de functiesignatuur**: naam, parameters en returntypes. 3. **Geef randgevallen op** zoals lege invoer, null-waarden en grenswaarden. 4. **Beschrijf de foutafhandeling**: welke exceptions en welke foutberichten. 5. **Vraag om tests**, of maak daar standaard een gewoonte van. 6. **Geef context**: welk framework, welke dependencies en welke conventies. ::: ## Specifieke use cases **API-integratie** > "Schrijf een Python-klasse `GitHubClient` die de GitHub REST API aanroept met de `requests`-bibliotheek. Implementeer de methoden `get_user(username)` en `list_repos(username)`. Gebruik Bearer-token-authenticatie via de environment variable `GITHUB_TOKEN`. Foutafhandeling via custom exceptions. Overal type hints." **Database-query's** > "Schrijf een SQL-query voor PostgreSQL 15 die de top 10 producten op omzet in de afgelopen 30 dagen retourneert. Tabellen: `orders` (id, product_id, quantity, created_at) en `products` (id, name, price). Geef `product_name`, `total_quantity` en `total_revenue` terug, gesorteerd op `total_revenue` aflopend." **Unit tests** > "Schrijf pytest-testcases voor de volgende Python-functie: [code]. Dek af: de normale case, lege invoer, None-waarden, de grenzen van het toegestane bereik en foutcondities. Gebruik `pytest.mark.parametrize` waar dat zinvol is." ## Code reviewen met prompts Je kunt prompts ook inzetten voor code review: > "Review de volgende Python-code op beveiliging (SQL-injection, input-validatie), prestaties (N+1-query's, onnodige bewerkingen), leesbaarheid en PEP 8-conformiteit. Geef je bevindingen als genummerde lijst met prioriteit hoog, gemiddeld of laag." :::warning title="Valideer altijd AI-gegenereerde code" Modellen maken fouten die niet altijd direct zichtbaar zijn: subtiele logicafouten, ontbrekende foutafhandeling, verouderde API-aanroepen of beveiligingsrisico's. Lees de output, draai de tests en deploy nooit blindelings. ::: ## Veelgemaakte fouten - **Te weinig context geven.** "Schrijf een loginformulier" geeft onbruikbare output. Specificeer het framework, de authenticatiemethode en de validatie-eisen. - **Geen foutafhandeling vragen.** Standaard genereert het model happy-path-code. Vraag expliciet om foutafhandeling. - **Tests vergeten.** Code zonder tests is onvolledig. Maak tests een vast onderdeel van elke codeprompt. - **Deprecated API's.** Het model kan verouderde bibliotheekversies kennen. Specificeer de versie en controleer de output op verouderde aanroepen. ## Welk model kies je? Het modellandschap verandert snel, dus pin je niet vast op één naam. Anno medio 2026 leveren de nieuwste modellen van de grote aanbieders allemaal sterke code: Google Gemini (de 3.x-reeks), Anthropic Claude (de Opus- en Sonnet-reeks) en OpenAI GPT (de 5.x-reeks). Voor Google Workspace en Vertex AI is Gemini de meest voor de hand liggende keuze, omdat het direct geïntegreerd is en via Vertex AI Model Garden ook Claude beschikbaar is. Behandel modellen als een gereedschapskist en toets met je eigen use cases welk model voor jouw taal en codebase het beste werkt. :::tip title="Toets op je eigen code" Benchmarks zeggen iets, maar niet alles. Maak een kleine set representatieve taken uit je eigen project (een functie, een test, een refactor) en draai die door twee of drie modellen. Het model dat jouw stijl en stack het beste begrijpt, wint, ongeacht de ranglijst. ::: :::faq ### Is AI-gegenereerde code direct productie-ready? Zelden zonder review. AI-code is een uitstekend startpunt dat veel tijd bespaart, maar vereist altijd menselijke controle op correctheid, beveiliging en stijlconformiteit voordat je hem deployt. ### Welk model is het beste voor codegeneratie? Dat verandert per kwartaal. De nieuwste modellen van Google (Gemini), Anthropic (Claude) en OpenAI (GPT) presteren anno 2026 allemaal sterk op code. Binnen Google Workspace en Vertex AI ligt Gemini het meest voor de hand. Test verschillende modellen met je eigen taken in plaats van blind op een ranglijst te vertrouwen. ### Hoe ga ik om met vertrouwelijke bedrijfscode in prompts? Wees voorzichtig. Stuur geen gevoelige code naar externe diensten zonder dat je het privacy- en databeleid kent en intern toestemming hebt. Voor Google Workspace en Vertex AI gelden enterprise-databescherming en dataresidentie-opties die je code afschermen van training. Voor zeer gevoelige code zijn afgeschermde of on-premise modellen een optie. ### Kan ik hele bestanden laten genereren? Ja, maar structureer je prompt dan heel precies. Geef de gewenste bestandsstructuur, alle afhankelijkheden en een duidelijke specificatie mee. Grotere bestanden leveren doorgaans meer fouten op dan kleine, afgebakende functies, dus knip waar mogelijk op in stukken. ### Waarom geeft het model verouderde API-aanroepen? Een model kent de bibliotheekversies tot aan zijn trainingsdatum en weet niet automatisch welke versie jij gebruikt. Noem de exacte versie in je prompt en controleer de output op deprecated calls, zeker bij snel evoluerende SDK's. ::: Codegeneratie is een van de meest productiviteitsverhogende toepassingen van AI. Met precieze prompts, duidelijke specificaties en consequente review verminder je de tijd voor routinematige codetaken aanzienlijk.