Skip to content

Latest commit

 

History

History
472 lines (307 loc) · 48.1 KB

File metadata and controls

472 lines (307 loc) · 48.1 KB

Grundläggande om Prompt Engineering

Prompt Engineering Fundamentals

Introduktion

Den här modulen täcker viktiga begrepp och tekniker för att skapa effektiva prompts i generativa AI-modeller. Hur du formulerar din prompt till en LLM spelar också roll. En noggrant utformad prompt kan ge bättre svarskvalitet. Men vad betyder egentligen termer som prompt och prompt engineering? Och hur förbättrar jag prompt-inputen som jag skickar till LLM? Det är de frågor vi ska försöka besvara i detta kapitel och nästa.

Generativ AI kan skapa nytt innehåll (t.ex. text, bilder, ljud, kod osv.) som svar på användarförfrågningar. Det görs med hjälp av Large Language Models som OpenAI:s GPT ("Generative Pre-trained Transformer")-serie, som är tränade för att använda naturligt språk och kod.

Användare kan nu interagera med dessa modeller via välbekanta gränssnitt som chatt, utan att behöva teknisk expertis eller utbildning. Modellerna är prompt-baserade – användare skickar in en textinput (prompt) och får tillbaka AI:s svar (completion). De kan sedan "chatta med AI:n" iterativt, i flerstegs-konversationer, och förfina sin prompt tills svaret motsvarar deras förväntningar.

"Prompts" blir nu det primära programmeringsgränssnittet för generativa AI-appar, som talar om för modellerna vad de ska göra och påverkar kvaliteten på de svar som returneras. "Prompt Engineering" är ett snabbt växande forskningsområde som fokuserar på design och optimering av prompts för att leverera konsekventa och kvalitativa svar i stor skala.

Lärandemål

I denna lektion lär vi oss vad Prompt Engineering är, varför det är viktigt och hur vi kan skapa mer effektiva prompts för en given modell och applikationsmål. Vi kommer att förstå kärnbegrepp och bästa praxis för prompt engineering – och lära oss om en interaktiv Jupyter Notebook-"sandbox" där vi kan se dessa koncept tillämpas på verkliga exempel.

I slutet av lektionen ska vi kunna:

  1. Förklara vad prompt engineering är och varför det är viktigt.
  2. Beskriva komponenterna i en prompt och hur de används.
  3. Lära oss bästa praxis och tekniker för prompt engineering.
  4. Tillämpa inlärda tekniker på verkliga exempel, med hjälp av en OpenAI-endpoint.

Nyckelbegrepp

Prompt Engineering: Praktiken att designa och förfina input för att styra AI-modeller mot att producera önskade resultat.
Tokenisering: Processen att omvandla text till mindre enheter, kallade tokens, som en modell kan förstå och bearbeta.
Instruction-Tuned LLMs: Stora språkmodeller (LLMs) som finjusterats med specifika instruktioner för att förbättra svarens noggrannhet och relevans.

Lärande Sandbox

Prompt engineering är för närvarande mer en konst än en exakt vetenskap. Det bästa sättet att förbättra vår intuition är att övning ger färdighet och att använda en trial-and-error-metod som kombinerar domänkunskap med rekommenderade tekniker och modell-specifika optimeringar.

Jupyter Notebook som följer med denna lektion erbjuder en sandbox-miljö där du kan prova det du lär dig – löpande eller som en del av kodutmaningen i slutet. För att köra övningarna behöver du:

  1. En Azure OpenAI API-nyckel – tjänstens endpoint för en distribuerad LLM.
  2. En Python-runtime – där Notebook kan köras.
  3. Lokala miljövariablerslutför SETUP stegen nu för att vara redo.

Notebooken innehåller startövningar – men du uppmuntras att lägga till egna Markdown- (beskrivning) och Code- (promptförfrågningar) sektioner för att testa fler exempel eller idéer – och bygga din intuition för promptdesign.

Illustrerad guide

Vill du få en överblick över vad denna lektion handlar om innan du dyker in? Kolla in denna illustrerade guide som ger dig en känsla för huvudämnena och viktiga insikter att fundera på i varje del. Lektionens färdplan tar dig från att förstå kärnbegrepp och utmaningar till att hantera dem med relevanta prompt engineering-tekniker och bästa praxis. Observera att avsnittet "Avancerade tekniker" i denna guide hänvisar till innehåll som täcks i nästa kapitel i denna kurs.

