Deze module behandelt essentiële concepten en technieken voor het maken van effectieve prompts in generatieve AI-modellen. De manier waarop je je prompt aan een LLM schrijft, maakt ook uit. Een zorgvuldig opgestelde prompt kan een betere kwaliteit van reactie opleveren. Maar wat betekenen termen zoals prompt en prompt engineering precies? En hoe verbeter ik de prompt input die ik naar de LLM stuur? Dit zijn de vragen die we binnen dit hoofdstuk en het volgende zullen proberen te beantwoorden.
Generatieve AI is in staat om nieuwe inhoud te creëren (bijvoorbeeld tekst, afbeeldingen, audio, code enz.) in reactie op gebruikersverzoeken. Dit gebeurt met behulp van Large Language Models zoals de GPT-serie van OpenAI ("Generative Pre-trained Transformer") die getraind zijn voor het gebruik van natuurlijke taal en code.
Gebruikers kunnen nu met deze modellen communiceren via vertrouwde paradigma's zoals chatten, zonder technische kennis of training te hoeven hebben. De modellen zijn prompt-gebaseerd - gebruikers sturen een tekstinvoer (prompt) en krijgen de AI-reactie (completion) terug. Ze kunnen vervolgens iteratief "chatten met de AI", in multi-turn gesprekken, waarbij ze hun prompt verfijnen totdat de reactie aan hun verwachtingen voldoet.
"Prompts" worden nu het primaire programmeersinterface voor generatieve AI-apps, waarmee aan de modellen wordt verteld wat ze moeten doen en die de kwaliteit van de ontvangen reacties beïnvloeden. "Prompt Engineering" is een snelgroeiend studiegebied dat zich richt op het ontwerpen en optimaliseren van prompts om consistente en kwalitatieve reacties op schaal te leveren.
In deze les leren we wat Prompt Engineering is, waarom het belangrijk is en hoe we effectievere prompts kunnen maken voor een bepaald model en applicatiedoel. We begrijpen kernconcepten en best practices voor prompt engineering – en leren over een interactieve Jupyter Notebooks "sandbox"-omgeving waarin we deze concepten toegepast zien op echte voorbeelden.
Aan het eind van deze les kunnen we:
- Uitleggen wat prompt engineering is en waarom het belangrijk is.
- De componenten van een prompt beschrijven en hoe ze worden gebruikt.
- Best practices en technieken voor prompt engineering leren.
- De geleerde technieken toepassen op echte voorbeelden, met behulp van een OpenAI-endpoint.
Prompt Engineering: De praktijk van het ontwerpen en verfijnen van invoer om AI-modellen te sturen naar het produceren van gewenste output. Tokenisatie: Het proces van het omzetten van tekst in kleinere eenheden, tokens genoemd, die een model kan begrijpen en verwerken. Instruction-Tuned LLMs: Large Language Models (LLM's) die zijn fijn afgestemd met specifieke instructies om hun reactienauwkeurigheid en relevantie te verbeteren.
Prompt engineering is momenteel meer kunst dan wetenschap. De beste manier om onze intuïtie te verbeteren is door meer te oefenen en een trial-and-error aanpak te gebruiken die domeinexpertise combineert met aanbevolen technieken en modelspecifieke optimalisaties.
De Jupyter Notebook die bij deze les hoort, biedt een sandbox-omgeving waarin je kunt uitproberen wat je leert – terwijl je bezig bent of als onderdeel van de code-uitdaging aan het einde. Om de oefeningen uit te voeren heb je nodig:
- Een Azure OpenAI API-sleutel – de service-eindpunt voor een gedeployed LLM.
- Een Python-runtime – waarin de Notebook kan worden uitgevoerd.
- Lokale omgevingsvariabelen – voltooi nu de SETUP stappen om klaar te zijn.
De notebook bevat start oefeningen – maar je wordt aangemoedigd om je eigen Markdown (beschrijving) en Code (promptverzoeken) secties toe te voegen om meer voorbeelden of ideeën uit te proberen – en je intuïtie voor promptontwerp verder te ontwikkelen.
Wil je het grote plaatje van wat deze les behandelt zien voordat je begint? Bekijk deze geïllustreerde gids, die je een overzicht geeft van de belangrijkste onderwerpen en de belangrijkste punten om over na te denken bij elk onderwerp. De lesroute leidt je van het begrijpen van de kernconcepten en uitdagingen naar het aanpakken ervan met relevante prompt engineering technieken en best practices. Let op dat de sectie "Geavanceerde Technieken" in deze gids verwijst naar inhoud die wordt behandeld in het volgende hoofdstuk van deze cursus.
Laten we nu bespreken hoe dit onderwerp zich verhoudt tot onze startup-missie om AI-innovatie naar onderwijs te brengen. We willen AI-gestuurde toepassingen bouwen voor gepersonaliseerd leren – dus laten we nadenken over hoe verschillende gebruikers van onze applicatie prompts kunnen "ontwerpen":
- Beheerders kunnen de AI vragen om curriculumgegevens te analyseren om hiaten in de dekking te identificeren. De AI kan resultaten samenvatten of visualiseren met code.
- Docenten kunnen de AI vragen om een lesplan te genereren voor een doelgroep en onderwerp. De AI kan het gepersonaliseerde plan in een opgegeven formaat maken.
- Studenten kunnen de AI vragen om hen te begeleiden in een moeilijk vak. De AI kan studenten nu begeleiden met lessen, hints en voorbeelden die zijn afgestemd op hun niveau.
Dat is nog maar het topje van de ijsberg. Bekijk Prompts For Education – een open-source promptsbibliotheek samengesteld door onderwijsdeskundigen – om een breder beeld te krijgen van de mogelijkheden! Probeer enkele van die prompts uit in de sandbox of in de OpenAI Playground om te zien wat er gebeurt!
We begonnen deze les met het definiëren van Prompt Engineering als het proces van het ontwerpen en optimaliseren van tekstinvoer (prompts) om consistente en kwalitatieve reacties (completions) te leveren voor een bepaald applicatiedoel en model. We kunnen dit zien als een 2-stappenproces:
- het ontwerpen van de initiële prompt voor een gegeven model en doel
- het iteratief verfijnen van de prompt om de kwaliteit van de reactie te verbeteren
Dit is per definitie een trial-and-error proces dat gebruikersintuïtie en inspanning vereist om optimale resultaten te behalen. Dus waarom is het belangrijk? Om die vraag te beantwoorden moeten we eerst drie concepten begrijpen:
- Tokenisatie = hoe het model de prompt "ziet"
- Basale LLMs = hoe het funderingsmodel een prompt "verwerkt"
- Instruction-Tuned LLMs = hoe het model nu "taken" kan zien
Een LLM ziet prompts als een sequentie van tokens waarbij verschillende modellen (of versies van een model) dezelfde prompt op verschillende manieren kunnen tokeniseren. Omdat LLMs getraind zijn op tokens (en niet op ruwe tekst), heeft de manier waarop prompts worden getokeniseerd direct invloed op de kwaliteit van de gegenereerde reactie.
Om een intuïtie te krijgen voor hoe tokenisatie werkt, probeer tools zoals de OpenAI Tokenizer hieronder weergegeven. Kopieer je prompt erin – en zie hoe die wordt omgezet in tokens, let op hoe witruimtekarakters en leestekens worden behandeld. Merk op dat dit voorbeeld een ouder LLM-model (GPT-3) toont – bij het proberen met een nieuwer model kan een ander resultaat verschijnen.
Zodra een prompt is getokeniseerd, is de primaire functie van de "Base LLM" (of funderingsmodel) het voorspellen van het volgende token in die sequentie. Omdat LLMs getraind zijn op enorme tekstdatasets, hebben ze een goed gevoel voor de statistische relaties tussen tokens en kunnen ze die voorspelling met enige zekerheid maken. Let op dat ze de betekenis van de woorden in de prompt of het token niet begrijpen; ze zien alleen een patroon dat ze kunnen "voltooien" met hun volgende voorspelling. Ze kunnen doorgaan met het voorspellen van de reeks totdat het wordt beëindigd door gebruikersinterventie of een vooraf bepaald criterium.
Wil je zien hoe prompt-gebaseerde completion werkt? Voer de bovenstaande prompt in Azure OpenAI Studio Chat Playground in met de standaardinstellingen. Het systeem is geconfigureerd om prompts als informatieverzoeken te behandelen – dus je zou een completion moeten zien die aan deze context voldoet.
Maar wat als de gebruiker iets specifieks wil zien dat aan bepaalde criteria of een taakdoel voldoet? Dan komen instruction-tuned LLMs in beeld.
Een Instruction Tuned LLM begint met het funderingsmodel en verfijnt het met voorbeelden of invoer-/uitvoerkoppels (bijv. multi-turn "berichten") die duidelijke instructies kunnen bevatten – en de reactie van de AI probeert die instructie te volgen.
Dit gebruikt technieken zoals Reinforcement Learning met Human Feedback (RLHF) die het model trainen om instructies te volgen en van feedback te leren zodat het reacties produceert die beter geschikt zijn voor praktische toepassingen en relevanter zijn voor gebruikersdoelen.
Laten we het proberen – herhaal de prompt hierboven, maar verander nu het systeembericht om de volgende instructie als context te geven:
Vat de inhoud samen die je krijgt voor een leerling van groep 4. Houd het resultaat bij één alinea met 3-5 opsommingstekens.
Zie je hoe het resultaat nu is afgestemd op het gewenste doel en formaat? Een docent kan deze reactie direct gebruiken in hun dia’s voor die klas.
Nu we weten hoe prompts door LLMs worden verwerkt, laten we het hebben over waarom we prompt engineering nodig hebben. Het antwoord ligt in het feit dat huidige LLMs een aantal uitdagingen hebben die het moeilijker maken om betrouwbare en consistente completions te bereiken zonder inspanning in promptconstructie en -optimalisatie. Bijvoorbeeld:
-
Modelreacties zijn stochastisch. De zelfde prompt zal waarschijnlijk verschillende reacties opleveren bij verschillende modellen of modelversies. En het kan zelfs verschillende resultaten geven met hetzelfde model op verschillende momenten. Prompt engineering technieken kunnen ons helpen deze variaties te minimaliseren door betere afbakening.
-
Modellen kunnen reacties verzinnen. Modellen zijn vooraf getraind met grote maar beperkte datasets, wat betekent dat ze geen kennis hebben over concepten buiten die trainingsscope. Daardoor kunnen ze completions produceren die onjuist, verzonnen of zelfs direct tegenstrijdig zijn aan bekende feiten. Prompt engineering technieken helpen gebruikers zulk verzinnen te herkennen en te beperken, bijvoorbeeld door AI om citaties of redenering te vragen.
-
Modelcapaciteiten variëren. Nieuwere modellen of generaties hebben rijkere mogelijkheden, maar brengen ook unieke eigenaardigheden en afwegingen in kosten en complexiteit mee. Prompt engineering kan ons helpen best practices en workflows te ontwikkelen die verschillen abstraheren en zich aanpassen aan modelspecifieke eisen op schaalbare, naadloze manieren.
Laten we dit in actie zien in de OpenAI of Azure OpenAI Playground:
- Gebruik dezelfde prompt met verschillende LLM-implementaties (bijv. OpenAI, Azure OpenAI, Hugging Face) – zag je de variaties?
- Gebruik dezelfde prompt herhaaldelijk met dezelfde LLM-implementatie (bijv. Azure OpenAI playground) – hoe verschilden deze variaties?
In deze cursus gebruiken we de term "fabricatie" om het fenomeen te benoemen waarbij LLMs soms feitelijk onjuiste informatie genereren door beperkingen in hun training of andere beperkingen. Je hebt dit misschien ook gehoord als "hallucinaties" in populaire artikelen of wetenschappelijke publicaties. Wij raden echter sterk aan de term "fabricatie" te gebruiken zodat we het gedrag niet per ongeluk antropomorfiseren door een menselijk kenmerk toe te dichten aan een machinegestuurd resultaat. Dit versterkt ook de richtlijnen voor Verantwoorde AI vanuit terminologieperspectief, waarbij termen worden verwijderd die in sommige contexten als kwetsend of niet-inclusief kunnen worden beschouwd.
Wil je een idee krijgen van hoe fabricaties werken? Denk aan een prompt die de AI opdraagt inhoud te genereren over een niet-bestaand onderwerp (om te zorgen dat het niet in de trainingsdata staat). Bijvoorbeeld – ik probeerde deze prompt:
Prompt: genereer een lesplan over de Mars-oorlog van 2076. Een webzoekopdracht toonde aan dat er fictieve verhalen waren (bijvoorbeeld televisieseries of boeken) over Mars-oorlogen - maar geen in 2076. Gezond verstand vertelt ons ook dat 2076 in de toekomst ligt en daarom niet kan worden geassocieerd met een echte gebeurtenis.
Dus wat gebeurt er als we deze prompt uitvoeren bij verschillende LLM-aanbieders?
Antwoord 1: OpenAI Playground (GPT-35)
Antwoord 2: Azure OpenAI Playground (GPT-35)
Antwoord 3: : Hugging Face Chat Playground (LLama-2)
Zoals verwacht genereren elk model (of modelversie) iets verschillende antwoorden dankzij de stochastische werking en variaties in modelcapaciteit. Bijvoorbeeld, het ene model richt zich op een doelgroep van groep 8 terwijl het andere uitgaat van een middelbare scholier. Maar alle drie de modellen genereerden antwoorden die een niet-ingewijde gebruiker konden overtuigen dat de gebeurtenis echt was.
Prompt engineering technieken zoals metaprompting en temperature-instelling kunnen in zekere mate modelfabricaties verminderen. Nieuwe prompt engineering architecturen integreren ook naadloos nieuwe tools en technieken in de promptstroom, om sommige van deze effecten te beperken of te reduceren.
Laten we deze sectie afsluiten met een indruk van hoe prompt engineering wordt gebruikt in oplossingen uit de praktijk door te kijken naar één Case Study: GitHub Copilot.
GitHub Copilot is jouw "AI Pair Programmer" - het zet tekstprompts om in codeaanvullingen en is geïntegreerd in je ontwikkelomgeving (bijvoorbeeld Visual Studio Code) voor een naadloze gebruikerservaring. Zoals gedocumenteerd in de onderstaande blogserie, was de vroegste versie gebaseerd op het OpenAI Codex-model - waarbij ingenieurs snel inzagen dat het nodig was het model fijn af te stemmen en betere prompt engineering technieken te ontwikkelen om de codekwaliteit te verbeteren. In juli introduceerden ze een verbetermodel van AI dat verder gaat dan Codex voor nog snellere suggesties.
Lees de berichten op volgorde, om hun leerproces te volgen.
- mei 2023 | GitHub Copilot wordt beter in het begrijpen van je code
- mei 2023 | Inside GitHub: werken met de LLM’s achter GitHub Copilot.
- jun 2023 | Hoe schrijf je betere prompts voor GitHub Copilot.
- jul 2023 | .. GitHub Copilot gaat verder dan Codex met verbeterd AI-model
- jul 2023 | Een handleiding voor ontwikkelaars over prompt engineering en LLM’s
- sep 2023 | Hoe bouw je een LLM-applicatie voor bedrijven: lessen van GitHub Copilot
Je kunt ook hun Engineering-blog doorbladeren voor meer berichten zoals deze die laat zien hoe deze modellen en technieken worden toegepast om toepassingen in de praktijk aan te sturen.
We hebben gezien waarom prompt engineering belangrijk is - laten we nu begrijpen hoe prompts worden opgebouwd zodat we verschillende technieken kunnen evalueren voor effectievere promptontwerp.
Laten we beginnen met de basisprompt: een tekstinvoer die naar het model wordt gestuurd zonder verdere context. Hier is een voorbeeld - wanneer we de eerste paar woorden van het Amerikaanse volkslied naar de OpenAI Completion API sturen, vult het meteen de volgende regels aan, wat het basisgedrag van voorspelling illustreert.
| Prompt (Invoer) | Aanvulling (Uitvoer) |
|---|---|
| Oh say can you see | Het klinkt alsof je de tekst begint van "The Star-Spangled Banner", het Amerikaanse volkslied. De volledige tekst is ... |
Laten we nu context en instructies toevoegen aan die basisprompt. De Chat Completion API stelt ons in staat een complexe prompt op te bouwen als een verzameling van berichten met:
- Input/output-paren die de invoer van de gebruiker en de respons van de assistent weerspiegelen.
- Systembericht dat de context voor het gedrag of de persoonlijkheid van de assistent instelt.
De aanvraag heeft nu de onderstaande vorm, waarbij de tokenization effectief relevante informatie uit de context en het gesprek vastlegt. Het veranderen van de systeemcontext kan nu net zo impactvol zijn voor de kwaliteit van de aanvullingen als de door de gebruiker gegeven invoer.
response = openai.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who won the world series in 2020?"},
{"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
{"role": "user", "content": "Where was it played?"}
]
)In bovenstaande voorbeelden was de gebruikersprompt een eenvoudige tekstvraag die kan worden opgevat als een verzoek om informatie. Met instructie prompts kunnen we die tekst gebruiken om een taak gedetailleerder te specificeren, zodat we de AI beter kunnen begeleiden. Hier is een voorbeeld:
| Prompt (Invoer) | Aanvulling (Uitvoer) | Instructietype |
|---|---|---|
| Schrijf een beschrijving van de Amerikaanse Burgeroorlog | leverde een eenvoudige paragraaf op | Eenvoudig |
| Schrijf een beschrijving van de Amerikaanse Burgeroorlog. Geef belangrijke data en gebeurtenissen en beschrijf hun betekenis | leverde een paragraaf gevolgd door een lijst met belangrijke data en beschrijvingen | Complex |
| Schrijf een beschrijving van de Amerikaanse Burgeroorlog in 1 alinea. Geef 3 opsommingstekens met belangrijke data en hun betekenis. Geef nog 3 opsommingen met belangrijke historische figuren en hun bijdragen. Lever de uitvoer als een JSON-bestand | levert uitgebreidere details in een tekstvak, geformatteerd als JSON die je kunt kopiëren en valideren indien nodig | Complex. Geformatteerd. |
In bovenstaande voorbeelden was de prompt nog vrij open, waardoor het LLM zelf kon bepalen welk deel van de vooraf getrainde dataset relevant was. Met het primaire inhoud-ontwerppatroon wordt de invoertekst verdeeld in twee delen:
- een instructie (actie)
- relevante inhoud (die de actie beïnvloedt)
Hier is een voorbeeld waarbij de instructie is "vat dit samen in 2 zinnen".
| Prompt (Invoer) | Aanvulling (Uitvoer) |
|---|---|
| Jupiter is de vijfde planeet vanaf de zon en de grootste in het zonnestelsel. Het is een gasreus met een massa van een duizendste van die van de zon, maar tweeënhalf keer die van alle andere planeten in het zonnestelsel samen. Jupiter is een van de helderste objecten die met het blote oog aan de nachtelijke hemel zichtbaar is, en is bekend bij oude beschavingen sinds vóór de geschreven geschiedenis. Het is genoemd naar de Romeinse god Jupiter.[19] Wanneer vanaf de aarde bekeken, kan Jupiter helder genoeg zijn om schaduwen te werpen door weerkaatst licht,[20] en is gemiddeld het derde helderste natuurlijke object aan de nachtelijke hemel na de maan en Venus. Vat dit samen in 2 korte zinnen |
Jupiter, de vijfde planeet vanaf de zon, is de grootste in het zonnestelsel en staat bekend als een van de helderste objecten aan de nachtelijke hemel. Genoemd naar de Romeinse god Jupiter, is het een gasreus met een massa die tweeënhalf keer die van alle andere planeten in het zonnestelsel samen is. |
Het primaire inhoudsegment kan op verschillende manieren worden gebruikt om effectievere instructies aan te sturen:
- Voorbeelden - in plaats van het model met een expliciete instructie te vertellen wat het moet doen, geef je voorbeelden van wat het moet doen en laat het de patroon afleiden.
- Signaleringen - voeg na de instructie een "signaal" toe dat de aanvulling voorbereidt en het model richting meer relevante antwoorden leidt.
- Templates - dit zijn herhaalbare 'recepten' voor prompts met aanduidingen (variabelen) die je kunt aanpassen met gegevens voor specifieke gebruikssituaties.
Laten we deze in actie verkennen.
Dit is een benadering waarbij je de primaire inhoud gebruikt om het model wat voorbeelden van de gewenste uitvoer te “voeden” voor een gegeven instructie, en het laat afleiden wat het patroon voor die uitvoer is. Afhankelijk van het aantal gegeven voorbeelden kunnen we onderscheid maken tussen zero-shot, one-shot, few-shot prompting enzovoort.
De prompt bestaat nu uit drie componenten:
- een taakbeschrijving
- een paar voorbeelden van de gewenste uitvoer
- het begin van een nieuw voorbeeld (dat een impliciete taakbeschrijving wordt)
| Leer Type | Prompt (Invoer) | Aanvulling (Uitvoer) |
|---|---|---|
| Zero-shot | "The Sun is Shining". Vertaal naar Spaans | "El Sol está brillando". |
| One-shot | "The Sun is Shining" => ""El Sol está brillando". "It's a Cold and Windy Day" => |
"Es un día frío y ventoso". |
| Few-shot | The player ran the bases => Baseball The player hit an ace => Tennis The player hit a six => Cricket The player made a slam-dunk => |
Basketbal |
Merk op dat we bij zero-shot prompting een expliciete instructie moesten geven ("Vertaal naar Spaans"), maar dat die wordt afgeleid in het one-shot voorbeeld. Het few-shot voorbeeld laat zien hoe het toevoegen van meer voorbeelden modellen in staat stelt nauwkeurigere afleidingen te maken zonder extra instructies.
Een andere techniek voor het gebruik van primaire inhoud is het geven van signaleringen in plaats van voorbeelden. In dit geval geven we het model een duwtje de goede richting op door met een fragment te beginnen dat het gewenste antwoordformaat weerspiegelt. Het model "pakt de hint" op en gaat in die stijl verder.
| Aantal signaleringen | Prompt (Invoer) | Aanvulling (Uitvoer) |
|---|---|---|
| 0 | Jupiter is de vijfde planeet vanaf de zon en de grootste in het zonnestelsel. Het is een gasreus met een massa van een duizendste van die van de zon, maar tweeënhalf keer die van alle andere planeten in het zonnestelsel samen. Jupiter is een van de helderste objecten die met het blote oog aan de nachtelijke hemel zichtbaar is, en is bekend bij oude beschavingen sinds vóór de geschreven geschiedenis. Vat dit samen |
Jupiter is de grootste planeet in ons zonnestelsel en de vijfde vanaf de zon. Het is een gasreus met een massa van 1/1000ste van de zon, maar zwaarder dan alle andere planeten samen. Oude beschavingen kennen Jupiter al lang, en het is makkelijk zichtbaar aan de nachtelijke hemel.. |
| 1 | Jupiter is de vijfde planeet vanaf de Zon en de grootste in het zonnestelsel. Het is een gasreus met een massa van een duizendste van die van de Zon, maar tweeënhalf keer die van alle andere planeten in het zonnestelsel samen. Jupiter is een van de helderste objecten die met het blote oog zichtbaar zijn aan de nachtelijke hemel en is bekend bij oude beschavingen vanaf vóór de geschreven geschiedenis. Vat dit samen Wat we geleerd hebben is dat Jupiter |
de vijfde planeet vanaf de Zon is en de grootste in het zonnestelsel. Het is een gasreus met een massa van een duizendste van die van de Zon, maar tweeënhalf keer die van alle andere planeten samen. Het is gemakkelijk met het blote oog zichtbaar en is sinds de oudheid bekend. |
| 2 | Jupiter is de vijfde planeet vanaf de Zon en de grootste in het zonnestelsel. Het is een gasreus met een massa van een duizendste van die van de Zon, maar tweeënhalf keer die van alle andere planeten in het zonnestelsel samen. Jupiter is een van de helderste objecten die met het blote oog zichtbaar zijn aan de nachtelijke hemel en is bekend bij oude beschavingen vanaf vóór de geschreven geschiedenis. Vat dit samen Top 3 feiten die we hebben geleerd: |
1. Jupiter is de vijfde planeet vanaf de Zon en de grootste in het zonnestelsel. 2. Het is een gasreus met een massa van een duizendste van die van de Zon... 3. Jupiter is sinds de oudheid met het blote oog zichtbaar ... |
Een prompttemplate is een vooraf gedefinieerd recept voor een prompt dat kan worden opgeslagen en hergebruikt indien nodig, om meer consistente gebruikservaringen op schaal te stimuleren. In de eenvoudigste vorm is het gewoon een verzameling promptvoorbeelden zoals dit voorbeeld van OpenAI dat zowel de interactieve promptcomponenten (gebruikers- en systeemberichten) als het API-gestuurde aanvraagformaat bevat – ter ondersteuning van hergebruik.
In zijn complexere vorm, zoals dit voorbeeld van LangChain, bevat het plaatsaanduidingen die kunnen worden vervangen door gegevens uit verschillende bronnen (gebruikersinvoer, systeemcontext, externe gegevensbronnen, enz.) om een prompt dynamisch te genereren. Dit stelt ons in staat om een bibliotheek van herbruikbare prompts te maken die kunnen worden gebruikt om consistente gebruikerservaringen programmeerbaar op schaal aan te sturen.
Ten slotte ligt de echte waarde van templates in het vermogen om promptbibliotheken te creëren en te publiceren voor verticale toepassingsdomeinen – waar de prompttemplate nu geoptimaliseerd is om context of voorbeelden die toepassingsspecifiek zijn weer te geven, waardoor de reacties relevanter en accurater worden voor het gerichte gebruikerspubliek. De Prompts For Edu repository is een uitstekend voorbeeld van deze benadering, die een bibliotheek van prompts voor het onderwijsdomein samenstelt met nadruk op belangrijke doelstellingen zoals lesplanning, curriculumontwerp, studentenbegeleiding, enzovoort.
Als we nadenken over promptconstructie als het hebben van een instructie (taak) en een doel (primaire inhoud), dan is secundaire inhoud als extra context die we bieden om de output op een bepaalde manier te beïnvloeden. Dit kunnen afstemmingsparameters, formatteringsinstructies, onderwerp-taxonomieën, enzovoort zijn die het model helpen om zijn antwoord af te stemmen op de gewenste gebruikersdoelen of -verwachtingen.
Bijvoorbeeld: Gegeven een cursuscatalogus met uitgebreide metadata (naam, beschrijving, niveau, metadatapunten, docent, enz.) over alle beschikbare cursussen in het curriculum:
- kunnen we een instructie definiëren om "de cursuscatalogus voor herfst 2023 samen te vatten"
- kunnen we de primaire inhoud gebruiken om een paar voorbeelden van de gewenste output te geven
- kunnen we de secundaire inhoud gebruiken om de top 5 "tags" van belang te identificeren.
Nu kan het model een samenvatting geven in het formaat dat wordt getoond door de paar voorbeelden – maar als een resultaat meerdere tags heeft, kan het prioriteit geven aan de 5 tags die in de secundaire inhoud zijn aangegeven.
Nu we weten hoe prompts kunnen worden geconstrueerd, kunnen we gaan nadenken over hoe we ze kunnen ontwerpen volgens best practices. We kunnen dit in twee delen bekijken – het juiste mindset hebben en de juiste technieken toepassen.
Prompt Engineering is een proces van trial-and-error, dus houd drie brede richtlijnen in gedachten:
-
Domeinkennis is belangrijk. De nauwkeurigheid en relevantie van het antwoord is een functie van het domein waarin de applicatie of gebruiker opereert. Pas je intuïtie en domeinexpertise toe om technieken verder aan te passen. Definieer bijvoorbeeld domeinspecifieke persoonlijkheden in je systeem-prompts, of gebruik domeinspecifieke templates in je gebruikersprompts. Bied secundaire inhoud die domeinspecifieke contexten weerspiegelt, of gebruik domeinspecifieke aanwijzingen en voorbeelden om het model naar vertrouwde gebruikspatronen te leiden.
-
Modellbegrip is belangrijk. We weten dat modellen van nature stochastisch zijn. Maar modelimplementaties kunnen ook verschillen in termen van de gebruikte trainingsdataset (vooraf getrainde kennis), de geboden mogelijkheden (b.v. via API of SDK) en het type inhoud waarvoor ze geoptimaliseerd zijn (bijv. code versus afbeeldingen versus tekst). Begrijp de sterke en zwakke punten van het model dat je gebruikt, en gebruik die kennis om taken te prioriteren of aangepaste templates te bouwen die zijn geoptimaliseerd voor de mogelijkheden van het model.
-
Iteratie & Validatie is belangrijk. Modellen evolueren snel, en dat geldt ook voor de technieken voor prompt engineering. Als domeinexpert heb je mogelijk andere context of criteria voor jouw specifieke toepassing, die niet voor de bredere gemeenschap gelden. Gebruik prompt engineering tools & technieken om promptconstructie een “kickstart” te geven, en itereren en valideren de resultaten met je eigen intuïtie en domeinexpertise. Leg je inzichten vast en creëer een kennisdatabase (bijv. promptbibliotheken) die door anderen als nieuwe basislijn kan worden gebruikt voor snellere iteraties in de toekomst.
Bekijk nu veelvoorkomende best practices die door OpenAI en Azure OpenAI beoefenaars worden aanbevolen.
| Wat | Waarom |
|---|---|
| Evalueer de nieuwste modellen. | Nieuwe modelgeneraties hebben waarschijnlijk verbeterde functies en kwaliteit – maar kunnen ook hogere kosten met zich meebrengen. Evalueer ze op impact en maak vervolgens migratiebeslissingen. |
| Scheid instructies & context | Controleer of jouw model/provider afbakeningstekens definieert om instructies, primaire en secundaire inhoud duidelijker te onderscheiden. Dit helpt modellen om gewichten aan tokens nauwkeuriger toe te kennen. |
| Wees specifiek en duidelijk | Geef meer details over de gewenste context, uitkomst, lengte, formaat, stijl enz. Dit verbetert zowel de kwaliteit als de consistentie van reacties. Leg recepten vast in herbruikbare templates. |
| Wees beschrijvend, gebruik voorbeelden | Modellen kunnen beter reageren op een “show and tell”-benadering. Begin met een zero-shot aanpak waar je een instructie geeft (maar zonder voorbeelden) en probeer dan few-shot als verfijning, waarbij je enkele voorbeelden van de gewenste output geeft. Gebruik analogieën. |
| Gebruik aanwijzingen om te starten | Zet het model op weg naar het gewenste resultaat door het een paar leidende woorden of zinnen te geven die het als uitgangspunt kan gebruiken voor het antwoord. |
| Geef het model herhaalde instructies | Soms moet je jezelf herhalen aan het model. Geef instructies vóór en na je primaire inhoud, gebruik een instructie en een aanwijzing, enz. Itereer en valideer om te zien wat werkt. |
| Volgorde is belangrijk | De volgorde waarin je informatie aan het model presenteert kan de output beïnvloeden, zelfs bij de leervoorbeelden, dankzij het recency bias effect. Probeer verschillende opties om te zien wat het beste werkt. |
| Geef het model een “uitweg” | Geef het model een fallback-antwoord dat het kan geven als het om welke reden dan ook de taak niet kan voltooien. Dit kan het aantal valse of gefabriceerde reacties door het model verminderen. |
Zoals bij elke best practice, houd in gedachten dat je ervaring kan variëren afhankelijk van het model, de taak en het domein. Gebruik deze als uitgangspunt en itereren om te vinden wat voor jou het beste werkt. Evalueer je prompt engineering proces continu opnieuw naarmate nieuwe modellen en tools beschikbaar komen, met focus op schaalbaarheid van het proces en kwaliteit van de respons.
Gefeliciteerd! Je bent aan het einde van de les gekomen! Het is tijd om enkele van die concepten en technieken te testen met echte voorbeelden!
Voor onze opdracht gebruiken we een Jupyter Notebook met oefeningen die je interactief kunt afronden. Je kunt het Notebook ook uitbreiden met je eigen Markdown- en Codesecties om ideeën en technieken zelf te verkennen.
- (Aanbevolen) Start GitHub Codespaces
- (Als alternatief) Clone de repo naar je lokale apparaat en gebruik die met Docker Desktop
- (Als alternatief) Open de Notebook met je favoriete Notebook runtime-omgeving.
- Kopieer het bestand
.env.copyin de root van de repo naar.enven vul de waarden voorAZURE_OPENAI_API_KEY,AZURE_OPENAI_ENDPOINTenAZURE_OPENAI_DEPLOYMENTin. Ga terug naar de Learning Sandbox sectie voor instructies.
- Selecteer de runtime kernel. Als je optie 1 of 2 gebruikt, selecteer je simpelweg de standaard Python 3.10.x kernel die wordt geleverd door de dev container.
Je bent klaar om de oefeningen te doen. Let op dat er hier geen juiste en foute antwoorden zijn – het gaat erom opties te verkennen met trial-and-error en intuïtie op te bouwen over wat werkt voor een bepaald model en toepassingsdomein.
Vandaar dat er in deze les geen Code Oplossing segmenten staan. In plaats daarvan bevat het Notebook Markdown-cellen met de titel "Mijn Oplossing:" waarin één voorbeeldoutput als referentie wordt getoond.
Welke van de volgende is een goede prompt die redelijk goede best practices volgt?
- Toon mij een afbeelding van een rode auto
- Toon mij een afbeelding van een rode auto van het merk Volvo en model XC90 geparkeerd bij een klif met de zonsondergang
- Toon mij een afbeelding van een rode auto van het merk Volvo en model XC90
A: 2, dit is de beste prompt omdat het details geeft over "wat" en in detail gaat (niet zomaar een auto maar een specifiek merk en model) en het beschrijft ook de algehele setting. 3 is de volgende beste omdat het ook veel beschrijving bevat.
Bekijk of je de "aanwijzing"-techniek kunt gebruiken met de prompt: Maak de zin af "Toon mij een afbeelding van een rode auto van het merk Volvo en ". Wat antwoordt het, en hoe zou je het verbeteren?
Wil je meer leren over verschillende prompt engineering concepten? Ga naar de vervolgpagina voor leren om andere geweldige bronnen over dit onderwerp te vinden.
Ga door naar Les 5 waar we kijken naar geavanceerde prompting technieken!
Disclaimer: Dit document is vertaald met behulp van de AI-vertalingsservice Co-op Translator. Hoewel we streven naar nauwkeurigheid, dient u er rekening mee te houden dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in de oorspronkelijke taal moet als de gezaghebbende bron worden beschouwd. Voor belangrijke informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling.







