Skip to content

Latest commit

 

History

History
409 lines (255 loc) · 43.6 KB

File metadata and controls

409 lines (255 loc) · 43.6 KB

Osnove izdelave navodil (prompt engineering)

Osnove izdelave navodil (prompt engineering)

Uvod

Ta modul pokriva osnovne koncepte in tehnike za ustvarjanje učinkovitih navodil (promptov) v generativnih modelih umetne inteligence. Pomembno je tudi, kako napišete navodilo za LLM. Skrbno oblikovano navodilo lahko doseže boljšo kakovost odgovora. Kaj pa pravzaprav pomenijo izrazi kot sta navodilo in izdelava navodil (prompt engineering)? In kako izboljšam navodilo (input), ki ga pošljem LLM? To so vprašanja, na katera bomo poskušali odgovoriti v tem in naslednjem poglavju.

Generativna umetna inteligenca je sposobna ustvarjati novo vsebino (npr. besedilo, slike, zvok, kodo itd.) kot odziv na uporabniške zahteve. Dosega to z uporabo velikih jezikovnih modelov (Large Language Models) kot je npr. GPT (»Generative Pre-trained Transformer«) od OpenAI, ki so trenirani za uporabo naravnega jezika in kode.

Uporabniki lahko sedaj z modeli komunicirajo s poznanimi pristopi, kot je klepet, brez potrebe po tehničnem znanju ali usposabljanju. Model temelji na navodilih – uporabniki pošljejo besedilno navodilo (prompt) in prejmejo odgovor umetne inteligence (dopolnitev). Nato lahko iterativno »klepetajo z umetno inteligenco« v večkratnih pogovorih in izpopolnjujejo svoje navodilo, dokler odgovor ne ustreza njihovim pričakovanjem.

»Navodila« so tako postala glavni programski vmesnik za aplikacije generativne umetne inteligence, saj modelom sporočajo, kaj naj naredijo, in vplivajo na kakovost vrnjenih odgovorov. »Izdelava navodil« (Prompt Engineering) je hitro rastoče področje, ki se osredotoča na oblikovanje in optimizacijo navodil, da zagotovi konsistentne in kakovostne odgovore v velikem obsegu.

Cilji učenja

V tej lekciji se bomo naučili, kaj je izdelava navodil (prompt engineering), zakaj je pomembna in kako oblikovati učinkovitejša navodila za določen model in cilje aplikacije. Spoznali bomo osnovne koncepte in najboljše prakse za izdelavo navodil – ter se naučili o interaktivnem okolju Jupyter Notebooka »sandbox«, kjer si lahko ogledamo te koncepte na resničnih primerih.

Na koncu te lekcije bomo znali:

  1. Pojasniti, kaj je izdelava navodil in zakaj je pomembna.
  2. Opisati sestavine navodila in kako se uporabljajo.
  3. Naučiti se najboljših praks in tehnik izdelave navodil.
  4. Uporabiti naučene tehnike na resničnih primerih z uporabo OpenAI endpointa.

Ključni pojmi

Izdelava navodil (Prompt Engineering): Praksa oblikovanja in izboljševanja vhodov za usmerjanje AI modelov k željenim izhodom.
Tokenizacija: Proces pretvarjanja besedila v manjše enote, imenovane tokeni, ki jih model lahko razume in obdeluje.
Navodilo-prilagojeni LLM (Instruction-Tuned LLMs): Veliki jezikovni modeli, ki so dodatno prilagojeni z določenimi navodili, da izboljšajo natančnost in relevantnost odgovorov.

Učno okolje «sandbox»

Izdelava navodil je trenutno bolj umetnost kot znanost. Najboljši način za izboljšanje občutka za to je več vadbe in pristop poskusa in napake, ki združuje strokovno znanje s priporočenimi tehnikami in model-specifičnimi optimizacijami.

Jupyter Notebook, ki spremlja to lekcijo, ponuja sandbox okolje, v katerem lahko preizkušate naučeno – sproti ali kot del kodne izzive na koncu. Za izvajanje vaj boste potrebovali:

  1. Ključ Azure OpenAI API – storitveni endpoint za nameščen LLM.
  2. Python izvedbeno okolje – za izvajanje Notebooka.
  3. Lokalne okoljske spremenljivkeizvedite zdaj POSTOPEK PRIPRAVE, da se pripravite.

Notebook vsebuje začetne vaje – vendar ste vabljeni, da dodajate svoje Markdown (opisne) in Code (zahteve za navodila) odseke, da preizkusite več primerov ali idej – in si tako izgradite občutek za oblikovanje navodil.