Illustrerad guide till Prompt Engineering

Vårt startup

Nu ska vi prata om hur detta ämne relaterar till vår startup-mission att föra AI-innovation till utbildning. Vi vill bygga AI-drivna applikationer för personanpassat lärande – så låt oss fundera på hur olika användare av vår applikation kan "designa" prompts:

  • Administratörer kan be AI:n att analysera läroplansdata för att identifiera luckor i täckningen. AI:n kan sammanfatta resultaten eller visualisera dem med kod.
  • Lärare kan be AI:n att generera en lektionsplan för en målgrupp och ett ämne. AI:n kan skapa den personliga planen i ett angivet format.
  • Studenter kan be AI:n att handleda dem i ett svårt ämne. AI:n kan nu guida studenter med lektioner, tips och exempel anpassade efter deras nivå.

Det är bara toppen av isberget. Kolla in Prompts For Education – ett open source-bibliotek med prompts sammanställt av utbildningsexperter – för att få en bredare bild av möjligheterna! Testa att köra några av dessa prompts i sandboxen eller i OpenAI Playground för att se vad som händer!

Vad är Prompt Engineering?

Vi började denna lektion med att definiera Prompt Engineering som processen att designa och optimera textinput (prompts) för att leverera konsekventa och kvalitativa svar (completions) för ett givet applikationsmål och modell. Vi kan se detta som en tvåstegsprocess:

  • designa den initiala prompten för en given modell och mål
  • förfina prompten iterativt för att förbättra svarskvaliteten

Detta är nödvändigtvis en trial-and-error-process som kräver användarens intuition och ansträngning för att nå optimala resultat. Så varför är det viktigt? För att svara på det behöver vi först förstå tre begrepp:

  • Tokenisering = hur modellen "ser" prompten
  • Bas-LLMs = hur grundmodellen "bearbetar" en prompt
  • Instruction-Tuned LLMs = hur modellen nu kan tolka "uppgifter"

Tokenisering

En LLM ser prompts som en sekvens av tokens där olika modeller (eller versioner av en modell) kan tokenisera samma prompt på olika sätt. Eftersom LLMs tränas på tokens (och inte råtext) påverkar hur prompten tokeniseras direkt kvaliteten på det genererade svaret.

För att få en känsla för hur tokenisering fungerar, prova verktyg som OpenAI Tokenizer som visas nedan. Klistra in din prompt – och se hur den omvandlas till tokens, med fokus på hur mellanslag och skiljetecken hanteras. Observera att detta exempel visar en äldre LLM (GPT-3) – så att testa med en nyare modell kan ge ett annat resultat.

Tokenisering

Begrepp: Grundmodeller

När en prompt är tokeniserad är huvudfunktionen för "Base LLM" (eller grundmodellen) att förutsäga nästa token i sekvensen. Eftersom LLMs tränas på enorma textdatamängder har de god förståelse för statistiska samband mellan tokens och kan göra denna förutsägelse med viss säkerhet. Observera att de inte förstår innebörden av orden i prompten eller token; de ser bara ett mönster som de kan "komplettera" med sin nästa förutsägelse. De kan fortsätta förutsäga sekvensen tills användaren avbryter eller någon förutbestämd villkor uppfylls.

Vill du se hur prompt-baserad completion fungerar? Skriv in prompten ovan i Azure OpenAI Studio Chat Playground med standardinställningarna. Systemet är konfigurerat att behandla prompts som informationsförfrågningar – så du bör se ett svar som passar detta sammanhang.

Men vad händer om användaren vill ha något specifikt som uppfyller vissa kriterier eller mål? Här kommer instruction-tuned LLMs in i bilden.

Base LLM Chat Completion

Begrepp: Instruction Tuned LLMs

En Instruction Tuned LLM bygger på grundmodellen och finjusteras med exempel eller input/output-par (t.ex. flerstegs-"meddelanden") som kan innehålla tydliga instruktioner – och AI:s svar försöker följa dessa instruktioner.

Detta använder tekniker som Reinforcement Learning with Human Feedback (RLHF) som kan träna modellen att följa instruktioner och lära sig av feedback så att den producerar svar som är bättre anpassade för praktiska tillämpningar och mer relevanta för användarens mål.

