Prompt engineering

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:

TekstPlekWat is het?
“Je bent een behulpzame medewerker van de klantenservice van een webwinkel.”System promptTaakomschrijving
“Kan ik deze schoenen nog retourneren?”User promptDe concrete taak
Het retourbeleid en de bestelgegevens van de klantUser promptContext

Best practices voor prompt engineering

Anthropic en OpenAI hebben allebei een gids met best practices gepubliceerd (Anthropic, OpenAI). De belangrijkste adviezen:

  1. Schrijf duidelijke en expliciete instructies, zonder dubbelzinnigheden.
  2. Vraag het model een rol aan te nemen, oftewel een persona.
  3. Geef voorbeelden (few-shot).
  4. Specificeer in welk format je het antwoord wilt hebben.
  5. Geef voldoende context.
  6. Breek complexe taken op in kleinere taken.
  7. Geef het model tijd om na te denken:
    1. Chain of Thought (CoT): laat het model stap voor stap redeneren voordat het antwoord geeft.
    2. Self-critique: laat het model het eigen antwoord kritisch nakijken en verbeteren.
  8. 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:

  1. OpenPrompt: een open-source framework voor prompt-learning van Tsinghua University.
  2. DSPy: een framework van Stanford waarin je prompts als code schrijft en automatisch laat optimaliseren.
  3. Promptbreeder: een AI-gestuurde prompt-optimizer van Google DeepMind die prompts laat evolueren.
  4. 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