Ilustriran vodič

Želite dobiti širši vpogled v vsebino lekcije, preden se poglobite? Oglejte si ta ilustriran vodič, ki vam daje vtis glavnih tem in ključnih spoznanj za razmislek o vsaki izmed njih. Načrt lekcije vas popelje od razumevanja osnovnih konceptov in izzivov do njihovega naslavljanja z ustreznimi tehnikami izdelave navodil in najboljšimi praksami. Upoštevajte, da se oddelek »Napredne tehnike« v tem vodiču nanaša na vsebine, obravnavane v naslednjem poglavju tega učnega načrta.

Ilustriran vodič po izdelavi navodil (prompt engineering)

Naš startup

Zdaj pa povejmo, kako se ta tema povezuje z našo nalogo zagona (startupa) za uvajanje inovacij umetne inteligence v izobraževanje. Želimo graditi aplikacije na osnovi umetne inteligence, ki omogočajo personalizirano učenje – zato razmislimo, kako lahko različni uporabniki naše aplikacije »oblikujejo« navodila:

  • Administratorji lahko zahtevajo od AI, da analizira podatke učnih načrtov in prepozna vrzeli v pokritosti. AI lahko povzame rezultate ali jih vizualizira s kodo.
  • Učitelji lahko AI prosijo, da ustvari načrt učne ure za določeno ciljno skupino in temo. AI lahko zgradi personaliziran načrt v določenem formatu.
  • Učenci lahko AI prosijo, da jim pomaga pri težavni temi. AI jim lahko vodi lekcije, ponudi namige in zaključi s primeri, prilagojenimi njihovi ravni.

To je šele vrh ledene gore. Oglejte si Prompts For Education – odprtokodno knjižnico navodil, urejeno s strani strokovnjakov za izobraževanje – da dobite širši vpogled v možnosti! Poskusite zagnati nekaj takih navodil v sandboxu ali v OpenAI Playgroundu in opazujte rezultate!

Kaj je izdelava navodil (prompt engineering)?

Lekcijo smo začeli z definicijo izdelave navodil (prompt engineering) kot procesa oblikovanja in optimizacije besedilnih vhodov (promptov) za zagotavljanje konsistentnih in kakovostnih odgovorov (doplnitev) za določen cilj aplikacije in model. To lahko razumemo kot dvostopenjski proces:

  • oblikovanje začetnega navodila za določen model in cilj
  • izpopolnjevanje navodila iterativno za izboljšanje kakovosti odgovora

To je nujno proces poskusov in napak, ki zahteva intuicijo in trud uporabnika, da doseže optimalne rezultate. Zakaj je torej to pomembno? Za odgovor moramo najprej razumeti tri koncepte:

  • tokenizacija = kako model »vidi« navodilo
  • osnovni LLM-ji = kako temeljni model »obdeluje« navodilo
  • navodilo-prilagojeni LLM-ji = kako model zdaj lahko vidi »naloge«

Tokenizacija

LLM obravnava navodila kot sekvenco tokenov, pri čemer različni modeli (ali različice modela) lahko isto navodilo razdelijo na tokene različno. Ker so LLM-ji trenirani na tokenih (ne na surovem besedilu), način tokenizacije vpliva neposredno na kakovost generiranega odgovora.

Za občutek, kako tokenizacija deluje, poskusite orodja, kot je OpenAI Tokenizer, prikazano spodaj. Kopirajte svoje navodilo in si oglejte, kako je razčlenjeno v tokene, bodite pozorni na presledke in ločila. Upoštevajte, da primer uporablja starejši LLM (GPT-3), zato lahko z novejšim modelom dobite drugačne rezultate.

Tokenizacija

Koncept: Temeljni modeli

Ko je navodilo pretvorjeno v tokene, je glavna naloga "osnovnega LLM-ja" (tj. temeljnega modela) napovedovati naslednji token v zaporedju. Ker so LLM-ji trenirani na ogromnih besedilnih podatkovnih množicah, imajo dober občutek za statistične povezave med tokeni in lahko napovedujejo z določeno gotovostjo. Pomembno je, da ne razumejo pomena besed v navodilu ali tokenu; vidijo zgolj vzorec, ki ga lahko »dopopolnijo« z naslednjo napovedjo. Nadaljujejo lahko z napovedovanjem, dokler jih ne ustavi uporabnik ali nek prej določeni pogoj.