Låt oss prova – gå tillbaka till prompten ovan, men ändra nu systemmeddelandet för att ge följande instruktion som kontext:

Sammanfatta innehållet du får för en elev i årskurs 2. Håll resultatet till ett stycke med 3-5 punkter.

Ser du hur resultatet nu är anpassat för att spegla det önskade målet och formatet? En lärare kan nu direkt använda detta svar i sina presentationer för den klassen.

Instruction Tuned LLM Chat Completion

Varför behöver vi Prompt Engineering?

Nu när vi vet hur prompts bearbetas av LLMs, låt oss prata om varför vi behöver prompt engineering. Svaret ligger i att dagens LLMs har flera utmaningar som gör det svårare att uppnå pålitliga och konsekventa svar utan att lägga ner arbete på promptkonstruktion och optimering. Till exempel:

  1. Modellens svar är stokastiska. Samma prompt kan ge olika svar med olika modeller eller modellversioner. Och det kan till och med ge olika resultat med samma modell vid olika tillfällen. Prompt engineering-tekniker kan hjälpa oss att minimera dessa variationer genom att ge bättre styrning.

  2. Modeller kan hitta på svar. Modeller är förtränade på stora men begränsade dataset, vilket innebär att de saknar kunskap om koncept utanför träningsmaterialet. Som en följd kan de generera svar som är felaktiga, påhittade eller direkt motsäger kända fakta. Prompt engineering hjälper användare att identifiera och minska sådana påhitt, t.ex. genom att be AI:n om källhänvisningar eller resonemang.

  3. Modellernas kapacitet varierar. Nyare modeller eller modellgenerationer har rikare kapaciteter men medför också unika egenheter och kompromisser i kostnad och komplexitet. Prompt engineering kan hjälpa oss att utveckla bästa praxis och arbetsflöden som döljer skillnader och anpassar sig till modell-specifika krav på ett skalbart och smidigt sätt.

Låt oss se detta i praktiken i OpenAI eller Azure OpenAI Playground:

  • Använd samma prompt med olika LLM-distributioner (t.ex. OpenAI, Azure OpenAI, Hugging Face) – såg du variationerna?
  • Använd samma prompt upprepade gånger med samma LLM-distribution (t.ex. Azure OpenAI playground) – hur skiljde sig dessa variationer?

Exempel på påhittade svar

I denna kurs använder vi termen "fabrication" för att beskriva fenomenet där LLMs ibland genererar faktamässigt felaktig information på grund av begränsningar i deras träning eller andra faktorer. Du har kanske också hört detta kallat "hallucinationer" i populära artiklar eller forskningsrapporter. Vi rekommenderar dock starkt att använda "fabrication" som term för att undvika att antropomorfisera beteendet genom att tillskriva en mänsklig egenskap till ett maskindrivet resultat. Detta stärker också Responsible AI-riktlinjer ur ett terminologiskt perspektiv, genom att ta bort termer som kan uppfattas som stötande eller icke-inkluderande i vissa sammanhang.

Vill du få en känsla för hur fabrications fungerar? Tänk på en prompt som instruerar AI:n att generera innehåll för ett icke-existerande ämne (för att säkerställa att det inte finns i träningsdata). Till exempel – jag testade denna prompt:

Lektionplan: Marskriget 2076

Översikt

I denna lektion kommer vi att utforska Marskriget som ägde rum år 2076. Vi kommer att undersöka orsakerna till konflikten, de viktigaste händelserna under kriget, samt dess konsekvenser för mänskligheten och rymdforskningen.

Mål

  • Förstå bakgrunden till Marskriget 2076
  • Identifiera de viktigaste aktörerna och händelserna
  • Analysera krigets påverkan på samhället och teknologin
  • Diskutera lärdomar från konflikten

Material

  • Textdokument om Marskriget 2076
  • Kartor över Mars och jordens kolonier
  • Videoklipp med intervjuer från överlevande och experter
  • Diskussionfrågor

Lektionens gång

1. Introduktion (10 minuter)

  • Kort presentation av Marskriget 2076
  • Visa en tidslinje över viktiga händelser
  • Diskutera varför konflikten uppstod

