Ta modul zajema osnovne koncepte in tehnike za ustvarjanje učinkovitih pozivov v generativnih AI modelih. Način, kako napišete svoj poziv LLM, je pomemben. Skrbno oblikovan poziv lahko doseže boljšo kakovost odgovora. Kaj pa pravzaprav pomenijo izrazi, kot sta poziv in načrtovanje pozivov? In kako izboljšam poziv vnos, ki ga pošljem LLM? To so vprašanja, na katera bomo poskušali odgovoriti v tem poglavju in naslednjem.
Generativna AI je sposobna ustvariti novo vsebino (npr. besedilo, slike, zvok, kodo itd.) kot odziv na zahteve uporabnikov. To dosega z uporabo Velikih jezikovnih modelov kot je serija OpenAI GPT ("Generativni predhodno usposobljeni transformator"), ki so usposobljeni za uporabo naravnega jezika in kode.
Uporabniki lahko zdaj komunicirajo s temi modeli s pomočjo znanih paradigmov, kot je klepet, brez potrebe po tehničnem znanju ali usposabljanju. Modeli so na osnovi pozivov - uporabniki pošljejo besedilni vnos (poziv) in prejmejo AI odgovor (dokončanje). Nato lahko "klepetajo z AI" iterativno, v več zavojih pogovorov, izpopolnjujejo svoj poziv, dokler odgovor ne ustreza njihovim pričakovanjem.
"Pozivi" zdaj postanejo primarni programski vmesnik za generativne AI aplikacije, ki modelom povedo, kaj naj storijo in vplivajo na kakovost vrnjenih odgovorov. "Načrtovanje pozivov" je hitro rastoče področje študija, ki se osredotoča na oblikovanje in optimizacijo pozivov za zagotavljanje doslednih in kakovostnih odgovorov v velikem obsegu.
V tej lekciji se naučimo, kaj je načrtovanje pozivov, zakaj je pomembno, in kako lahko oblikujemo bolj učinkovite pozive za določen model in cilj aplikacije. Razumeli bomo osnovne koncepte in najboljše prakse za načrtovanje pozivov - ter se seznanili z interaktivnim okoljem "sandbox" v Jupyter Notebooks, kjer lahko te koncepte vidimo v resničnih primerih.
Do konca te lekcije bomo sposobni:
- Pojasniti, kaj je načrtovanje pozivov in zakaj je pomembno.
- Opisati komponente poziva in kako se uporabljajo.
- Naučiti se najboljših praks in tehnik za načrtovanje pozivov.
- Uporabiti naučene tehnike na resničnih primerih, z uporabo OpenAI endpointa.
Načrtovanje pozivov: Praksa oblikovanja in izpopolnjevanja vnosov za usmerjanje AI modelov k ustvarjanju želenih rezultatov. Tokenizacija: Proces pretvorbe besedila v manjše enote, imenovane tokeni, ki jih model lahko razume in obdela. LLM-ji uglašeni z navodili: Veliki jezikovni modeli (LLM-ji), ki so bili fino uglašeni s specifičnimi navodili za izboljšanje natančnosti in ustreznosti njihovih odgovorov.
Načrtovanje pozivov je trenutno bolj umetnost kot znanost. Najboljši način za izboljšanje naše intuicije za to je, da več vadimo in sprejmemo pristop poskusov in napak, ki združuje strokovno znanje na področju aplikacij z priporočljivimi tehnikami in modelno specifičnimi optimizacijami.
Jupyter Notebook, ki spremlja to lekcijo, zagotavlja sandbox okolje, kjer lahko preizkusite, kar se naučite - med učenjem ali kot del kode izziva na koncu. Za izvedbo vaj boste potrebovali:
- Azure OpenAI API ključ - storitveni endpoint za uveden LLM.
- Python Runtime - v katerem se lahko izvede Notebook.
- Lokalne okoljske spremenljivke - izpolnite korake SETUP, da se pripravite.
Notebook vsebuje začetne vaje - vendar ste spodbujeni, da dodate svoje Markdown (opis) in Code (zahteve za poziv) sekcije, da preizkusite več primerov ali idej - in zgradite svojo intuicijo za oblikovanje pozivov.
Želite dobiti celotno sliko o tem, kaj ta lekcija zajema, preden se potopite vanjo? Oglejte si ta ilustrirani vodnik, ki vam daje občutek glavnih tem, ki jih zajema, in ključne zaključke, o katerih lahko razmislite v vsakem od njih. Načrt lekcije vas vodi od razumevanja osnovnih konceptov in izzivov do njihovega naslavljanja z ustreznimi tehnikami načrtovanja pozivov in najboljšimi praksami. Upoštevajte, da se oddelek "Napredne tehnike" v tem vodniku nanaša na vsebino, zajeto v naslednjem poglavju tega kurikuluma.
Zdaj pa se pogovorimo o tem, kako ta tema se nanaša na našo startup misijo prinašanja AI inovacij v izobraževanje. Želimo zgraditi AI-poganjane aplikacije za personalizirano učenje - zato razmislimo, kako različni uporabniki naše aplikacije lahko "oblikujejo" pozive:
- Administratorji bi lahko prosili AI, da analizira podatke o kurikulu, da identificira vrzeli v pokritosti. AI lahko povzame rezultate ali jih vizualizira s kodo.
- Izobraževalci bi lahko prosili AI, da ustvari načrt lekcije za ciljno občinstvo in temo. AI lahko zgradi personaliziran načrt v določenem formatu.
- Študenti bi lahko prosili AI, da jih poučuje v težki temi. AI lahko zdaj 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 kurirajo izobraževalni strokovnjaki - da dobite širši občutek možnosti! Preizkusite nekaj teh pozivov v sandboxu ali z uporabo OpenAI Playground, da vidite, kaj se zgodi!
To lekcijo smo začeli z definiranjem načrtovanja pozivov kot procesa oblikovanja in optimizacije besedilnih vnosov (pozivov) za zagotavljanje doslednih in kakovostnih odgovorov (dokončanj) za določen cilj aplikacije in model. To lahko mislimo kot 2-stopenjski proces:
- oblikovanje začetnega poziva za določen model in cilj
- izpopolnjevanje poziva iterativno za izboljšanje kakovosti odgovora
To je nujno proces poskusov in napak, ki zahteva intuicijo uporabnika in trud za dosego optimalnih rezultatov. Zakaj je to pomembno? Da odgovorimo na to vprašanje, moramo najprej razumeti tri koncepte:
- Tokenizacija = kako model "vidi" poziv
- Osnovni LLM-ji = kako temeljni model "procesira" poziv
- LLM-ji uglašeni z navodili = kako model lahko zdaj vidi "naloge"
LLM vidi pozive kot zaporedje tokenov, kjer lahko različni modeli (ali različice modela) tokenizirajo isti poziv na različne načine. Ker so LLM-ji usposobljeni na tokenih (in ne na surovem besedilu), način, kako se pozivi tokenizirajo, neposredno vpliva na kakovost generiranega odgovora.
Da dobite intuicijo, kako tokenizacija deluje, preizkusite orodja, kot je OpenAI Tokenizer, prikazano spodaj. Kopirajte svoj poziv - in si oglejte, kako se pretvori v tokene, pri čemer bodite pozorni, kako se obravnavajo znaki praznega prostora in ločila. Upoštevajte, da ta primer prikazuje starejši LLM (GPT-3) - zato lahko poskus s novejšim modelom povzroči drugačen rezultat.
Ko je poziv tokeniziran, je primarna funkcija "Osnovnega LLM-ja" (ali temeljnega modela) napovedovanje tokena v tem zaporedju. Ker so LLM-ji usposobljeni na ogromnih besedilnih zbirkah podatkov, imajo dober občutek za statistične odnose med tokeni in lahko to napoved naredijo z določeno stopnjo zaupanja. Upoštevajte, da ne razumejo pomena besed v pozivu ali tokenu; vidijo le vzorec, ki ga lahko "dokončajo" z naslednjo napovedjo. Lahko nadaljujejo napovedovanje zaporedja, dokler ga ne prekine uporabniški poseg ali neka predhodno določena pogoj.
Želite videti, kako deluje dokončanje na osnovi pozivov? Vnesite zgornji poziv v Azure OpenAI Studio Chat Playground z privzetimi nastavitvami. Sistem je konfiguriran tako, da obravnava pozive kot zahteve za informacije - zato bi morali videti dokončanje, ki ustreza temu kontekstu.
Kaj pa, če bi uporabnik želel videti nekaj specifičnega, kar ustreza nekaterim merilom ali ciljem naloge? Tukaj pridejo v poštev LLM-ji uglašeni z navodili.
LLM uglašen z navodili začne s temeljnim modelom in ga fino uglašuje z zgledi ali pari vhod/izhod (npr. večzavojnimi "sporočili"), ki lahko vsebujejo jasna navodila - in odgovor AI poskuša slediti tem navodilom.
To uporablja tehnike, kot je krepitev učenja s povratnimi informacijami uporabnikov (RLHF), ki lahko model usposobi za sledenje navodilom in učenje iz povratnih informacij, tako da ustvarja odgovore, ki so bolj primerni za praktične aplikacije in bolj relevantni za cilje uporabnikov.
Poskusimo - ponovno preglejte zgornji poziv, vendar zdaj spremenite sistemsko sporočilo, da zagotovite naslednje navodilo kot kontekst:
Povzemite vsebino, ki vam je dana, za učenca drugega razreda. Rezultat naj bo en odstavek s 3-5 točkami.
Vidite, kako je rezultat zdaj uglašen, da odraža želeni cilj in format? Izobraževalec lahko zdaj neposredno uporabi ta odgovor v svojih diapozitivih za to razred.
Zdaj, ko vemo, kako pozive obdelujejo LLM-ji, se pogovorimo o zakaj potrebujemo načrtovanje pozivov. Odgovor leži v dejstvu, da trenutni LLM-ji postavljajo številne izzive, zaradi katerih je zanesljivo in dosledno dokončanje težje doseči brez truda pri konstrukciji in optimizaciji pozivov. Na primer:
-
Odgovori modela so stohastični. Isti poziv bo verjetno ustvaril različne odgovore z različnimi modeli ali različicami modela. In lahko celo ustvari različne rezultate z istim modelom ob različnih časih. Tehnike načrtovanja pozivov nam lahko pomagajo zmanjšati te variacije z zagotavljanjem boljših varoval.
-
Modeli lahko izmišljajo odgovore. Modeli so predhodno usposobljeni z velikimi, a končnimi zbirkami podatkov, kar pomeni, da jim primanjkuje znanja o konceptih zunaj tega obsega usposabljanja. Posledično lahko ustvarijo dokončanja, ki so netočna, izmišljena ali neposredno nasprotujoča znanim dejstvom. Tehnike načrtovanja pozivov pomagajo uporabnikom prepoznati in omiliti takšne izmišljotine, npr. z zahtevanjem AI za citate ali razloge.
-
Zmožnosti modelov se bodo razlikovale. Novejši modeli ali generacije modelov bodo imeli bogatejše zmožnosti, vendar bodo prinesli tudi edinstvene posebnosti in kompromise v stroških in kompleksnosti. Načrtovanje pozivov nam lahko pomaga razviti najboljše prakse in delovne tokove, ki abstrahirajo razlike in se prilagajajo specifičnim zahtevam modela na skalabilne, brezhibne načine.
Poglejmo to v akciji v OpenAI ali Azure OpenAI Playground:
- Uporabite isti poziv z različnimi LLM uvedbami (npr. OpenAI, Azure OpenAI, Hugging Face) - ste opazili variacije?
- Uporabite isti poziv večkrat z istim LLM uvedbo (npr. Azure OpenAI playground) - kako so se te variacije razlikovale?
V tem tečaju uporabljamo izraz "izmišljotina" za opis pojava, kjer LLM-ji včasih ustvarijo dejansko napačne informacije zaradi omejitev v njihovem usposabljanju ali drugih omejitev. Morda ste to slišali tudi kot "halucinacije" v popularnih člankih ali raziskovalnih prispevkih. Vendar močno priporočamo uporabo izraza "izmišljotina" kot izraza, da ne bi nenamerno antropomorfizirali vedenja z pripisovanjem človeške lastnosti rezultatu, ki ga poganja stroj. To tudi krepi smernice za odgovorno AI z vidika terminologije, odstranjuje izraze, ki bi jih lahko v nekaterih kontekstih obravnavali kot žaljive ali neinkluzivne.
Želite dobiti občutek, kako izmišljotine delujejo? Pomislite na poziv, ki AI naroča, naj ustvari vsebino za neobstoječo temo (da se prepričate, da ni v usposobitvenem naboru podatkov). Na primer - poskusil sem ta poziv:
Poziv: ustvarite načrt lekcije o Marsovski vojni leta 2076.
Spletno iskanje mi je pokazalo, da so obstajali izmišljeni računi (npr. televizijske serije ali knjige) o Marsovskih vojnah - vendar nobena leta 2076. Zdrava pamet nam tudi pove, da je leto 2076 v prihodnosti in zato ne more biti povezano z resničnim dogodkom.
Kaj se zgodi, ko zaženemo ta poziv z različnimi LLM ponudniki?
Odgovor 1: OpenAI Playground (GPT-35)
Odgovor 2: Azure OpenAI Playground (GPT-35)
Odgovor 3: Hugging Face Chat Playground (LLama-2)
Kot pričakovano, vsak model (ali različica modela) ustvari nekoliko različne odgovore zaradi stohastičnega vedenja in variacij zmožnosti modela. Na primer, en model cilja na občinstvo 8. razreda, medtem ko drugi predvideva srednješolskega učenca. Vendar so vsi trije modeli ustvarili odgovore, ki bi lahko prepričali neinformiranega uporabnika, da je dogodek resničen.
Tehnike načrtovanja pozivov, kot sta metaprompting in konfiguracija temperature, lahko do neke mere zmanjšajo izmišljotine modelov. Nove arhitekture načrtovanja pozivov prav tako vključujejo nova orodja in tehnike brezhibno v tok poziva, da omilijo ali zmanjšajo nekatere od teh učinkov.
Zaključimo ta oddelek z občutkom, kako se načrtovanje pozivov uporablja v resničnih rešitvah, tako da Končno, prava vrednost predlog je v sposobnosti ustvarjanja in objavljanja knjižnic predlog za vertikalna področja uporabe - kjer je predloga sedaj optimizirana tako, da odraža specifičen kontekst ali primere, ki naredijo odgovore bolj relevantne in natančne za ciljno občinstvo. Repozitorij Prompts For Edu je odličen primer tega pristopa, saj zbira knjižnico predlog za izobraževalno področje s poudarkom na ključnih ciljih, kot so načrtovanje lekcij, oblikovanje kurikuluma, mentorstvo študentov itd.
Če razmišljamo o konstrukciji predlog kot o navodilu (nalogi) in cilju (primarni vsebini), potem je sekundarna vsebina kot dodatni kontekst, ki ga zagotovimo za vplivanje na izhod na nek način. Lahko gre za prilagoditvene parametre, navodila za oblikovanje, taksonomije tem itd., ki lahko pomagajo modelu prilagoditi svoj odgovor, da ustreza želenim ciljem ali pričakovanjem uporabnika.
Na primer: Glede na katalog tečajev z obsežnimi metapodatki (ime, opis, raven, oznake metapodatkov, inštruktor itd.) o vseh razpoložljivih tečajih v kurikulumu:
- lahko definiramo navodilo za "povzetek kataloga tečajev za jesen 2023"
- lahko uporabimo primarno vsebino, da zagotovimo nekaj primerov želenega izhoda
- lahko uporabimo sekundarno vsebino, da identificiramo top 5 "oznak" zanimanja.
Sedaj lahko model zagotovi povzetek v formatu, ki ga prikazujejo primeri - vendar če rezultat vsebuje več oznak, lahko prioritizira 5 oznak, identificiranih v sekundarni vsebini.
Sedaj, ko vemo, kako lahko predloge konstrukcijsko, lahko začnemo razmišljati o tem, kako jih oblikovati, da odražajo najboljše prakse. O tem lahko razmišljamo v dveh delih - imeti pravo miselnost in uporabiti prave tehnike.
Oblikovanje predlog 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 domene, v kateri aplikacija ali uporabnik deluje. Uporabite svojo intuicijo in strokovno znanje na področju domene za nadaljnje prilagajanje tehnik. Na primer, definirajte specifične osebnosti domene v svojih sistemskih predlogah ali uporabite specifične predloge domene v svojih uporabniških predlogah. 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. Toda implementacije modelov se lahko razlikujejo tudi glede na podatkovne nize, ki jih uporabljajo za usposabljanje (predhodno znanje), sposobnosti, ki jih zagotavljajo (npr. preko API ali SDK) in vrsto vsebine, za katero so optimizirani (npr. koda proti slikam proti besedilu). Razumite prednosti in omejitve modela, ki ga uporabljate, in uporabite to znanje za prioritizacijo nalog ali gradnjo prilagojenih predlog, ki so optimizirane za sposobnosti modela.
-
Iteracija in validacija sta pomembni. Modeli se hitro razvijajo, prav tako tudi tehnike za oblikovanje predlog. Kot strokovnjak na področju domene lahko imate drug kontekst ali merila za vašo specifično aplikacijo, ki morda ne veljajo za širšo skupnost. Uporabite orodja in tehnike za oblikovanje predlog, da "začnete" konstrukcijo predlog, nato iterirajte in validirajte rezultate z uporabo lastne intuicije in strokovnega znanja na področju domene. Zabeležite svoje vpoglede in ustvarite bazo znanja (npr. knjižnice predlog), ki jo lahko drugi uporabijo kot novo izhodišče za hitrejše iteracije v prihodnosti.
Sedaj si poglejmo pogoste najboljše prakse, ki jih priporočajo praktiki OpenAI in Azure OpenAI.
| Kaj | Zakaj |
|---|---|
| Ocenite najnovejše modele. | Nove generacije modelov verjetno ponujajo izboljšane funkcije in kakovost - vendar lahko povzročijo tudi višje stroške. Ocenite jih za vpliv, nato sprejmite odločitve o migraciji. |
| Ločite navodila in kontekst | Preverite, ali vaš model/ponudnik definira mejnike za jasnejše ločevanje navodil, primarne in sekundarne vsebine. To lahko pomaga modelom natančneje dodeliti uteži tokenom. |
| Bodite specifični in jasni | Podajte več podrobnosti o želenem kontekstu, izidu, dolžini, formatu, slogu itd. To bo izboljšalo tako kakovost kot doslednost odgovorov. 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 approach where you give it an instruction (but no examples) then try few-shot as a refinement, providing a few examples of the desired output. Use analogies. |
| Use cues to jumpstart completions | Nudge it towards a desired outcome by giving it some leading words or phrases that it can use as a starting point for the response. |
| Double Down | Sometimes you may need to repeat yourself to the model. Give instructions before and after your primary content, use an instruction and a cue, etc. Iterate & validate to see what works. |
| Order Matters | The order in which you present information to the model may impact the output, even in the learning examples, thanks to recency bias. Try different options to see what works best. |
| Give the model an “out” | Give the model a fallback completion response it can provide if it cannot complete the task for any reason. This can reduce chances of models generating false or fabricated responses. |
As with any best practice, remember that your mileage may vary based on the model, the task and the domain. Use these as a starting point, and iterate to find what works best for you. Constantly re-evaluate your prompt engineering process as new models and tools become available, with a focus on process scalability and response quality.
Congratulations! You made it to the end of the lesson! It's time to put some of those concepts and techniques to the test with real examples!
For our assignment, we'll be using a Jupyter Notebook with exercises you can complete interactively. You can also extend the Notebook with your own Markdown and Code cells to explore ideas and techniques on your own.
- (Recommended) Launch GitHub Codespaces
- (Alternatively) Clone the repo to your local device and use it with Docker Desktop
- (Alternatively) Open the Notebook with your preferred Notebook runtime environment.
- Copy the
.env.copyfile in repo root to.envand fill in theAZURE_OPENAI_API_KEY,AZURE_OPENAI_ENDPOINTandAZURE_OPENAI_DEPLOYMENTvrednostmi. Vrnite se na odsek Učilnica za učenje, da se naučite, kako.
- Izberite jedro izvajanja. Če uporabljate možnosti 1 ali 2, preprosto izberite privzeto jedro Python 3.10.x, ki ga zagotavlja razvojna posoda.
Pripravljeni ste za izvajanje vaj. Upoštevajte, da tukaj ni pravih in napačnih odgovorov - samo raziskovanje možnosti s poskusi in napakami ter gradnja intuicije za to, kaj deluje za določen model in področje uporabe.
Zaradi tega v tej lekciji ni segmentov z rešitvami kode. Namesto tega bo zvezek imel Markdown celice z naslovom "Moja rešitev:", ki prikazuje en primer izhoda za referenco.
Kateri od naslednjih je dobra predloga, ki sledi nekaterim razumnim najboljšim praksam?
- Pokaži mi sliko rdečega avtomobila
- Pokaži mi sliko rdečega avtomobila znamke Volvo in modela XC90, parkiranega ob pečini ob sončnem zahodu
- Pokaži mi sliko rdečega avtomobila znamke Volvo in modela XC90
A: 2, to je najboljša predloga, saj nudi podrobnosti o "čem" in gre v specifičnosti (ne samo kateri koli avto, ampak določena znamka in model) in prav tako opisuje celoten kontekst. 3 je naslednja najboljša, saj vsebuje veliko opisov.
Preverite, ali lahko izkoristite tehniko "namiga" s predlogo: Dokončajte stavek "Pokaži mi sliko rdečega avtomobila znamke Volvo in ". Kaj odgovori, in kako bi ga izboljšali?
Želite izvedeti več o različnih konceptih oblikovanja predlog? 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 predlog!
Omejitev odgovornosti:
Ta dokument je bil preveden z uporabo storitve za prevajanje z umetno inteligenco Co-op Translator. Čeprav si prizadevamo za natančnost, vas opozarjamo, da lahko avtomatizirani prevodi vsebujejo napake ali netočnosti. Izvirni dokument v njegovem maternem jeziku je treba obravnavati kot avtoritativni vir. Za kritične informacije se priporoča profesionalni prevod s strani človeka. Ne prevzemamo odgovornosti za morebitna nesporazumevanja ali napačne razlage, ki izhajajo iz uporabe tega prevoda.