Želite videti, kako deluje dokončevanje navodil? Vnesite zgornje navodilo v Azure OpenAI Studio Chat Playground s privzetimi nastavitvami. Sistem je nastavljen, da navodila obravnava kot zahteve po informacijah – tako boste dobili odgovor, ki ustreza temu kontekstu.

Kaj pa, če uporabnik želi nekaj posebnega, kar ustreza določenim kriterijem oziroma nalogi? Takrat v igro stopijo navodilo-prilagojeni LLM-ji.

Osnovni LLM dokončanje pogovora

Koncept: Navodilo-prilagojeni LLM-ji

Navodilo-prilagojeni LLM izhaja iz temeljnega modela, ki je dodatno prilagojen s primeri ali vhodno-izhodnimi pari (npr. večkrožnimi »sporočili«), ki lahko vsebujejo jasna navodila – AI pa skuša slediti temu navodilu v odgovoru.

Uporabljuje tehnike, kot je okrepitev učenja s povratnimi informacijami ljudi (Reinforcement Learning with Human Feedback – RLHF), ki naučijo model slediti navodilom in učiti se iz povratnih informacij, da proizvede odgovore, ki so bolje prilagojeni praktičnim aplikacijam in uporabniškim ciljem.

Poskusimo – vrnite se na zgornje navodilo, spremenite pa sistemsko sporočilo, da omogočite naslednje navodilo kot kontekst:

Povzemite vsebino, ki vam je dana, za učenca drugega razreda. Rezultat naj bo en odstavek z 3-5 ključnimi točkami.

Vidite, da je rezultat zdaj prilagojen želenemu cilju in formatu? Učitelj to lahko uporabi neposredno v svojih diapozitivih za ta pouk.

Navodilo-prilagojeni LLM dokončanje pogovora

Zakaj potrebujemo izdelavo navodil?

Zdaj, ko razumemo, kako LLM-ji obdelujejo navodila, pa poglejmo, zakaj potrebujemo izdelavo navodil. Odgovor leži v dejstvu, da trenutni LLM-ji predstavljajo številne izzive, ki otežujejo zanesljive in konsistentne odgovore brez truda pri oblikovanju in optimizaciji navodil. Na primer:

  1. Odgovori modelov so stohastični. Isto navodilo lahko pri različnih modelih ali različicah modela proizvede različne odgovore. Tudi isti model lahko da različen odgovor, če ga vprašate večkrat. Tehnike izdelave navodil lahko pomagajo zmanjšati te variacije z boljšimi varovali.

  2. Modeli lahko izmišljajo odgovore. Modeli so predtrenirani na velikih, a končnih podatkovnih nizih, kar pomeni, da nimajo znanja o konceptih zunaj svojega področja usposabljanja. Zaradi tega lahko ustvarijo odgovore, ki so netočni, izmišljeni ali v neposrednem nasprotju z dejstvi. Tehnike izdelave navodil pomagajo uporabnikom prepoznati in ublažiti take izmišljotine, npr. z zahtevami po citatih ali obrazložitvah.

  3. Zmožnosti modelov se razlikujejo. Novejši modeli ali generacije modelov imajo bogatejše zmogljivosti, hkrati pa prinašajo posebne lastnosti in kompromis med stroški ter kompleksnostjo. Izdelava navodil lahko pomaga razviti najboljše prakse in poteke dela, ki abstraktno zakrijejo razlike in se prilagodijo model-specifičnim zahtevam na skalabilen in nemoten način.

Preizkusite to v OpenAI ali Azure OpenAI Playgroundu:

  • Uporabite isto navodilo z različnimi LLM implementacijami (npr. OpenAI, Azure OpenAI, Hugging Face) – ste opazili razlike?
  • Uporabite isto navodilo večkrat z istim LLM-jem (npr. Azure OpenAI playground) – kako so se te variacije razlikovale?

Primer izmišljotin

V tem tečaju uporabljamo izraz »izmišljotina« (fabrication) za pojav, ko LLM-ji včasih ustvarjajo dejansko napačne informacije zaradi omejitev v usposabljanju ali drugih dejavnikov. Morda ste to slišali imenovati tudi »halucinacije« v popularnih člankih ali raziskovalnih prispevkih. Vendar močno priporočamo uporabo izraza »izmišljotina«, da ne bi nehote antropomorfizirali vedenja z pripisovanjem človeške lastnosti strojno generiranemu rezultatu. To tudi krepi smernice za odgovorno umetno inteligenco z vidika terminologije, tako da odstranjujemo izraze, ki so lahko v nekaterih kontekstih žaljivi ali neinkluzivni.

