Ta modul zajema ključne pojme in tehnike za ustvarjanje učinkovitih pozivov v generativnih AI modelih. Pomembno je tudi, kako napišete svoj poziv za LLM. Dobro zasnovan poziv lahko prinese bolj kakovosten odgovor. Kaj pa pravzaprav pomenita izraza poziv in oblikovanje pozivov? In kako izboljšati poziv (input), ki ga pošljemo LLM? Na ta vprašanja bomo poskušali odgovoriti v tem in naslednjem poglavju.
Generativna AI je sposobna ustvarjati novo vsebino (npr. besedilo, slike, zvok, kodo itd.) kot odziv na uporabniške zahteve. To dosega z uporabo velikih jezikovnih modelov (LLM), kot je serija GPT podjetja OpenAI ("Generative Pre-trained Transformer"), ki so usposobljeni za uporabo naravnega jezika in kode.
Uporabniki lahko zdaj z modeli komunicirajo preko znanih načinov, kot je klepet, brez potrebe po tehničnem znanju ali usposabljanju. Modeli so pozivno usmerjeni – uporabniki pošljejo besedilni vhod (poziv) in prejmejo AI odgovor (dopolnilo). Nato lahko z AI "klepetajo" večkrat zapored, izboljšujejo svoj poziv, dokler odgovor ne ustreza njihovim pričakovanjem.
"Pozivi" so zdaj glavni programski vmesnik za generativne AI aplikacije, saj modelom povedo, kaj naj naredijo, in vplivajo na kakovost vrnjenih odgovorov. "Oblikovanje pozivov" je hitro rastoče področje, ki se osredotoča na načrtovanje in optimizacijo pozivov za zagotavljanje doslednih in kakovostnih odgovorov v velikem obsegu.
V tej lekciji se bomo naučili, kaj je oblikovanje pozivov, zakaj je pomembno in kako lahko ustvarimo učinkovitejše pozive za določen model in cilje aplikacije. Spoznali bomo osnovne pojme in najboljše prakse oblikovanja pozivov ter se naučili o interaktivnem okolju Jupyter Notebook, kjer lahko te koncepte preizkusimo na resničnih primerih.
Na koncu lekcije bomo znali:
- Pojasniti, kaj je oblikovanje pozivov in zakaj je pomembno.
- Opisati sestavne dele poziva in kako se uporabljajo.
- Spoznati najboljše prakse in tehnike oblikovanja pozivov.
- Uporabiti naučene tehnike na resničnih primerih z uporabo OpenAI končne točke.
Oblikovanje pozivov: Praksa načrtovanja in izboljševanja vhodov, da AI modeli proizvedejo želene izhode.
Tokenizacija: Proces pretvarjanja besedila v manjše enote, imenovane tokeni, ki jih model lahko razume in obdela.
Instruction-Tuned LLMs: Veliki jezikovni modeli, ki so dodatno prilagojeni z navodili za izboljšanje natančnosti in relevantnosti odgovorov.
Oblikovanje pozivov je trenutno bolj umetnost kot znanost. Najboljši način za izboljšanje intuicije je več vadbe in pristop poskusov in napak, ki združuje strokovno znanje s priporočenimi tehnikami in optimizacijami, specifičnimi za model.
Jupyter Notebook, ki spremlja to lekcijo, ponuja sandbox okolje, kjer lahko preizkusite, kar se naučite – sproti ali kot del izziva na koncu. Za izvajanje vaj potrebujete:
- Azure OpenAI API ključ – končno točko za nameščen LLM.
- Python Runtime – okolje za izvajanje Notebooka.
- Lokalne okoljske spremenljivke – izvedite SETUP korake, da se pripravite.
Notebook vsebuje začetne vaje, a ste vabljeni, da dodate svoje Markdown (opisne) in Code (pozivne zahteve) odseke, da preizkusite več primerov ali idej ter razvijete intuicijo za oblikovanje pozivov.
Želite dobiti celostno sliko, kaj ta lekcija zajema, preden se poglobite? Oglejte si ta ilustriran vodič, ki vam predstavi glavne teme in ključne ugotovitve za razmislek. Načrt lekcije vas vodi od razumevanja osnovnih pojmov in izzivov do njihove rešitve z ustreznimi tehnikami in najboljšimi praksami oblikovanja pozivov. Upoštevajte, da se oddelek "Napredne tehnike" v tem vodiču nanaša na vsebino, ki jo obravnavamo v naslednjem poglavju tega kurikuluma.
Pogovorimo se, kako se ta tema povezuje z našo poslanstvom startupa, da prinesemo AI inovacije v izobraževanje. Želimo razvijati AI-podprte aplikacije za personalizirano učenje – zato razmislimo, kako bi različni uporabniki naše aplikacije lahko "oblikovali" pozive:
- Administratorji lahko AI prosijo, naj analizira podatke učnih načrtov in identificira vrzeli v pokritosti. AI lahko povzame rezultate ali jih vizualizira s kodo.
- Učitelji lahko AI prosijo, naj ustvari učni načrt za ciljno skupino in temo. AI lahko sestavi personaliziran načrt v določenem formatu.
- Študenti lahko AI prosijo, naj jih poučuje v zahtevni temi. AI lahko vodi študente z lekcijami, namigi in primeri, prilagojenimi njihovi ravni.
To je le vrh ledene gore. Oglejte si Prompts For Education – odprtokodno knjižnico pozivov, ki jo urejajo strokovnjaki za izobraževanje – da dobite širši vpogled v možnosti! Poskusite nekaj teh pozivov v sandboxu ali v OpenAI Playground in poglejte, kaj se zgodi!
Lekcijo smo začeli z definicijo oblikovanja pozivov kot procesa načrtovanja in optimizacije besedilnih vhodov (pozivov), da zagotovimo dosledne in kakovostne odgovore (doplnitve) za določen cilj aplikacije in model. To lahko razumemo kot dvostopenjski proces:
- načrtovanje začetnega poziva za določen model in cilj
- izboljševanje poziva iterativno, da izboljšamo kakovost odgovora
To je nujno proces poskusov in napak, ki zahteva uporabniško intuicijo in trud za dosego optimalnih rezultatov. Zakaj je torej pomembno? Da odgovorimo na to vprašanje, moramo najprej razumeti tri pojme:
- Tokenizacija = kako model "vidi" poziv
- Osnovni LLM = kako temeljni model "obdeluje" poziv
- Instruction-Tuned LLM = kako model zdaj lahko "razume naloge"
LLM pozive vidi kot zaporedje tokenov, pri čemer različni modeli (ali različice modela) lahko isti poziv tokenizirajo različno. Ker so LLM usposobljeni na tokenih (in ne na surovem besedilu), ima način tokenizacije neposreden vpliv na kakovost generiranega odgovora.
Za boljšo predstavo, kako tokenizacija deluje, preizkusite orodja, kot je OpenAI Tokenizer, prikazano spodaj. Kopirajte svoj poziv in poglejte, kako se pretvori v tokene, pri čemer bodite pozorni na obravnavo presledkov in ločil. Upoštevajte, da ta primer prikazuje starejši LLM (GPT-3) – zato lahko z novejšim modelom dobite drugačen rezultat.
Ko je poziv tokeniziran, je glavna naloga "Osnovnega LLM" (ali temeljnega modela) napovedati naslednji token v zaporedju. Ker so LLM usposobljeni na ogromnih besedilnih zbirkah, dobro poznajo statistične povezave med tokeni in lahko to napoved opravijo z določeno gotovostjo. Pomembno je, da ne razumejo pomena besed v pozivu ali tokenu; vidijo le vzorec, ki ga lahko "doplnijo" z naslednjo napovedjo. Napovedovanje lahko nadaljujejo, dokler jih uporabnik ne prekine ali ne nastopi vnaprej določena pogoj.
Želite videti, kako deluje dopolnjevanje na podlagi poziva? Vnesite zgornji poziv v Azure OpenAI Studio Chat Playground z privzetimi nastavitvami. Sistem je nastavljen tako, da pozive obravnava kot zahteve po informacijah – zato bi morali videti dopolnilo, ki ustreza temu kontekstu.
Kaj pa, če uporabnik želi videti nekaj specifičnega, kar ustreza določenim kriterijem ali cilju naloge? Tu pridejo na vrsto instruction-tuned LLM.
Instruction-Tuned LLM izhaja iz temeljnega modela, ki ga dodatno prilagodijo z zgledi ali pari vhod/izhodi (npr. večkrožna "sporočila"), ki vsebujejo jasna navodila – AI pa skuša slediti tem navodilom.
Uporablja tehnike, kot je okrepljeno učenje s povratnimi informacijami ljudi (RLHF), ki model naučijo slediti navodilom in učiti se iz povratnih informacij, da proizvede odgovore, ki so bolj primerni za praktične aplikacije in bolj relevantni za uporabniške cilje.
Poskusimo – ponovno uporabite zgornji poziv, a zdaj spremenite sistemsko sporočilo tako, da vsebuje naslednje navodilo kot kontekst:
Povzemite vsebino, ki vam je dana, za učenca drugega razreda. Rezultat naj bo en odstavek s 3-5 ključnimi točkami.
Vidite, kako je rezultat zdaj prilagojen želenemu cilju in formatu? Učitelj lahko ta odgovor neposredno uporabi v svojih predstavitvah za ta razred.
Zdaj, ko vemo, kako LLM obdelujejo pozive, poglejmo, zakaj potrebujemo oblikovanje pozivov. Odgovor je v tem, da trenutni LLM predstavljajo številne izzive, zaradi katerih je težje doseči zanesljive in dosledne dopolnitve brez vloženega truda v konstrukcijo in optimizacijo pozivov. Na primer:
-
Odgovori modela so stohastični. Isti poziv bo verjetno dal različne odgovore z različnimi modeli ali različicami modela. Tudi z istim modelom se lahko rezultati razlikujejo ob različnih časih. Tehnike oblikovanja pozivov nam pomagajo zmanjšati te razlike z boljšimi varovali.
-
Modeli lahko izmišljajo odgovore. Modeli so predhodno usposobljeni na velikih, a omejenih podatkovnih nizih, zato nimajo znanja o konceptih zunaj tega obsega. Posledično lahko ustvarijo odgovore, ki so netočni, izmišljeni ali neposredno v nasprotju z znanimi dejstvi. Tehnike oblikovanja pozivov pomagajo uporabnikom prepoznati in omiliti takšne izmišljotine, npr. z zahtevo po navedbah ali obrazložitvah.
-
Zmožnosti modelov se razlikujejo. Novejši modeli ali generacije modelov imajo bogatejše zmožnosti, a prinašajo tudi posebnosti in kompromis med stroški in kompleksnostjo. Oblikovanje pozivov nam pomaga razviti najboljše prakse in delovne tokove, ki abstraktno obravnavajo razlike in se prilagajajo zahtevam posameznih modelov na skalabilen in nemoten način.
Poglejmo to v praksi v OpenAI ali Azure OpenAI Playground:
- Uporabite isti poziv z različnimi LLM namestitvami (npr. OpenAI, Azure OpenAI, Hugging Face) – ste opazili razlike?
- Uporabite isti poziv večkrat z istim LLM (npr. Azure OpenAI playground) – kako so se razlikovali ti odgovori?
V tem tečaju uporabljamo izraz "izmišljotina" za pojav, ko LLM včasih ustvarijo dejansko netočne informacije zaradi omejitev v usposabljanju ali drugih dejavnikov. V popularnih člankih ali raziskavah ste morda slišali izraz "halucinacije". Vendar močno priporočamo uporabo izraza "izmišljotina", da ne antropomorfiziramo vedenja z dodeljevanjem človeških lastnosti stroju. To tudi podpira smernice za odgovorno AI z vidika terminologije, saj odstranjuje izraze, ki bi lahko bili v nekaterih kontekstih žaljivi ali neinkluzivni.
Želite dobiti občutek, kako delujejo izmišljotine? Pomislite na poziv, ki AI naroči, naj ustvari vsebino o neobstoječi temi (da zagotovite, da je ni v učnem naboru). Na primer – poskusil sem ta poziv:
- Razumeti vzroke in potek Marsovske vojne leta 2076
- Analizirati ključne dogodke in njihove posledice
- Razviti kritično mišljenje o vplivu vojne na medplanetarno politiko
- Kratek pregled zgodovine Marsa pred letom 2076
- Predstavitev glavnih akterjev v vojni
- Pojasnilo, zakaj je vojna izbruhnila
- Podrobna razlaga poteka vojne
- Prve spopade in strategije
- Tehnološki napredki uporabljeni v vojni
- Ključne bitke in njihovi izidi
- Vpliv vojne na civilno prebivalstvo
- Mednarodni odzivi in posredovanja
- Razdelitev v skupine: vsaka skupina analizira določen vidik vojne (npr. vojaška taktika, diplomacija, tehnologija)
- Predstavitev ugotovitev skupin
- Povzetek glavnih točk učne ure
- Diskusija o tem, kako bi se lahko izognili podobnim konfliktom v prihodnosti
- Napisati esej o tem, kako je Marsovska vojna leta 2076 vplivala na razvoj medplanetarnih odnosov v naslednjih desetletjih Spletno iskanje mi je pokazalo, da obstajajo izmišljeni zapisi (npr. televizijske serije ali knjige) o marsovskih vojnah – vendar nobenih za leto 2076. Zdrava pamet nam tudi pove, da je leto 2076 v prihodnosti in zato ne more biti povezano z resničnim dogodkom.
Kaj se torej zgodi, ko ta poziv zaženemo pri različnih ponudnikih LLM?
Odgovor 1: OpenAI Playground (GPT-35)
Odgovor 2: Azure OpenAI Playground (GPT-35)
Odgovor 3: : Hugging Face Chat Playground (LLama-2)
Kot smo pričakovali, vsak model (ali različica modela) zaradi stohastičnega vedenja in razlik v zmogljivostih modela ustvari nekoliko različne odgovore. Na primer, en model cilja na občinstvo 8. razreda, medtem ko drugi predpostavlja dijaka srednje šole. Vsi trije modeli pa so vseeno ustvarili odgovore, ki bi lahko prepričali neinformiranega uporabnika, da je dogodek resničen.
Tehnike oblikovanja pozivov, kot sta metaprompting in nastavitev temperature, lahko do neke mere zmanjšajo izmišljotine modela. Nove arhitekture oblikovanja pozivov prav tako brezhibno vključujejo nova orodja in tehnike v potek poziva, da omilijo ali zmanjšajo nekatere od teh učinkov.
Zaključimo ta del z vpogledom, kako se oblikovanje pozivov uporablja v resničnih rešitvah, in si ogledamo eno študijo primera: GitHub Copilot.
GitHub Copilot je vaš "AI par programer" – pretvarja 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 spodnji seriji blogov, je bila najzgodnejša različica osnovana na modelu OpenAI Codex – inženirji so hitro spoznali potrebo po dodatnem 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 objave v zaporedju, da sledite njihovi učni poti.
- Maj 2023 | GitHub Copilot postaja boljši pri razumevanju vaše kode
- Maj 2023 | Znotraj GitHuba: delo z LLM-ji za GitHub Copilot
- Junij 2023 | Kako napisati boljše pozive za GitHub Copilot
- Julij 2023 | GitHub Copilot presega Codex z izboljšanim AI modelom
- Julij 2023 | Vodnik za razvijalce o oblikovanju pozivov in LLM-jih
- September 2023 | Kako zgraditi poslovno aplikacijo LLM: lekcije iz GitHub Copilot
Lahko si ogledate tudi njihov inženirski blog za več objav, kot je ta, ki prikazuje, kako se ti modeli in tehnike uporabljajo za poganjanje resničnih aplikacij.
Videli smo, zakaj je oblikovanje pozivov pomembno – zdaj pa razumimo, kako so pozivi zgrajeni, da lahko ocenimo različne tehnike za učinkovitejše oblikovanje pozivov.
Začnimo z osnovnim pozivom: besedilni vnos, poslan modelu brez dodatnega konteksta. Tukaj je primer – ko pošljemo prvih nekaj besed ameriške himne OpenAI Completion API-ju, ta takoj dokonča odgovor z naslednjimi vrsticami, kar ilustrira osnovno vedenje napovedovanja.
| Poziv (vnos) | Dokončanje (izhod) |
|---|---|
| Oh say can you see | Zdi se, da začenjate z besedilom "The Star-Spangled Banner," ameriške narodne himne. Celoten tekst je ... |
Zdaj dodajmo osnovnemu pozivu kontekst in navodila. Chat Completion API nam omogoča sestavo kompleksnega poziva kot zbirke sporočil z:
- pari vhod/izhod, ki odražajo uporabnikov vnos in pomočnikove odgovore,
- sistemskim sporočilom, ki določa kontekst za vedenje ali osebnost pomočnika.
Zahteva je zdaj v spodnji obliki, kjer tokenizacija učinkovito zajame relevantne informacije iz konteksta in pogovora. Sprememba sistemskega konteksta lahko tako močno vpliva na kakovost dokončanj kot tudi uporabniški vnosi.
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?"}
]
)V zgornjih primerih je bil uporabnikov poziv preprosto besedilno vprašanje, ki ga lahko razumemo kot zahtevo po informacijah. Z navodili v pozivih lahko to besedilo uporabimo za natančnejšo opredelitev naloge in AI-ju damo boljše smernice. Tukaj je primer:
| Poziv (vnos) | Dokončanje (izhod) | Vrsta navodila |
|---|---|---|
| Napiši opis državljanske vojne | vrnjen preprost odstavek | Preprosto |
| Napiši opis državljanske vojne. Navedite ključne datume in dogodke ter opišite njihov pomen | vrnjen odstavek, sledil je seznam ključnih datumov dogodkov z opisi | Kompleksno |
| Napiši opis državljanske vojne v enem odstavku. Navedite 3 ključne datume z njihovim pomenom v alinejah. Navedite še 3 alineje s pomembnimi zgodovinskimi osebnostmi in njihovimi prispevki. Izpis vrni kot JSON datoteko | vrne obsežnejše podrobnosti v besedilnem polju, oblikovane kot JSON, ki ga lahko kopirate v datoteko in po potrebi preverite | Kompleksno. Oblikovan. |
V zgornjih primerih je bil poziv še vedno precej odprt, kar je LLM-ju omogočalo, da sam odloči, kateri del svojega predhodno naučenega nabora podatkov je relevanten. Z oblikovnim vzorcem primarna vsebina je vhodno besedilo razdeljeno na dva dela:
- navodilo (dejanje)
- relevantna vsebina (ki vpliva na dejanje)
Tukaj je primer, kjer je navodilo "povzemi to v 2 stavkih".
| Poziv (vnos) | Dokončanje (izhod) |
|---|---|
| Jupiter je peti planet od Sonca in največji v Osončju. Je plinski velikan z maso, ki je tisočinka mase Sonca, a dve in pol krat večja od mase vseh ostalih planetov v Osončju skupaj. Jupiter je eden najsvetlejših objektov, ki so vidni s prostim očesom na nočnem nebu, in je bil znan starodavnim civilizacijam že pred zapisano zgodovino. Ime je dobil po rimskem bogu Jupiterju.[19] Ko ga opazujemo z Zemlje, je Jupiter lahko dovolj svetel, da njegova odsevna svetloba meče vidne sence,[20] in je povprečno tretji najsvetlejši naravni objekt na nočnem nebu po Luni in Veneri. Povzemi to v 2 kratkih stavkih |
Jupiter, peti planet od Sonca, je največji v Osončju in velja za enega najsvetlejših objektov na nočnem nebu. Ime je dobil po rimskem bogu Jupiterju, je plinski velikan z maso, ki je dve in pol krat večja od mase vseh ostalih planetov v Osončju skupaj. |
Segment primarne vsebine lahko uporabimo na različne načine za učinkovitejša navodila:
- Primeri – namesto da modelu eksplicitno povemo, kaj naj naredi, mu damo primere, kaj naj naredi, in naj sam ugotovi vzorec.
- Namigi – navodilu sledimo z "namigom", ki usmerja dokončanje in vodi model k bolj relevantnim odgovorom.
- Predloge – to so ponovljive 'recepture' za pozive z rezerviranimi mesti (spremenljivkami), ki jih lahko prilagodimo z podatki za specifične primere uporabe.
Poglejmo si te prakse v akciji.
To je pristop, kjer uporabimo primarno vsebino, da "nahranimo model" z nekaj primeri želenega izhoda za dano navodilo in mu dovolimo, da sam ugotovi vzorec za želeni izhod. Glede na število podanih primerov lahko govorimo o zero-shot, one-shot, few-shot pozivanju itd.
Poziv zdaj sestavljajo trije deli:
- opis naloge
- nekaj primerov želenega izhoda
- začetek novega primera (ki postane implicitni opis naloge)
| Tip učenja | Poziv (vnos) | Dokončanje (izhod) |
|---|---|---|
| Zero-shot | "The Sun is Shining". Prevedi v španščino | "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 | Igralec je pretekel baze => Baseball Igralec je zadel as => Tenis Igralec je zadel šestico => Kriket Igralec je naredil slam-dunk => |
Košarka |
Opazite, da smo pri zero-shot pozivanju morali dati eksplicitno navodilo ("Prevedi v španščino"), medtem ko se to v one-shot primeru implicitno razume. Primer few-shot pa pokaže, kako dodajanje več primerov omogoča modelom natančnejše sklepe brez dodatnih navodil.
Druga tehnika uporabe primarne vsebine je, da namesto primerov zagotovimo namige. V tem primeru modelu damo rahlo spodbudo z začetkom, ki odraža želeni format odgovora. Model nato "sprejme namig" in nadaljuje v istem slogu.
| Število namigov | Poziv (vnos) | Dokončanje (izhod) |
|---|---|---|
| 0 | Jupiter je peti planet od Sonca in največji v Osončju. Je plinski velikan z maso, ki je tisočinka mase Sonca, a dve in pol krat večja od mase vseh ostalih planetov v Osončju skupaj. Jupiter je eden najsvetlejših objektov, ki so vidni s prostim očesom na nočnem nebu, in je bil znan starodavnim civilizacijam že pred zapisano zgodovino. |
Povzetek tega | Jupiter je največji planet v našem Osončju in peti po vrsti od Sonca. Je plinski velikan z maso, ki je 1/1000 mase Sonca, a je težji od vseh ostalih planetov skupaj. Stare civilizacije so Jupitra poznale že dolgo časa, in je lahko viden na nočnem nebu. |
| 1 | Jupiter je peti planet od Sonca in največji v Osončju. Je plinski velikan z maso, ki je ena tisočinka mase Sonca, a je dvakrat in pol težji od vseh ostalih planetov skupaj. Jupiter je eden najsvetlejših objektov, ki so vidni s prostim očesom na nočnem nebu, in je bil poznan starodavnim civilizacijam že pred začetkom pisane zgodovine.
Povzetek tega
Naučili smo se, da je Jupiter | peti planet od Sonca in največji v Osončju. Je plinski velikan z maso, ki je ena tisočinka mase Sonca, a dvakrat in pol težji od vseh ostalih planetov skupaj. Je lahko viden s prostim očesom in je poznan že od antičnih časov. |
| 2 | Jupiter je peti planet od Sonca in največji v Osončju. Je plinski velikan z maso, ki je ena tisočinka mase Sonca, a je dvakrat in pol težji od vseh ostalih planetov skupaj. Jupiter je eden najsvetlejših objektov, ki so vidni s prostim očesom na nočnem nebu, in je bil poznan starodavnim civilizacijam že pred začetkom pisane zgodovine.
Povzetek tega
Top 3 dejstva, ki smo jih izvedeli: | 1. Jupiter je peti planet od Sonca in največji v Osončju.
2. Je plinski velikan z maso, ki je ena tisočinka mase Sonca...
3. Jupiter je bil viden s prostim očesom že v antičnih časih ... |
| | | |
Predloga za poziv je vnaprej določena receptura za poziv, ki jo lahko shranimo in po potrebi ponovno uporabimo, da zagotovimo bolj dosledne uporabniške izkušnje v večjem obsegu. V najpreprostejši obliki je to zbirka primerov pozivov, kot je ta od OpenAI, ki vsebuje tako interaktivne komponente poziva (uporabniška in sistemska sporočila) kot tudi format zahteve prek API-ja – za podporo ponovni uporabi.
V bolj zapleteni obliki, kot je ta primer od LangChain, vsebuje zamenljive dele, ki jih lahko nadomestimo z različnimi podatki (uporabniški vnos, sistemski kontekst, zunanji viri itd.) za dinamično generiranje poziva. To nam omogoča ustvarjanje knjižnice ponovno uporabnih pozivov, ki se lahko programsko uporabljajo za zagotavljanje doslednih uporabniških izkušenj v večjem obsegu.
Prava vrednost predlog pa je v možnosti ustvarjanja in objave knjižnic pozivov za vertikalne aplikacijske domene – kjer je predloga poziva zdaj optimizirana tako, da odraža specifičen kontekst aplikacije ali primere, ki naredijo odgovore 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 področje izobraževanja s poudarkom na ključnih ciljih, kot so načrtovanje lekcij, oblikovanje kurikuluma, poučevanje študentov itd.
Če razmišljamo o sestavi poziva kot o navodilu (nalogi) in cilju (primarni vsebini), potem je sekundarna vsebina kot dodaten kontekst, ki ga zagotovimo, da nekako vpliva na izhod. To so lahko nastavitve, navodila za oblikovanje, taksonomije tem itd., ki pomagajo modelu prilagoditi odgovor, da ustreza želenim uporabniškim ciljem ali pričakovanjem.
Na primer: Glede na katalog tečajev z obsežnimi metapodatki (ime, opis, raven, oznake metapodatkov, inštruktor itd.) za vse razpoložljive tečaje v kurikulumu:
- lahko določimo navodilo, da "povzamemo katalog tečajev za jesen 2023"
- uporabimo primarno vsebino za nekaj primerov želenega izhoda
- uporabimo sekundarno vsebino za identifikacijo top 5 "oznak" zanimanja.
Model lahko nato poda povzetek v formatu, prikazanem v nekaj primerih – a če ima rezultat več oznak, lahko prednostno obravnava 5 oznak, določenih v sekundarni vsebini.
Zdaj, ko vemo, kako lahko pozive sestavimo, lahko začnemo razmišljati, kako jih zasnovati, da odražajo najboljše prakse. To lahko razdelimo na dva dela – imeti pravi miselni okvir in uporabiti prave tehnike.
Oblikovanje pozivov je proces poskusov in napak, zato imejte v mislih tri široke vodilne dejavnike:
-
Razumevanje domene je pomembno. Natančnost in relevantnost odgovora sta odvisni od 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 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 usmerite model k znanim vzorcem uporabe.
-
Razumevanje modela je pomembno. Vemo, da so modeli po naravi stohastični. A implementacije modelov se lahko razlikujejo glede na uporabljene učne podatke (predhodno naučeno znanje), zmogljivosti, ki jih nudijo (npr. prek API-ja ali SDK-ja) in vrsto vsebine, za katero so optimizirani (npr. koda, slike, besedilo). Razumite prednosti in omejitve modela, ki ga uporabljate, in to znanje uporabite za prioritizacijo nalog ali izdelavo prilagojenih predlog, optimiziranih za zmogljivosti modela.
-
Ponavljanje in preverjanje sta pomembna. Modeli se hitro razvijajo, prav tako tehnike oblikovanja pozivov. Kot strokovnjak za domeno lahko imate dodatne kontekste ali kriterije za vašo specifično aplikacijo, ki morda ne veljajo za širšo skupnost. Uporabite orodja in tehnike oblikovanja pozivov za "zagon" sestave poziva, nato ponavljajte in preverjajte rezultate z lastno intuicijo in strokovnim znanjem. Zabeležite svoje ugotovitve in ustvarite bazo znanja (npr. knjižnice pozivov), ki jo lahko drugi uporabijo kot novo izhodišče za hitrejše iteracije v prihodnosti.
Poglejmo zdaj pogoste najboljše prakse, ki jih priporočajo OpenAI in Azure OpenAI strokovnjaki.
| Kaj | Zakaj |
|---|---|
| Ocenite najnovejše modele. | Nove generacije modelov imajo verjetno izboljšane funkcije in kakovost – a lahko prinesejo tudi višje stroške. Ocenite njihov vpliv in se nato odločite za migracijo. |
| 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 pomaga modelom natančneje dodeliti uteži posameznim tokenom. |
| Bodite specifični in jasni | Podajte več podrobnosti o želenem kontekstu, izidu, dolžini, formatu, slogu itd. To izboljša tako kakovost kot doslednost odgovorov. Recepti naj bodo zajeti 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 podate navodilo (brez primerov), nato poskusite few-shot kot izboljšavo, kjer podate nekaj primerov želenega izhoda. Uporabite analogije. |
| Uporabite namige za zagon | Usmerite model k želenemu izidu tako, da mu podate nekaj začetnih besed ali fraz, ki jih lahko uporabi kot izhodišče za odgovor. |
| Ponovite, če je potrebno | Včasih je treba modelu ponoviti navodila. Podajte 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 predstavite informacije, lahko vpliva na izhod, tudi v učnih primerih, zaradi pristranskosti do nedavnih informacij. Preizkusite različne možnosti, da vidite, kaj deluje najbolje. |
| Dajte modelu možnost "izhoda" | Dajte modelu rezervni odgovor, ki ga lahko poda, če iz kakršnega koli razloga ne more dokončati naloge. To zmanjša možnost, da model generira napačne ali izmišljene odgovore. |
Kot pri vsaki najboljši praksi, ne pozabite, da se lahko vaša izkušnja razlikuje glede na model, nalogo in domeno. Uporabite jih kot izhodišče in ponavljajte, da najdete, kaj vam najbolj ustreza. Proces oblikovanja pozivov nenehno ponovno ocenjujte, ko so na voljo novi modeli in orodja, s poudarkom na razširljivosti procesa in kakovosti odgovorov.
Čestitke! Prišli ste do konca lekcije! Čas je, da nekaj teh konceptov in tehnik preizkusite na pravih primerih!
Za nalogo bomo uporabili Jupyter Notebook z vajami, ki jih lahko interaktivno rešujete. Notebook lahko tudi razširite z lastnimi Markdown in Code celicami, da sami raziskujete ideje in tehnike.
- (Priporočeno) Zaženite GitHub Codespaces
- (Alternativno) Klonirajte repozitorij na lokalni računalnik in ga uporabite z Docker Desktop
- (Alternativno) Odprite Notebook v svojem priljubljenem okolju za zagon Notebookov.
- Kopirajte datoteko
.env.copyiz korena repozitorija v.envin izpolnite vrednostiAZURE_OPENAI_API_KEY,AZURE_OPENAI_ENDPOINTinAZURE_OPENAI_DEPLOYMENT. Nato se vrnite na razdelek Learning Sandbox, da se naučite, kako.
- Izberite jedro za zagon. Če uporabljate možnosti 1 ali 2, preprosto izberite privzeto Python 3.10.x jedro, ki ga zagotavlja razvojno okolje.
Pripravljeni ste za izvajanje vaj. Upoštevajte, da tukaj ni pravih ali napačnih odgovorov – gre za raziskovanje možnosti z metodo poskusov in napak ter gradnjo intuicije, kaj deluje za določen model in domeno uporabe.
Zaradi tega v tej lekciji ni segmentov s kodo rešitve. Namesto tega bo v Notebooku nekaj Markdown celic z naslovom "Moja rešitev:", ki prikazujejo en primer izhoda za referenco.
Kateri od naslednjih pozivov je dober in sledi nekaterim razumnih najboljših praks?
- Pokaži mi sliko rdečega avtomobila
- Pokaži mi sliko rdečega avtomobila znamke Volvo in modela XC90, parkiranega ob pečini ob zahajajočem soncu
- Pokaži mi sliko rdečega avtomobila znamke Volvo in modela XC90
Odgovor: 2, je najboljši poziv, saj poda podrobnosti o "čemu" in gre v specifičnosti (ne samo kateri koli avto, ampak določen model in znamka) ter opisuje tudi okolje. 3 je naslednji najboljši, saj vsebuje veliko opisov.
Poskusi 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šal?
Želite izvedeti več o različnih konceptih oblikovanja pozivov? Obiščite stran za nadaljnje učenje, kjer boste našli druge odlične vire o tej temi.
Pojdite na Lekcijo 5, kjer bomo pogledali napredne tehnike oblikovanja pozivov!
Omejitev odgovornosti:
Ta dokument je bil preveden z uporabo storitve za avtomatski prevod AI Co-op Translator. Čeprav si prizadevamo za natančnost, vas opozarjamo, da lahko avtomatizirani prevodi vsebujejo napake ali netočnosti. Izvirni dokument v njegovem izvirnem jeziku velja za avtoritativni vir. Za ključne informacije priporočamo strokovni človeški prevod. Za morebitna nesporazume ali napačne interpretacije, ki izhajajo iz uporabe tega prevoda, ne odgovarjamo.