2. Bakgrund och orsaker (15 minuter)

  • Gå igenom de politiska och ekonomiska faktorerna
  • Beskriv de olika grupperna och deras mål
  • Analysera resursbrist och territoriella tvister

3. Viktiga händelser under kriget (20 minuter)

  • Beskriv de största slagen och strategierna
  • Diskutera teknologiska innovationer som användes
  • Visa kartor för att illustrera rörelser och kontrollområden

4. Konsekvenser och efterspel (15 minuter)

  • Analysera krigets påverkan på Mars och jorden
  • Diskutera förändringar i internationell politik och rymdlagstiftning
  • Reflektera över hur kriget påverkade framtida rymdexpeditioner

5. Diskussion och reflektion (10 minuter)

  • Ställ frågor till eleverna om vad de lärt sig
  • Diskutera möjliga alternativa utfall
  • Uppmuntra eleverna att tänka på hur konflikter kan undvikas i framtiden

Uppgifter

  • Skriv en kort uppsats om en viktig händelse under Marskriget 2076
  • Skapa en presentation om en av de teknologier som utvecklades under kriget
  • Delta i en debatt om krigets rättfärdigande och konsekvenser

Bedömning

  • Aktivt deltagande i diskussioner
  • Kvalitet på skriftliga uppgifter och presentationer
  • Förmåga att analysera och reflektera över historiska händelser

Kommentarer

  • Anpassa materialet efter elevernas förkunskaper
  • Använd visuella hjälpmedel för att öka förståelsen
  • Uppmuntra kritiskt tänkande och källkritik under hela lektionen En webbsökning visade att det fanns fiktiva berättelser (t.ex. TV-serier eller böcker) om marskrig – men inga från 2076. Sunt förnuft säger också att 2076 är i framtiden och därför inte kan kopplas till en verklig händelse.

Så vad händer när vi kör denna prompt med olika LLM-leverantörer?

Svar 1: OpenAI Playground (GPT-35)

Svar 1

Svar 2: Azure OpenAI Playground (GPT-35)

Svar 2

Svar 3: : Hugging Face Chat Playground (LLama-2)

Svar 3

Som väntat ger varje modell (eller modellversion) något olika svar tack vare stokastiskt beteende och variationer i modellens kapacitet. Till exempel riktar sig en modell till en åttondeklassare medan en annan antar att användaren är gymnasieelev. Men alla tre modeller genererade svar som skulle kunna övertyga en oinformerad användare om att händelsen var verklig.

Prompttekniker som metaprompting och temperaturinställning kan till viss del minska modellens fabriceringar. Nya prompttekniska arkitekturer integrerar också nya verktyg och metoder sömlöst i promptflödet för att mildra eller minska några av dessa effekter.

Fallstudie: GitHub Copilot

Låt oss avsluta detta avsnitt med att få en känsla för hur promptteknik används i verkliga lösningar genom att titta på en fallstudie: GitHub Copilot.

GitHub Copilot är din "AI-parprogrammerare" – den omvandlar textpromptar till kodkompletteringar och är integrerad i din utvecklingsmiljö (t.ex. Visual Studio Code) för en sömlös användarupplevelse. Som dokumenterat i bloggsserien nedan baserades den tidigaste versionen på OpenAI Codex-modellen – där ingenjörer snabbt insåg behovet av att finjustera modellen och utveckla bättre prompttekniker för att förbättra kodkvaliteten. I juli lanserade de en förbättrad AI-modell som går bortom Codex för ännu snabbare förslag.

Läs inläggen i ordning för att följa deras läranderesa.

Du kan också bläddra i deras Engineering blog för fler inlägg som det här som visar hur dessa modeller och tekniker tillämpas för att driva verkliga applikationer.


Promptkonstruktion

Vi har sett varför promptteknik är viktigt – nu ska vi förstå hur prompts konstrueras så att vi kan utvärdera olika tekniker för mer effektiv promptdesign.

Grundläggande prompt

Låt oss börja med den grundläggande prompten: en textinmatning som skickas till modellen utan annan kontext. Här är ett exempel – när vi skickar de första orden i USA:s nationalsång till OpenAI:s Completion API fullbordar den omedelbart svaret med de följande raderna, vilket illustrerar det grundläggande prediktionsbeteendet.