Želite dobiti občutek, kako delujejo izmišljotine? Pomislite na navodilo, ki umetni inteligenci naroči, naj ustvari vsebino o neobstoječi temi (da zagotovite, da ni del podatkov za usposabljanje). Na primer – poskusil sem takšno navodilo:

Navodilo: Ustvari načrt učne ure o marsovski vojni leta 2076. Spletno iskanje mi je pokazalo, da so obstajali fiktivni zapisi (npr. televizijske serije ali knjige) o marsovskih vojnah – vendar nobeden v letu 2076. Zdrav razum nam tudi pove, da je leto 2076 v prihodnosti in zato ne more biti povezano z resničnim dogodkom.

Kaj se torej zgodi, ko zaženemo ta poziv pri različnih ponudnikih LLM?

Odgovor 1: OpenAI Playground (GPT-35)

Odgovor 1

Odgovor 2: Azure OpenAI Playground (GPT-35)

Odgovor 2

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

Odgovor 3

Kot smo pričakovali, vsak model (ali različica modela) ustvari rahlo različne odgovore zaradi stohastičnega vedenja in razlik v zmožnostih modelov. Na primer, eden od modelov cilja na občinstvo osmega razreda, medtem ko drugega predpostavlja za dijaka srednje šole. Vendar pa so vsi trije modeli ustvarili odgovore, ki bi lahko neinformiranega uporabnika prepričali, da je bil dogodek resničen.

Tehnike oblikovanja pozivov, kot so metaprompting in nastavitve temperature, lahko do neke mere zmanjšajo izmišljanje modelov. Novi arhitekture oblikovanja pozivov tudi brezhibno vključujejo nova orodja in tehnike v tok poziva, da ublažijo ali zmanjšajo nekatere od teh učinkov.

Študija primera: GitHub Copilot

Zaključimo ta razdelek z vpogledom v to, kako se oblikovanje pozivov uporablja v rešitvah iz resničnega sveta, z ogledom ene študije primera: GitHub Copilot.

GitHub Copilot je vaš "AI parovski programer" – pretvori besedilne pozive v dokončanja kode in je integriran v vaše razvojno okolje (npr. Visual Studio Code) za nemoteno uporabniško izkušnjo. Kot je dokumentirano v nizu spodnjih blogov, je najzgodnejša različica temeljila na OpenAI Codex modelu – inženirji so hitro spoznali potrebo po fino prilagajanju modela in razvoju boljših tehnik oblikovanja pozivov za izboljšanje kakovosti kode. Julija so predstavili izboljšan AI model, ki presega Codex za še hitrejše predloge.

Preberite prispevke v zaporedju, da sledite njihovi učni poti.

Lahko tudi prebrskate njihov inženirski blog za več prispevkov, kot je ta, ki prikazuje, kako so ti modeli in tehnike uporabljeni za poganjanje aplikacij iz resničnega sveta.


Konstrukcija poziva

Videli smo, zakaj je oblikovanje pozivov pomembno – zdaj pa razumimo, kako so pozivi konstruirani, da bomo lahko ocenili različne tehnike za učinkovitejšo zasnovo pozivov.

Osnovni poziv

Začnimo z osnovnim pozivom: besedilni vhod, poslan modelu brez drugega konteksta. Tu je primer – ko pošljemo prvih nekaj besed ameriške himne na OpenAI Completion API, model takoj dokonča odgovor z naslednjimi vrsticami, kar kaže osnovno prediktivno vedenje.

Poziv (Vhod) Dokončanje (Izhod)
Oh say can you see Zdi se, da začenjate besedilo "The Star-Spangled Banner", državne himne Združenih držav. Celotno besedilo je ...

Kompleksni poziv

Sedaj dodajmo kontekst in navodila k osnovnemu pozivu. Chat Completion API nam omogoča konstrukcijo kompleksnega poziva kot zbirke sporočil z:

  • pari vhod/izhoda, ki odražajo uporabnikov vnos in pomočnikov odgovor.
  • sistemskim sporočilom, ki določa kontekst za vedenje ali osebnost pomočnika.

Zahteva je sedaj v obliki spodaj, kjer tokenizacija učinkovito zajame relevantne informacije iz konteksta in pogovora. Sprememba sistemskega konteksta lahko močno vpliva na kakovost dokončanj, prav tako kot vhodni podatki od uporabnika.

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

Navodilo za poziv

