Prompt engineering
Gebaseerd op rohitg00/awesome-claude-code-toolkit @ ebdf1d5, licentie Apache-2.0
Dit bestand is door ToolBrain vertaald en inhoudelijk gewijzigd op 2026-08-30, op basis van
prompt-engineering uit rohitg00/awesome-claude-code-toolkit (Apache-2.0), zie
https://github.com/rohitg00/awesome-claude-code-toolkit/blob/ebdf1d596d2cde5c5cceb32177e8d1cf4829e7d9/skills/prompt-engineering/SKILL.md
en ../LICENSES/awesome-claude-code-toolkit-APACHE-2.0.txt.
Een prompt is in feite een specificatie: hoe preciezer je rol, scope, outputformaat en grenzen beschrijft, hoe voorspelbaarder het model reageert. Dit geldt evenzeer voor een prompt die je typt in een chatvenster als voor een system-prompt die vastligt in een n8n-node of een Claude-skill.
Gestructureerde system-prompt
Je bent een senior code-reviewer. Je taak is pull requests analyseren op:
1. Correctheid - logicafouten, edge cases, off-by-one-fouten
2. Security - injectie, authenticatie, data-blootstelling
3. Performance - N+1-queries, onnodige allocaties, ontbrekende indexen
4. Onderhoudbaarheid - naamgeving, complexiteit, testdekking
Reageer per gevonden issue met:
- Ernst: critical | warning | suggestion
- Bestand en regelverwijzing
- Wat er mis is
- Hoe je het oplost (met codevoorbeeld)
Is de code goed geschreven, zeg dat dan kort. Verzin geen problemen.Structureer system-prompts met rol, scope, outputformaat en beperkingen. Wees expliciet over wat het model juist NIET moet doen.
Chain-of-thought
Analyseer deze database-query op performance-issues.
Denk stap voor stap:
1. Identificeer de betrokken tabellen en joins
2. Controleer of er passende indexen bestaan voor de WHERE- en JOIN-condities
3. Zoek naar full table scans of cartesiaanse producten
4. Schat het aantal rijen bij elke stap
5. Stel een concrete index of query-herstructurering voor
Query:
SELECT o.*, u.name, p.title
FROM orders o
JOIN users u ON o.user_id = u.id
JOIN products p ON o.product_id = p.id
WHERE o.created_at > '2024-01-01'
AND u.country = 'US'
ORDER BY o.created_at DESC
LIMIT 50;Chain-of-thought-prompting verbetert de nauwkeurigheid bij redeneertaken doordat het model gedwongen wordt tussenstappen expliciet te maken.
Few-shot voorbeelden
Vertaal natuurlijke taal naar SQL. Volg deze voorbeelden:
Input: "Hoeveel bestellingen zijn er vorige maand geplaatst?"
Output: SELECT COUNT(*) FROM orders WHERE created_at >= DATE_TRUNC('month', CURRENT_DATE - INTERVAL '1 month') AND created_at < DATE_TRUNC('month', CURRENT_DATE);
Input: "Top 5 klanten op basis van totale uitgaven"
Output: SELECT customer_id, SUM(total_amount) AS total_spent FROM orders GROUP BY customer_id ORDER BY total_spent DESC LIMIT 5;
Input: "Producten die nog nooit besteld zijn"
Output: SELECT p.* FROM products p LEFT JOIN order_items oi ON p.id = oi.product_id WHERE oi.id IS NULL;
Vertaal nu:
Input: "Gemiddelde orderwaarde per land voor het afgelopen kwartaal"Geef 3-5 diverse voorbeelden die zowel het standaardgeval als randgevallen laten zien.
Tool use / function calling
{
"tools": [
{
"name": "search_codebase",
"description": "Doorzoek codepatronen in de repository. Gebruik dit om implementaties, gebruik of definities te vinden.",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Regex-patroon of zoekwoord"
},
"file_type": {
"type": "string",
"description": "Bestandsextensie-filter (bijv. 'ts', 'py')"
}
},
"required": ["query"]
}
}
]
}Schrijf tool-beschrijvingen die uitleggen WANNEER je de tool gebruikt, niet alleen wat hij doet.
Prompt-templatepatroon
def build_review_prompt(diff: str, context: str, rules: list[str]) -> str:
rules_text = "\n".join(f"- {rule}" for rule in rules)
return f"""Beoordeel deze code-diff tegen de volgende regels:
{rules_text}
Context over de codebase:
{context}
Te beoordelen diff:{diff}
Antwoord met een JSON-array van bevindingen. Geen issues? Geef een lege array terug.
Elke bevinding: {{"severity": "critical|warning|info", "line": number, "message": "string", "suggestion": "string"}}"""Veelgemaakte fouten
- Vage instructies zoals "wees behulpzaam" of "doe je best".
- Het model vragen "creatief" te zijn terwijl je juist deterministische output nodig hebt.
- Het outputformaat (JSON, markdown, platte tekst) niet expliciet specificeren.
- Te veel losse taken in één prompt proppen.
- Ontkenningen gebruiken ("doe geen X") zonder te zeggen wat wel moet gebeuren.
- Prompts niet testen met adversariële of randgevallen-input.
Checklist
- System-prompt definieert rol, scope, formaat en beperkingen
- Chain-of-thought wordt gebruikt bij meerstaps-redeneertaken
- Few-shot-voorbeelden dekken zowel typische als randgevallen
- Outputformaat is expliciet gespecificeerd (JSON-schema, markdown, etc.)
- Tool-beschrijvingen leggen uit wanneer en waarom je elke tool gebruikt
- Prompts zijn getest met adversariële input
- Temperature en top_p zijn passend ingesteld voor de taak
- Prompt-templates zijn geparametriseerd, geen hardgecodeerde strings
Praktijkvoorbeeld (NL)
Een Nederlandse installatiebedrijf gebruikt een Claude-skill om binnenkomende klantklachten via
WhatsApp automatisch te categoriseren voordat een monteur wordt ingepland. De eerste versie van
de prompt gaf onvoorspelbare resultaten: soms een vrije tekst, soms een opsomming, soms alleen
"urgent". Door de prompt te herschrijven volgens de structuur hierboven — een vaste rol
("je categoriseert storingsmeldingen"), een expliciete lijst met precies vier toegestane
categorieën, en een hard voorgeschreven JSON-outputformaat met velden als categorie,
urgentie en samenvatting — kan de n8n-workflow de output direct parsen en zonder handmatige
tussenstap doorzetten naar de juiste planningsagenda, zonder dat een monteur eerst het bericht
zelf hoeft te lezen en te interpreteren.