Prompt (Inmatning) Komplettering (Utmatning)
Oh say can you see Det låter som att du börjar med texten till "The Star-Spangled Banner", USA:s nationalsång. Den fullständiga texten är ...

Komplex prompt

Nu lägger vi till kontext och instruktioner till den grundläggande prompten. Chat Completion API låter oss bygga en komplex prompt som en samling meddelanden med:

  • Inmatning/utmatningspar som speglar användarens input och assistentens svar.
  • Systemmeddelande som sätter kontext för assistentens beteende eller personlighet.

Förfrågan ser nu ut som nedan, där tokeniseringen effektivt fångar relevant information från kontext och konversation. Att ändra systemkontexten kan nu påverka kvaliteten på kompletteringarna lika mycket som användarens inmatningar.

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?"}
    ]
)

Instruktionsprompt

I exemplen ovan var användarprompten en enkel textfråga som kan tolkas som en informationsförfrågan. Med instruktionsprompter kan vi använda texten för att specificera en uppgift mer detaljerat och ge AI:n bättre vägledning. Här är ett exempel:

Prompt (Inmatning) Komplettering (Utmatning) Instruktionstyp
Write a description of the Civil War returnerade ett enkelt stycke Enkel
Write a description of the Civil War. Provide key dates and events and describe their significance returnerade ett stycke följt av en lista med viktiga datum och beskrivningar Komplex
Write a description of the Civil War in 1 paragraph. Provide 3 bullet points with key dates and their significance. Provide 3 more bullet points with key historical figures and their contributions. Return the output as a JSON file returnerar mer omfattande detaljer i en textruta, formaterad som JSON som du kan kopiera och klistra in i en fil och validera vid behov Komplex. Formaterad.

Primärt innehåll

I exemplen ovan var prompten fortfarande ganska öppen, vilket tillät LLM att avgöra vilken del av dess förtränade dataset som var relevant. Med designmönstret primärt innehåll delas inmatningstexten upp i två delar:

  • en instruktion (åtgärd)
  • relevant innehåll (som påverkar åtgärden)

Här är ett exempel där instruktionen är att "sammanfatta detta i 2 meningar".

Prompt (Inmatning) Komplettering (Utmatning)
Jupiter är den femte planeten från solen och den största i solsystemet. Det är en gasjätte med en massa som är en tusendel av solens, men två och en halv gånger massan av alla andra planeter i solsystemet tillsammans. Jupiter är ett av de ljusaste objekten som är synliga för blotta ögat på natthimlen och har varit känt för forntida civilisationer sedan innan historien skrevs. Den är uppkallad efter den romerska guden Jupiter.[19] När man ser Jupiter från jorden kan den vara tillräckligt ljus för att dess reflekterade ljus ska kasta synliga skuggor,[20] och är i genomsnitt det tredje ljusaste naturliga objektet på natthimlen efter månen och Venus.
Sammanfatta detta i 2 korta meningar
Jupiter, den femte planeten från solen, är den största i solsystemet och är känd för att vara ett av de ljusaste objekten på natthimlen. Uppkallad efter den romerska guden Jupiter, är det en gasjätte vars massa är två och en halv gånger massan av alla andra planeter i solsystemet tillsammans.

Segmentet med primärt innehåll kan användas på olika sätt för att driva mer effektiva instruktioner:

  • Exempel – istället för att tala om för modellen vad den ska göra med en explicit instruktion, ge den exempel på vad som ska göras och låt den dra slutsatser om mönstret.
  • Ledtrådar – följ instruktionen med en "ledtråd" som förbereder kompletteringen och styr modellen mot mer relevanta svar.
  • Mall – detta är upprepbara 'recept' för prompts med platshållare (variabler) som kan anpassas med data för specifika användningsfall.

Låt oss utforska dessa i praktiken.

Använda exempel

Detta är en metod där du använder det primära innehållet för att "mata modellen" med exempel på önskat resultat för en given instruktion och låter den dra slutsatser om mönstret för önskat resultat. Beroende på antalet exempel kan vi ha zero-shot prompting, one-shot prompting, few-shot prompting osv.

Prompten består nu av tre komponenter:

  • En uppgiftsbeskrivning
  • Några exempel på önskat resultat
  • Början på ett nytt exempel (som blir en implicit uppgiftsbeskrivning)