V zgornjih primerih je bil uporabniški poziv preprosto besedilno vprašanje, ki ga lahko razložimo kot prošnjo po informacijah. Z navodili pri pozivih lahko uporabimo ta tekst za podrobnejšo določitev naloge in boljšega vodstva umetni inteligenci. Tu je primer:

Poziv (Vhod) Dokončanje (Izhod) Vrsta navodila
Napiši opis ameriške državljanske vojne vrnil preprost odstavek Preprosto
Napiši opis ameriške državljanske vojne. Navedite ključne datume in dogodke ter opišite njihov pomen vrnil odstavek, sledil pa je seznam ključnih datumov z opisi Kompleksno
Napiši opis ameriške državljanske vojne v enem odstavku. Navedite 3 alineje s ključnimi datumi in njihovim pomenom. Nato navedite še 3 alineje s pomembnimi zgodovinskimi osebnostmi in njihovimi prispevki. Rezultat vrnite v obliki JSON vrne obsežnejše podrobnosti v besedilnem polju, formatirano kot JSON, ki ga lahko kopirate v datoteko in po potrebi preverite Kompleksno. Formatirano.

Primarna vsebina

V zgornjih primerih je bil poziv še vedno precej odprt, kar je modelu omogočilo, da sam določi, kateri del njegovega predtreniranega nabora podatkov je relevanten. Z oblikovnim vzorcem primarne vsebine je vhodno besedilo razdeljeno na dva dela:

  • navodilo (akcija)
  • relevantna vsebina (ki vpliva na akcijo)

Tu je primer, kjer je navodilo "povzetek v 2 stavkih".

Poziv (Vhod) Dokončanje (Izhod)
Jupiter je peti planet od Sonca in največji v Osončju. Je plinski velikan z maso ena tisočinka mase Sonca, a ima dve in pol-krat večjo maso kot vsi drugi planeti v Osončju skupaj. Jupiter je ena najsvetlejših teles, ki so vidna s prostim očesom na nočnem nebu, in je poznan starodavnim civilizacijam še pred zabeleženo zgodovino. Ime je dobil po rimskem bogu Jupiterju.[19] Ko ga opazujemo z Zemlje, je Jupiter lahko dovolj svetel, da njegovo odsevano svetlobo vidimo v obliki senc,[20] in je povprečno tretje najsvetlejše naravno telo na nočnem nebu za Luno in Venero.
Povzemi to v 2 kratka stavka
Jupiter, peti planet od Sonca, je največji v Osončju in znan kot eno najsvetlejših teles na nočnem nebu. Ime je dobil po rimskem bogu Jupiterju; je plinski velikan s maso, ki je dve in pol krat večja od mase vseh drugih planetov Osončja skupaj.

Segment primarne vsebine je mogoče uporabiti na različne načine za učinkovitejša navodila:

  • Primeri - namesto da modelu povedemo natančno, kaj naj naredi z eksplicitnim navodilom, mu damo primere, kaj naj naredi, in naj sam sklepa vzorec.
  • Namigi - po navodilu dodamo "namig", ki usmeri dokončanje in vodi model k bolj relevantnim odgovorom.
  • Predloge – to so ponovljive 'recepture' za pozive s prostorčki (spremenljivkami), ki jih je mogoče prilagoditi s podatki za specifične primere uporabe.

Poglejmo si te primere v akciji.

Uporaba primerov

To je pristop, kjer uporabimo primarno vsebino, da "hranimo model" z nekaj primeri želenega izhoda za dano navodilo in mu dovolimo sklepanje vzorca za želeni izhod. Glede na število podanih primerov poznamo nič-izstrelkov, en-izstrelek, nekaj-izstrelkov itd.

Poziv sedaj sestavljajo trije deli:

  • opis naloge
  • nekaj primerov želenega izhoda
  • začetek novega primera (ki postane implicitni opis naloge)
Tip učenja Poziv (Vhod) Dokončanje (Izhod)
Nič-izstrelek "The Sun is Shining". Prevedi v španščino "El Sol está brillando".
En-izstrelek "The Sun is Shining" => ""El Sol está brillando".
"It's a Cold and Windy Day" =>
"Es un día frío y ventoso".
Nekaj-izstrelkov Igralec je tekel okoli baz => Baseball
Igralec je zadel 'ace' => Tenis
Igralec je zadel šestico => Kriket
Igralec je izvedel 'slam-dunk' =>
Košarka

Opazite, da smo morali v nič-izstrelek pozivu eksplicitno navesti nalogo ("Prevedi v španščino"), vendar se v primeru enega izstrela to implicitno razume. Primer nekaj izstrelkov pokaže, kako dodajanje več primerov omogoča modelom natančnejša sklepanja brez dodatnih navodil.

