Prompt engineering

Artikel
Prompt engineering is het creatieve proces van het schrijven van een instructie (prompt) die het model de gewenste uitkomst laat genereren. Hierbij worden de model weights niet gewijzigd, zoals dat wel gebeurt bij finetuning (post-training).
Prompting is de meest toegankelijke methode om vol gebruik te maken van het potentieel van een model. Daarom loont het om deze methode volledig te benutten voordat je overgaat op een andere techniek zoals finetuning, waar veel meer resources voor nodig zijn.
Juist omdat het schrijven van prompts zo toegankelijk lijkt, ligt de valkuil op de loer om te denken dat het niet zoveel om het lijf heeft. Dat is een misverstand. Veel mensen denken dat het niet meer is dan een beetje schrijven en zoeken naar de juiste woorden en formuleringen.
Het is relatief makkelijk om een prompt te schrijven; effectieve prompts schrijven is een veel grotere uitdaging. Zie het als een ontwikkelproces: er zit wel degelijk een engineeringaspect aan, namelijk systematisch experimenteren en evalueren. Daarvoor heb je onder andere nodig:
- Statistiek
- Engineering
- Kennis van machine learning
- Het goed vastleggen van de resultaten van je experimenten met verschillende prompts
- Datasetbeheer en -curatie
Een prompt bestaat over het algemeen uit de volgende onderdelen:
- Taakomschrijving: wat wil je dat het model gaat doen? Welke rol moet het model aannemen?
- Voorbeelden van hoe deze taak uitgevoerd moet worden.
- De taak: de concrete taak die je het model wilt laten uitvoeren.
- Context: de informatie die het model nodig heeft om de taak uit te voeren.
Het moet voor het model duidelijk zijn wat de instructies en criteria zijn, anders wordt het moeilijk om ze goed op te volgen.
Hoeveel engineering er nodig is, hangt af van hoe robuust het model is. Als een kleine verandering in de prompt grote veranderingen in de uitkomst geeft, is het model weinig robuust en loont het om veel aandacht aan dit proces te besteden.
In-context learning: zero-shot en few-shot
Dat een model leert via de prompt, heet in-context learning. AI-modellen kunnen leren van voorbeelden die in de prompt worden meegegeven, ook als het model deze data tijdens de training nooit heeft gezien. Dat is een heel waardevolle eigenschap.
Ieder voorbeeld dat je meegeeft, heet een shot. Leren aan de hand van een paar voorbeelden noem je few-shot learning; geef je geen voorbeelden mee, dan is het zero-shot learning.
Door te experimenteren met het aantal voorbeelden kun je een beeld krijgen van hoeveel shots er nodig zijn voor een waardevol resultaat.
Over het algemeen kun je zeggen dat few-shot learning een beter resultaat oplevert dan zero-shot learning. Dit geldt des te meer naarmate de toepassing meer domeinspecifieke kennis vraagt, zoals in de medische of juridische wereld. Bij de nieuwste modellen wordt het verschil wel kleiner: die volgen instructies vaak ook zonder voorbeelden goed.
Prompt en context
Wat is het verschil? Daarover zijn de meningen verdeeld. Chip Huyen hanteert in het boek AI Engineering de volgende definitie:
- Prompt is de gehele tekst die als input voor het model wordt gebruikt: system prompt + user prompt.
- Context verwijst naar de informatie die aan het model wordt gegeven om een taak uit te voeren.
System prompt en user prompt
Grofweg zou je kunnen zeggen dat de system prompt de taakomschrijving is en de user prompt de taak. Een onderdeel dat je vaak ziet in een system prompt is een rolomschrijving, bijvoorbeeld “Neem de rol aan van een belastingadviseur.” Een user prompt is dan bijvoorbeeld: “Kun je me helpen met de inkomstenbelasting van dit jaar?”
Vaak wordt de system prompt gedefinieerd door de makers van de applicatie en de user prompt door de gebruikers van die applicatie.
Voordat deze prompts het model ingaan, wordt alles samengevoegd tot één grote prompt:
system prompt + user prompt = prompt
Op de vraag “Hoeveel is 2 + 2?” zou dat er bijvoorbeeld zo uit kunnen zien:
prompt = “Neem de rol aan van een calculator.” + “Hoeveel is 2 + 2?”
De instructies in de system prompt zijn gelijk voor alle vragen, terwijl de context per vraag verschilt. In het rekenvoorbeeld is geen context nodig, maar bij een klantenservice wel:
| Tekst | Plek | Wat is het? |
|---|---|---|
| “Je bent een behulpzame medewerker van de klantenservice van een webwinkel.” | System prompt | Taakomschrijving |
| “Kan ik deze schoenen nog retourneren?” | User prompt | De concrete taak |
| Het retourbeleid en de bestelgegevens van de klant | User prompt | Context |
Best practices voor prompt engineering
Anthropic en OpenAI hebben allebei een gids met best practices gepubliceerd (Anthropic, OpenAI). De belangrijkste adviezen:
- Schrijf duidelijke en expliciete instructies, zonder dubbelzinnigheden.
- Vraag het model een rol aan te nemen, oftewel een persona.
- Geef voorbeelden (few-shot).
- Specificeer in welk format je het antwoord wilt hebben.
- Geef voldoende context.
- Breek complexe taken op in kleinere taken.
- Geef het model tijd om na te denken:
- Chain of Thought (CoT): laat het model stap voor stap redeneren voordat het antwoord geeft.
- Self-critique: laat het model het eigen antwoord kritisch nakijken en verbeteren.
- Verbeter je prompts regelmatig en pas ze aan op basis van voortschrijdend inzicht.
Tools voor prompt engineering
Er zijn ook tools die je helpen prompts te bouwen of automatisch te verbeteren:
- OpenPrompt: een open-source framework voor prompt-learning van Tsinghua University.
- DSPy: een framework van Stanford waarin je prompts als code schrijft en automatisch laat optimaliseren.
- Promptbreeder: een AI-gestuurde prompt-optimizer van Google DeepMind die prompts laat evolueren.
- TextGrad: een AI-gestuurde prompt-optimizer van Stanford die feedback van een taalmodel gebruikt als een soort gradiënt.
Tot slot
Een prompt schrijven is makkelijk, een effectieve prompt schrijven niet. Behandel het als engineering: experimenteer systematisch, leg je resultaten vast en evalueer elke aanpassing. Pas als je de mogelijkheden van prompting echt hebt benut, is het tijd om naar zwaardere technieken zoals finetuning te kijken.
Deze tekst is 100% door mij geschreven. Wel heb ik AI gebruikt om hem na te kijken en correcties te laten doen. De vertaling naar het Engels is ook door AI gedaan; volgens Pangram is die voor 36% door AI geschreven.
Meer artikelen
- Een plugin die bijhoudt wat AI echt kost
- Breng je AI-profiel in kaart
- Wat ik nodig had om verder te komen als softwareontwikkelaar in het AI-tijdperk
- De AI Footprintmeter
- Van code naar klantwaarde: mijn CSPO-traject
- Mijn smaak debuggen: WSET Level 2 behaald
- Euphoria Academy naar een hoger niveau: een nieuwe premium look voor een topsalsaschool
- Van idee tot inschatting: omgaan met de complexiteit van projectoffertes met ChatGPT
- Next.js, Suspense en Supabase ontketend
- Radix toegevoegd aan mijn techstack