Inlärningstyp Prompt (Inmatning) Komplettering (Utmatning)
Zero-shot "The Sun is Shining". Translate to Spanish "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 =>
Basketball

Notera hur vi behövde ge en explicit instruktion ("Translate to Spanish") i zero-shot prompting, men den härleds i one-shot-exemplet. Few-shot-exemplet visar hur fler exempel gör att modeller kan göra mer exakta slutsatser utan extra instruktioner.

Promptledtrådar

En annan teknik för att använda primärt innehåll är att ge ledtrådar istället för exempel. I detta fall ger vi modellen en knuff i rätt riktning genom att starta den med ett utdrag som speglar önskat svarformat. Modellen "tar ledtråden" och fortsätter i samma stil.

Antal ledtrådar Prompt (Inmatning) Komplettering (Utmatning)
0 Jupiter är den femte planeten från solen och den största i solsystemet. Det är en gasjätte med en massa som är en tusendel av solens, men två och en halv gånger massan av alla andra planeter i solsystemet tillsammans. Jupiter är ett av de ljusaste objekten som är synliga för blotta ögat på natthimlen, och har varit känt för forntida civilisationer sedan innan historien skrevs.

Sammanfatta detta | Jupiter är den största planeten i vårt solsystem och den femte från solen. Det är en gasjätte med en massa som är 1/1000 av solens, men den är tyngre än alla andra planeter tillsammans. Forntida civilisationer har känt till Jupiter länge, och den är lätt synlig på natthimlen. | | 1 | Jupiter är den femte planeten från solen och den största i solsystemet. Det är en gasjätte med en massa som är en tusendel av solens, men två och en halv gånger tyngre än alla andra planeter i solsystemet tillsammans. Jupiter är ett av de ljusstarkaste objekten som är synliga för blotta ögat på natthimlen och har varit känt för forntida civilisationer långt innan historien skrevs ned.
Sammanfatta detta
Det vi lärde oss är att Jupiter | är den femte planeten från solen och den största i solsystemet. Det är en gasjätte med en massa som är en tusendel av solens, men två och en halv gånger tyngre än alla andra planeter tillsammans. Den är lätt synlig för blotta ögat och har varit känd sedan urminnes tider. | | 2 | Jupiter är den femte planeten från solen och den största i solsystemet. Det är en gasjätte med en massa som är en tusendel av solens, men två och en halv gånger tyngre än alla andra planeter i solsystemet tillsammans. Jupiter är ett av de ljusstarkaste objekten som är synliga för blotta ögat på natthimlen och har varit känt för forntida civilisationer långt innan historien skrevs ned.
Sammanfatta detta
Topp 3 fakta vi lärde oss: | 1. Jupiter är den femte planeten från solen och den största i solsystemet.
2. Det är en gasjätte med en massa som är en tusendel av solens...
3. Jupiter har varit synlig för blotta ögat sedan urminnes tider ... | | | | |

Promptmallar

En promptmall är ett fördefinierat recept för en prompt som kan sparas och återanvändas vid behov för att skapa mer konsekventa användarupplevelser i stor skala. I sin enklaste form är det helt enkelt en samling promptexempel som det här från OpenAI som innehåller både de interaktiva promptkomponenterna (användar- och systemmeddelanden) och API-drivna förfrågningsformatet – för att stödja återanvändning.

I en mer komplex form som det här exemplet från LangChain innehåller den platshållare som kan ersättas med data från olika källor (användarinmatning, systemkontext, externa datakällor etc.) för att generera en prompt dynamiskt. Detta gör att vi kan skapa ett bibliotek av återanvändbara prompts som kan användas för att programmässigt driva konsekventa användarupplevelser i stor skala.

Slutligen ligger det verkliga värdet i mallar i möjligheten att skapa och publicera promptbibliotek för vertikala applikationsdomäner – där promptmallen nu är optimerad för att spegla applikationsspecifik kontext eller exempel som gör svaren mer relevanta och korrekta för den riktade användargruppen. Prompts For Edu-arkivet är ett utmärkt exempel på detta tillvägagångssätt, där man samlar ett bibliotek av prompts för utbildningsområdet med fokus på viktiga mål som lektionsplanering, läroplansdesign, handledning av studenter med mera.

Stödjande innehåll