Namigi za pozive

Druga tehnika za uporabo primarne vsebine je zagotoviti namige namesto primerov. V tem primeru modelu damo rahlo usmeritev s koščkom besedila, ki odraža želeni format odgovora. Model nato "sprejme namig" in nadaljuje v tem slogu.

Število namigov Poziv (Vhod) Dokončanje (Izhod)
0 Jupiter je peti planet od Sonca in največji v Osončju. Je plinski velikan z maso ena tisočinka mase Sonca, a ima dve in pol-krat večjo maso kot vsi drugi planeti v Osončju skupaj. Jupiter je ena najsvetlejših teles, ki so vidna s prostim očesom na nočnem nebu, in je poznan starodavnim civilizacijam še pred zabeleženo zgodovino.
Povzemi to
Jupiter je največji planet v našem Osončju in peti od Sonca. Je plinski velikan z maso 1/1000 mase Sonca, vendar težji od vseh drugih planetov skupaj. Starodavne civilizacije poznajo Jupiter že dolgo časa in je lahko viden na nočnem nebu.
1 Jupiter je peta planeta od Sonca in največja v Osončju. Je plinski velikan z maso, ki je tisočinka mase Sonca, a dva in polkratna vsem ostalim planetam Osončja skupaj. Jupiter je enega najsvetlejših predmetov, vidnih s prostim očesom na nočnem nebu, in je znan starodavnim civilizacijam že pred pisano zgodovino.
Povzemite to
Kar smo se naučili, je, da je Jupiter
peta planeta od Sonca in največja v Osončju. Je plinski velikan z maso tisočinka mase Sonca, a dva in polkratna vsem drugim planetam skupaj. Je lahko viden s prostim očesom in je poznan že od starodavnih časov.
2 Jupiter je peta planeta od Sonca in največja v Osončju. Je plinski velikan z maso, ki je tisočinka mase Sonca, a dva in polkratna vsem ostalim planetam Osončja skupaj. Jupiter je enega najsvetlejših predmetov, vidnih s prostim očesom na nočnem nebu, in je znan starodavnim civilizacijam že pred pisano zgodovino.
Povzemite to
Top 3 dejstva, ki smo se jih naučili:
1. Jupiter je peta planeta od Sonca in največja v Osončju.
2. Je plinski velikan z maso, ki je tisočinka mase Sonca...
3. Jupiter je viden s prostim očesom že od starodavnih časov ...

Predloge Pozivov

Predloga poziva je vnaprej določena sestavina poziva, ki jo lahko shranimo in ponovno uporabimo po potrebi, da zagotovimo bolj dosledno uporabniško izkušnjo v velikem obsegu. V svoji najpreprostejši obliki je to zbirka primerov pozivov, kot je ta primer OpenAI, ki zagotavlja interaktivne komponente poziva (uporabniški in sistemski sporočili) ter format zahteve prek API-ja – za podporo ponovni uporabi.

V bolj zapleteni obliki, kot je ta primer LangChain, vsebuje zaščitna mesta, ki jih je mogoče zamenjati z podatki iz različnih virov (uporabniški vnos, sistemski kontekst, zunanji podatkovni viri itd.), da se dinamično ustvari poziv. To nam omogoča ustvarjanje knjižnice ponovno uporabnih pozivov, ki se lahko programatično uporabljajo za zagotavljanje doslednih uporabniških izkušenj v velikem obsegu.

Nazadnje je prava vrednost predlog v sposobnosti ustvarjanja in objave knjižnic pozivov za vertikalna aplikativna področja – kjer je predloga poziva zdaj optimizirana za aplikativni kontekst ali primere, ki naredijo odzive bolj relevantne in natančne za ciljno uporabniško publiko. Repozitorij Prompts For Edu je odličen primer tega pristopa, saj zbira knjižnico pozivov za izobraževalno področje s poudarkom na ključnih ciljih, kot so načrtovanje lekcij, načrtovanje kurikuluma, poučevanje študentov itd.

Podporna vsebina

Če obravnavamo konstrukcijo poziva kot imeti navodilo (nalogo) in cilj (primarno vsebino), potem je sekundarna vsebina dodatni kontekst, ki ga zagotovimo, da na nek način vpliva na izhod. To so lahko parametri nastavitve, navodila za oblikovanje, taksonomije tem itd., ki pomagajo modelu prilagoditi odziv, da ustreza želenim ciljem ali pričakovanjem uporabnika.

Na primer: Glede na katalog tečajev z obsežnimi metapodatki (ime, opis, stopnja, oznake metapodatkov, inštruktor itd.) o vseh razpoložljivih tečajih v kurikulumu:

  • lahko določimo navodilo, da "povzamemo katalog tečajev za jesen 2023"
  • lahko uporabimo primarno vsebino, da zagotovimo nekaj primerov želenega izhoda
  • lahko uporabimo sekundarno vsebino za določitev petih najpomembnejših "oznak".

Model lahko nato zagotovi povzetek v obliki, kot jo prikazujejo primeri – toda če ima rezultat več oznak, lahko da prednost petim označenim v sekundarni vsebini.


Najboljše prakse pri oblikovanju pozivov

Zdaj, ko vemo, kako lahko pozive konstruiramo, lahko začnemo razmišljati, kako jih oblikovati, da upoštevamo najboljše prakse. Razdelimo jih lahko na pravilen nagnjenost in uporabo pravih tehnik.

Mislitveni okvir za oblikovanje poziva

Oblikovanje poziva je proces poskusov in napak, zato imejte v mislih tri široke vodilne dejavnike:

  1. Razumevanje domene šteje. Natančnost in relevantnost odziva sta funkciji domena, v kateri aplikacija ali uporabnik deluje. Uporabite svojo intuicijo in strokovno znanje domene za prilagoditev tehnik. Na primer, določite osebnosti specifične za domeno v svojih sistemskih pozivih ali uporabite predloge specifične za domeno v uporabniških pozivih. Zagotovite sekundarno vsebino, ki odraža kontekste specifične za domeno, ali uporabite namige in primere specifične za domeno, da model usmerite k poznanim vzorcem uporabe.

  2. Razumevanje modela šteje. Vemo, da so modeli po naravi stohastični. Toda implementacije modelov se lahko razlikujejo glede na uporabljeni učni niz podatkov (vnaprej usposobljeno znanje), možnosti, ki jih ponujajo (npr. prek API ali SDK), in vrsto vsebine, za katero so optimizirani (npr. koda proti slikam ali besedilu). Razumite moči in omejitve modela, ki ga uporabljate, in uporabite to znanje za prioritizacijo nalog ali gradnjo prilagojenih predlog, ki so optimizirane za zmogljivosti modela.

  3. Ponavljanje in preverjanje šteje. Modeli hitro napredujejo, prav tako tudi tehnike oblikovanja poziva. Kot strokovnjak za domeno imate lahko še drug kontekst ali merila za vašo specifično aplikacijo, ki niso nujno uporabna širši skupnosti. Uporabite orodja in tehnike oblikovanja poziva za "hitri začetek" konstrukcije poziva, nato ponavljajte in preverjajte rezultate z lastno intuicijo in strokovnim znanjem. Zabeležite si ugotovitve in ustvarite bazo znanja (npr. knjižnice pozivov), ki jo lahko drugi uporabijo kot novo izhodišče za hitrejše ponovitve.

Najboljše prakse

Poglejmo sedaj skupne najboljše prakse, ki jih priporoča OpenAI in Azure OpenAI.

Kaj Zakaj
Preizkusite najnovejše modele. Nove generacije modelov verjetno imajo izboljšane lastnosti in kvaliteto – vendar lahko povzročajo večje stroške. Ocenite njihov vpliv in nato sprejmite odločitve o selitvi.
Ločite navodila in kontekst Preverite, ali vaš model/ponudnik določa ločila za jasnejšo razliko med navodili, primarno in sekundarno vsebino. To lahko modelom pomaga natančneje dodeliti teže za posamezne enote.
Bodite specifični in jasni Podajte več podrobnosti o želenem kontekstu, izidu, dolžini, formatu, slogu itd. To izboljša kakovost in doslednost odzivov. Zajemite recepte v ponovno uporabnih predlogah.
Bodite opisni, uporabite primere Modeli se lahko bolje odzovejo na pristop "pokaži in povej". Začnite z zero-shot pristopom, kjer daste navodilo (brez primerov), nato poskusite few-shot kot izpopolnitev z nekaj primeri želenega izhoda. Uporabite analogije.
Uporabite namige za zagon Usmerite ga proti želenemu rezultatu tako, da mu daste nekaj začetnih besed ali fraz, ki jih lahko uporabi kot izhodišče za odgovor.
Ponovite, če je treba Včasih je potrebno modelu ponoviti. Dajte navodila pred in po primarni vsebini, uporabite navodilo in namig itd. Ponavljajte in preverjajte, kaj deluje.
Pomemben je vrstni red Vrstni red, v katerem modelu podajate informacije, lahko vpliva na izhod, tudi v primerih učenja, zaradi pristranskosti aktualnosti. Poskusite različne možnosti in ugotovite, kaj najbolje deluje.
Dajte modelu možnost “izstopa” Modelu zagotovite rezervni odziv, če zanj iz kakršnega koli razloga ne more dokončati naloge. To zmanjša možnosti, da bi modeli ustvarili napačne ali izmišljene odzive.