Om vi ser på promptkonstruktion som att ha en instruktion (uppgift) och ett mål (primärt innehåll), så är sekundärt innehåll som ytterligare kontext vi tillhandahåller för att påverka resultatet på något sätt. Det kan vara justeringsparametrar, formateringsinstruktioner, ämnestaxonomier etc. som hjälper modellen att anpassa sitt svar för att passa önskade användarmål eller förväntningar.

Till exempel: Givet en kurskatalog med omfattande metadata (namn, beskrivning, nivå, metadatataggar, instruktör etc.) för alla tillgängliga kurser i läroplanen:

  • kan vi definiera en instruktion för att "sammanfatta kurskatalogen för hösten 2023"
  • vi kan använda det primära innehållet för att ge några exempel på önskat resultat
  • vi kan använda det sekundära innehållet för att identifiera de 5 viktigaste "taggarna" av intresse.

Nu kan modellen ge en sammanfattning i det format som visas av de få exemplen – men om ett resultat har flera taggar kan den prioritera de 5 taggar som identifierats i det sekundära innehållet.


Bästa praxis för prompting

Nu när vi vet hur prompts kan konstrueras kan vi börja fundera på hur vi designar dem för att följa bästa praxis. Vi kan se detta i två delar – att ha rätt inställning och att använda rätt tekniker.

Inställning för prompt engineering

Prompt Engineering är en process med försök och misstag, så håll tre breda vägledande faktorer i åtanke:

  1. Domänförståelse är viktigt. Svarens noggrannhet och relevans beror på den domän där applikationen eller användaren verkar. Använd din intuition och domänkunskap för att anpassa teknikerna ytterligare. Definiera till exempel domänspecifika personligheter i dina systemprompter, eller använd domänspecifika mallar i dina användarprompter. Ge sekundärt innehåll som speglar domänspecifika kontexter, eller använd domänspecifika ledtrådar och exempel för att styra modellen mot bekanta användningsmönster.

  2. Modellförståelse är viktigt. Vi vet att modeller är stokastiska till sin natur. Men modellimplementationer kan också skilja sig åt vad gäller träningsdata (förtränad kunskap), vilka funktioner de erbjuder (t.ex. via API eller SDK) och vilken typ av innehåll de är optimerade för (t.ex. kod vs. bilder vs. text). Förstå styrkor och begränsningar hos den modell du använder och använd den kunskapen för att prioritera uppgifter eller bygga anpassade mallar som är optimerade för modellens kapacitet.

  3. Iteration och validering är viktigt. Modeller utvecklas snabbt, och det gör även teknikerna för prompt engineering. Som domänexpert kan du ha annan kontext eller kriterier för din specifika applikation som kanske inte gäller för den bredare gemenskapen. Använd verktyg och tekniker för prompt engineering för att "komma igång" med promptkonstruktion, iterera sedan och validera resultaten med din egen intuition och domänkunskap. Dokumentera dina insikter och skapa en kunskapsbas (t.ex. promptbibliotek) som kan användas som ny baslinje av andra för snabbare iterationer i framtiden.

Bästa praxis

Låt oss nu titta på vanliga bästa praxis som rekommenderas av OpenAI och Azure OpenAI experter.

Vad Varför
Utvärdera de senaste modellerna. Nya modellgenerationer har sannolikt förbättrade funktioner och kvalitet – men kan också innebära högre kostnader. Utvärdera deras påverkan och fatta sedan beslut om migrering.
Separera instruktioner och kontext Kontrollera om din modell/leverantör definierar avgränsare för att tydligare skilja instruktioner, primärt och sekundärt innehåll. Detta kan hjälpa modeller att tilldela vikt mer exakt till tokens.
Var specifik och tydlig Ge mer detaljer om önskad kontext, resultat, längd, format, stil etc. Detta förbättrar både kvalitet och konsekvens i svaren. Spara recept i återanvändbara mallar.
Var beskrivande, använd exempel Modeller kan svara bättre på en "visa och berätta"-metod. Börja med en zero-shot-metod där du ger en instruktion (men inga exempel) och prova sedan few-shot som förfining, där du ger några exempel på önskat resultat. Använd analogier.
Använd ledtrådar för att starta svar Styr modellen mot önskat resultat genom att ge några inledande ord eller fraser som den kan använda som startpunkt för svaret.
Upprepa vid behov Ibland kan du behöva upprepa dig för modellen. Ge instruktioner före och efter ditt primära innehåll, använd en instruktion och en ledtråd etc. Iterera och validera för att se vad som fungerar.
Ordningen spelar roll I vilken ordning du presenterar information för modellen kan påverka resultatet, även i inlärningsexemplen, på grund av nyhetsbias. Prova olika alternativ för att se vad som fungerar bäst.
Ge modellen en “utväg” Ge modellen ett fallback-svar som den kan använda om den av någon anledning inte kan slutföra uppgiften. Detta kan minska risken för att modellen genererar falska eller påhittade svar.

Som med all bästa praxis, kom ihåg att dina erfarenheter kan variera beroende på modell, uppgift och domän. Använd dessa som en utgångspunkt och iterera för att hitta vad som fungerar bäst för dig. Utvärdera kontinuerligt din prompt engineering-process när nya modeller och verktyg blir tillgängliga, med fokus på skalbarhet och svarskvalitet.

Uppgift

Grattis! Du har nått slutet av lektionen! Det är dags att testa några av de koncept och tekniker vi gått igenom med riktiga exempel!

För vår uppgift kommer vi att använda en Jupyter Notebook med övningar som du kan göra interaktivt. Du kan också utöka Notebooken med egna Markdown- och kodceller för att utforska idéer och tekniker på egen hand.

För att komma igång, fork:a repot och sedan

  • (Rekommenderat) Starta GitHub Codespaces
  • (Alternativt) Klona repot till din lokala enhet och använd det med Docker Desktop
  • (Alternativt) Öppna Notebooken i din föredragna Notebook-miljö.

Nästa steg, konfigurera dina miljövariabler

  • Kopiera filen .env.copy i repots rotmapp till .env och fyll i värdena för AZURE_OPENAI_API_KEY, AZURE_OPENAI_ENDPOINT och AZURE_OPENAI_DEPLOYMENT. Gå tillbaka till Learning Sandbox-sektionen för att lära dig hur.

Nästa, öppna Jupyter Notebook

  • Välj runtime-kärnan. Om du använder alternativ 1 eller 2, välj helt enkelt standard Python 3.10.x-kärnan som tillhandahålls av utvecklingscontainern.

Du är redo att köra övningarna. Observera att det inte finns några rätt eller fel svar här – det handlar om att utforska alternativ genom försök och misstag och bygga intuition för vad som fungerar för en viss modell och applikationsdomän.

För denna anledning finns inga kodlösningsavsnitt i denna lektion. Istället kommer Notebooken att ha Markdown-celler med titeln "Min lösning:" som visar ett exempel på output för referens.

Kunskapskontroll

Vilken av följande är en bra prompt som följer rimliga bästa praxis?

  1. Visa mig en bild på en röd bil
  2. Visa mig en bild på en röd bil av märket Volvo och modellen XC90 parkerad vid en klippa med solen som går ner
  3. Visa mig en bild på en röd bil av märket Volvo och modellen XC90

Svar: 2, det är den bästa prompten eftersom den ger detaljer om "vad" och går in på specifika detaljer (inte bara vilken bil som helst utan ett specifikt märke och modell) och den beskriver även den övergripande miljön. 3 är näst bäst eftersom den också innehåller mycket beskrivning.

🚀 Utmaning

Se om du kan använda "ledtråds"-tekniken med prompten: Fyll i meningen "Visa mig en bild på en röd bil av märket Volvo och ". Vad svarar den med, och hur skulle du förbättra det?

Bra jobbat! Fortsätt din lärande

Vill du lära dig mer om olika koncept inom Prompt Engineering? Gå till sidan för fortsatt lärande för att hitta fler bra resurser om detta ämne.

Gå vidare till Lektion 5 där vi tittar på avancerade prompting-tekniker!

Ansvarsfriskrivning:
Detta dokument har översatts med hjälp av AI-översättningstjänsten Co-op Translator. Även om vi strävar efter noggrannhet, vänligen observera att automatiska översättningar kan innehålla fel eller brister. Det ursprungliga dokumentet på dess modersmål bör betraktas som den auktoritativa källan. För kritisk information rekommenderas professionell mänsklig översättning. Vi ansvarar inte för några missförstånd eller feltolkningar som uppstår vid användning av denna översättning.