Kot pri vsaki najboljši praksi, ne pozabite, da se vaši rezultati lahko razlikujejo glede na model, nalogo in domeno. Uporabite jih kot izhodišče in ponavljajte, da najdete, kaj najbolje deluje za vas. Nenehno ponovno ocenjujte svoj postopek oblikovanja poziva, ko so na voljo novi modeli in orodja, s poudarkom na razširljivosti procesa in kakovosti odziva.

Naloga

Čestitamo! Prišli ste do konca lekcije! Čas je, da nekatere od teh konceptov in tehnik preizkusite v praksi z resničnimi primeri!

Za našo nalogo bomo uporabili Jupyter beležnico z vajami, ki jih lahko interaktivno dokončate. Beležnico lahko tudi razširite z lastnimi Markdown in Code celicami, da sami raziskujete ideje in tehnike.

Za začetek, forknite repozitorij, nato

  • (Priporočeno) Zaženite GitHub Codespaces
  • (Alternativa) Klonirajte repozitorij na lokalno napravo in ga uporabite z Docker Desktop
  • (Alternativa) Odprite beležnico v vaši priljubljeni obliki za izvajanje Jupyter beležnic

Nato nastavite svoje okoljske spremenljivke

  • Kopirajte datoteko .env.copy v korenski mapo repozitorija kot .env in vnesite vrednosti AZURE_OPENAI_API_KEY, AZURE_OPENAI_ENDPOINT in AZURE_OPENAI_DEPLOYMENT. Nato se vrnite na razdelek Learning Sandbox, da se naučite, kako.

Nato odprite Jupyter beležnico

  • Izberite jedro za izvajanje. Če uporabljate prva dva načina, izberite privzeto jedro Python 3.10.x, ki je vključeno v razvojno okolje.

Pripravljeni ste za izvajanje vaj. Opomba: ni pravih ali napačnih odgovorov – gre za raziskovanje možnosti z metodo poskusov in napak ter razvijanje intuicije, kaj deluje za določen model in domeno aplikacije.

Zaradi tega v tej lekciji ni segmentov s kodo za rešitev. Namesto tega ima beležnica Markdown celice z naslovom “Moja rešitev:”, ki prikazujejo en primer izhoda za referenco.

Preverjanje znanja

Kateri od naslednjih je dober poziv po sprejemljivih najboljših praksah?

  1. Pokaži mi sliko rdečega avtomobila
  2. Pokaži mi sliko rdečega avtomobila znamke Volvo in modela XC90, parkiranega ob pečini ob zahajajočem soncu
  3. Pokaži mi sliko rdečega avtomobila znamke Volvo in modela XC90

Odgovor: 2, ker je najboljši poziv, saj ponuja podrobnosti o "čemu" in gre v specifičnosti (ne samo kateri koli avto, ampak določena znamka in model) ter opisuje celoten prizor. Sledi 3, ki prav tako vsebuje veliko opisov.

🚀 Izziv

Poskusite uporabiti tehniko "namiga" s pozivom: Dokončaj stavek "Pokaži mi sliko rdečega avtomobila znamke Volvo in ". Kako se odzove, in kako bi ga izboljšali?

Odlično delo! Nadaljujte učenje

Želite izvedeti več o različnih konceptih oblikovanja poziva? Obiščite stran za nadaljnje učenje, kjer boste našli odlične vire o tej temi.

Pojdite na lekcijo 5, kjer bomo pogledali napredne tehnike oblikovanja poziva!


Opozorilo: Ta dokument je bil preveden z uporabo AI prevajalske storitve Co-op Translator. Čeprav si prizadevamo za natančnost, upoštevajte, da lahko avtomatizirani prevodi vsebujejo napake ali netočnosti. Izvirni dokument v njegovem izvorno jeziku velja za zanesljiv vir. Za ključne informacije priporočamo strokovni človeški prevod. Nismo odgovorni za morebitne nesporazume ali napačne interpretacije, ki izhajajo iz uporabe tega prevoda.