Ovaj modul pokriva osnovne pojmove i tehnike za stvaranje učinkovitih upita u generativnim AI modelima. Način na koji pišete svoj upit za LLM također je važan. Pažljivo osmišljen upit može postići bolju kvalitetu odgovora. Ali što točno znače pojmovi poput upit i projektiranje upita? I kako mogu poboljšati unos upita koji šaljem LLM-u? To su pitanja na koja ćemo pokušati odgovoriti u ovom i sljedećem poglavlju.
Generativna AI je sposobna stvarati novi sadržaj (npr. tekst, slike, audio, kod itd.) kao odgovor na zahtjeve korisnika. To postiže koristeći Velike Jezične Modele kao što je OpenAI-jev GPT ("Generative Pre-trained Transformer") serija, koja je trenirana za korištenje prirodnog jezika i koda.
Korisnici sada mogu komunicirati s ovim modelima koristeći poznate paradigme poput chata, bez potrebe za tehničkim znanjem ili obukom. Modeli su temeljeni na upitima - korisnici šalju tekstualni unos (upit) i dobivaju AI odgovor (dovršetak). Tada mogu "razgovarati s AI-jem" iterativno, u višekratnim razgovorima, usavršavajući svoj upit dok odgovor ne zadovolji njihova očekivanja.
"Upiti" sada postaju primarno programsko sučelje za generativne AI aplikacije, govoreći modelima što trebaju raditi i utječući na kvalitetu vraćenih odgovora. "Projektiranje upita" je brzo rastuće područje proučavanja koje se fokusira na dizajn i optimizaciju upita kako bi se isporučili dosljedni i kvalitetni odgovori u velikom obimu.
U ovoj lekciji naučit ćemo što je projektiranje upita, zašto je važno i kako možemo oblikovati učinkovitije upite za određeni model i cilj aplikacije. Razumjet ćemo osnovne pojmove i najbolje prakse za projektiranje upita - i saznati više o interaktivnom okruženju "sandbox" u Jupyter Notebooks gdje možemo vidjeti primjenu ovih pojmova na stvarnim primjerima.
Do kraja ove lekcije moći ćemo:
- Objasniti što je projektiranje upita i zašto je važno.
- Opisati komponente upita i kako se koriste.
- Naučiti najbolje prakse i tehnike za projektiranje upita.
- Primijeniti naučene tehnike na stvarne primjere, koristeći OpenAI endpoint.
Projektiranje upita: Praksa dizajniranja i usavršavanja unosa kako bi se AI modeli usmjerili prema proizvodnji željenih izlaza. Tokenizacija: Proces pretvaranja teksta u manje jedinice, nazvane tokeni, koje model može razumjeti i obraditi. LLM-ovi usklađeni s uputama: Veliki Jezični Modeli (LLM-ovi) koji su fino podešeni s određenim uputama kako bi poboljšali točnost i relevantnost svojih odgovora.
Projektiranje upita trenutno je više umjetnost nego znanost. Najbolji način da poboljšamo našu intuiciju za to je više vježbati i usvojiti pristup pokušaja i pogrešaka koji kombinira stručnost u domeni aplikacije s preporučenim tehnikama i optimizacijama specifičnim za model.
Jupyter Notebook koji prati ovu lekciju pruža sandbox okruženje gdje možete isprobati ono što naučite - kako idete ili kao dio izazova kodiranja na kraju. Za izvođenje vježbi trebat će vam:
- Azure OpenAI API ključ - krajnja točka usluge za implementirani LLM.
- Python Runtime - u kojem se Notebook može izvesti.
- Lokalne varijable okoline - dovršite korake SETUP sada kako biste bili spremni.
Notebook dolazi s početnim vježbama - ali potiče vas da dodate vlastite Markdown (opis) i Code (zahtjevi za upit) sekcije kako biste isprobali više primjera ili ideja - i izgradili svoju intuiciju za dizajn upita.
Želite li dobiti opću sliku o tome što ova lekcija pokriva prije nego što se upustite? Pogledajte ovaj ilustrirani vodič koji vam daje osjećaj za glavne teme koje se obrađuju i ključne spoznaje o kojima trebate razmišljati u svakoj od njih. Putokaz lekcije vodi vas od razumijevanja osnovnih pojmova i izazova do njihovog rješavanja relevantnim tehnikama projektiranja upita i najboljim praksama. Imajte na umu da se odjeljak "Napredne tehnike" u ovom vodiču odnosi na sadržaj obrađen u sljedećem poglavlju ovog kurikuluma.
Sada, razgovarajmo o tome kako se ova tema odnosi na našu misiju startupa da donese AI inovacije u obrazovanje. Želimo izgraditi AI aplikacije za personalizirano učenje - pa razmislimo o tome kako različiti korisnici naše aplikacije mogu "dizajnirati" upite:
- Administratori mogu zamoliti AI da analizira podatke kurikuluma kako bi identificirao praznine u pokrivenosti. AI može sažeti rezultate ili ih vizualizirati pomoću koda.
- Nastavnici mogu zamoliti AI da generira plan lekcije za ciljanog korisnika i temu. AI može izraditi personalizirani plan u specificiranom formatu.
- Učenici mogu zamoliti AI da ih podučava u teškom predmetu. AI sada može voditi učenike s lekcijama, savjetima i primjerima prilagođenima njihovoj razini.
To je samo vrh ledenog brijega. Pogledajte Upiti za obrazovanje - otvorenu biblioteku upita koju su kreirali stručnjaci za obrazovanje - kako biste dobili širi osjećaj za mogućnosti! Pokušajte pokrenuti neke od tih upita u sandboxu ili pomoću OpenAI Playground-a da vidite što će se dogoditi!
Započeli smo ovu lekciju definiranjem projektiranja upita kao procesa dizajniranja i optimizacije tekstualnih unosa (upita) kako bi se isporučili dosljedni i kvalitetni odgovori (dovršetci) za određeni cilj aplikacije i model. Možemo to zamisliti kao dvostupanjski proces:
- dizajniranje početnog upita za određeni model i cilj
- usavršavanje upita iterativno kako bi se poboljšala kvaliteta odgovora
Ovo je nužno proces pokušaja i pogrešaka koji zahtijeva korisničku intuiciju i trud kako bi se postigli optimalni rezultati. Pa zašto je to važno? Da bismo odgovorili na to pitanje, prvo moramo razumjeti tri pojma:
- Tokenizacija = kako model "vidi" upit
- Osnovni LLM-ovi = kako osnovni model "obrađuje" upit
- LLM-ovi usklađeni s uputama = kako model sada može vidjeti "zadake"
LLM vidi upite kao sekvencu tokena gdje različiti modeli (ili verzije modela) mogu tokenizirati isti upit na različite načine. Budući da su LLM-ovi trenirani na tokenima (a ne na sirovom tekstu), način na koji se upiti tokeniziraju ima izravan utjecaj na kvalitetu generiranog odgovora.
Da biste stekli intuiciju o tome kako tokenizacija funkcionira, isprobajte alate poput OpenAI Tokenizatora prikazanog dolje. Kopirajte svoj upit - i pogledajte kako se to pretvara u tokene, obraćajući pažnju na to kako se rukuje znakovima razmaka i interpunkcijskim znakovima. Imajte na umu da ovaj primjer prikazuje stariji LLM (GPT-3) - pa pokušaj s novijim modelom može dati drugačiji rezultat.
Nakon što je upit tokeniziran, primarna funkcija "Osnovnog LLM-a" (ili Osnovnog modela) je predvidjeti token u toj sekvenci. Budući da su LLM-ovi trenirani na masivnim skupovima podataka, imaju dobar osjećaj za statističke odnose između tokena i mogu napraviti to predviđanje s određenim povjerenjem. Imajte na umu da ne razumiju značenje riječi u upitu ili tokenu; oni samo vide uzorak koji mogu "dovršiti" svojim sljedećim predviđanjem. Oni mogu nastaviti predviđati sekvencu dok ih korisnik ne prekine ili dok se ne ispuni neki unaprijed postavljeni uvjet.
Želite li vidjeti kako funkcionira dovršavanje temeljeno na upitu? Unesite gornji upit u Azure OpenAI Studio Chat Playground s zadanim postavkama. Sustav je konfiguriran da tretira upite kao zahtjeve za informacijama - tako da biste trebali vidjeti dovršetak koji zadovoljava ovaj kontekst.
Ali što ako korisnik želi vidjeti nešto specifično što zadovoljava neke kriterije ili ciljeve zadatka? Tu na scenu stupaju LLM-ovi usklađeni s uputama.
LLM usklađen s uputama započinje s osnovnim modelom i fino ga podešava s primjerima ili parovima ulaz/izlaz (npr. višekratnim "porukama") koji mogu sadržavati jasne upute - i odgovor AI-ja pokušava slijediti tu uputu.
Ovo koristi tehnike poput učenja pojačanja s povratnim informacijama ljudi (RLHF) koje mogu trenirati model da slijedi upute i uči iz povratnih informacija kako bi proizvodio odgovore koji su bolje prilagođeni praktičnim primjenama i relevantniji za korisničke ciljeve.
Isprobajmo - vratite se na gornji upit, ali sada promijenite sustavsku poruku kako biste pružili sljedeću uputu kao kontekst:
Sažmi sadržaj koji ti je dostavljen za učenika drugog razreda. Zadrži rezultat na jednom odlomku s 3-5 točaka.
Vidite li kako je rezultat sada usklađen s željenim ciljem i formatom? Nastavnik sada može izravno koristiti ovaj odgovor u svojim prezentacijama za taj razred.
Sada kada znamo kako LLM-ovi obrađuju upite, razgovarajmo o zašto nam je potrebno projektiranje upita. Odgovor leži u činjenici da trenutni LLM-ovi postavljaju niz izazova koji otežavaju pouzdano i dosljedno dovršavanje bez ulaganja truda u konstrukciju i optimizaciju upita. Na primjer:
-
Odgovori modela su stohastički. Isti upit vjerojatno će proizvesti različite odgovore s različitim modelima ili verzijama modela. I može čak proizvesti različite rezultate s istim modelom u različitim vremenima. Tehnike projektiranja upita mogu nam pomoći da minimiziramo te varijacije pružanjem boljih ograda.
-
Modeli mogu izmišljati odgovore. Modeli su unaprijed obučeni s velikim, ali konačnim skupovima podataka, što znači da im nedostaje znanje o pojmovima izvan tog opsega obuke. Kao rezultat toga, mogu proizvesti dovršetke koji su netočni, izmišljeni ili izravno proturječni poznatim činjenicama. Tehnike projektiranja upita pomažu korisnicima identificirati i ublažiti takve izmišljotine, npr. traženjem AI-ja za citatima ili razlozima.
-
Sposobnosti modela će varirati. Noviji modeli ili generacije modela imat će bogatije sposobnosti, ali također donose jedinstvene hirove i kompromise u troškovima i složenosti. Projektiranje upita može nam pomoći da razvijemo najbolje prakse i tijekove rada koji apstrahiraju razlike i prilagođavaju se zahtjevima specifičnim za model na skalabilan, besprijekoran način.
Pogledajmo ovo u akciji u OpenAI ili Azure OpenAI Playground:
- Koristite isti upit s različitim LLM implementacijama (npr. OpenAI, Azure OpenAI, Hugging Face) - jeste li vidjeli varijacije?
- Koristite isti upit više puta s istom LLM implementacijom (npr. Azure OpenAI playground) - kako su se te varijacije razlikovale?
U ovom tečaju koristimo izraz "izmišljotina" kako bismo označili fenomen gdje LLM-ovi ponekad generiraju činjenično netočne informacije zbog ograničenja u svojoj obuci ili drugim ograničenjima. Možda ste također čuli da se to naziva "halucinacijama" u popularnim člancima ili istraživačkim radovima. Međutim, snažno preporučujemo korištenje izraza "izmišljotina" kako ne bismo slučajno antropomorfizirali ponašanje pripisujući ljudsku osobinu ishodu koji pokreće stroj. Ovo također pojačava smjernice za odgovornu AI iz perspektive terminologije, uklanjajući termine koji se u nekim kontekstima također mogu smatrati uvredljivima ili neinkluzivnima.
Želite li dobiti osjećaj kako izmišljotine funkcioniraju? Zamislite upit koji upućuje AI da generira sadržaj za nepostojeću temu (kako bi se osiguralo da nije pronađena u skupu podataka za obuku). Na primjer - isprobao sam ovaj upit:
Upit: generiraj plan lekcije o Marsovskom ratu 2076.
Web pretraga mi je pokazala da postoje izmišljeni prikazi (npr. televizijske serije ili knjige) o Marsovskim ratovima - ali nijedan 2076. Zdrav razum nam također govori da je 2076. u budućnosti i stoga se ne može povezati s stvarnim događajem.
Pa što se događa kada pokrenemo ovaj upit s različitim pružateljima LLM-a?
Kao što se očekivalo, svaki model (ili verzija modela) proizvodi malo drugačije odgovore zahvaljujući stohastičkom ponašanju i varijacijama u sposobnostima modela. Na primjer, jedan model cilja publiku osmog razreda, dok drugi pretpostavlja srednjoškolskog učenika. Ali svi su modeli generirali odgovore koji bi mogli uvjeriti neinformiranog korisnika da je događaj stvaran.
Tehnike projektiranja upita poput metapromptiranja i konfiguracije temperature mogu smanjiti izmišljotine modela do određene mjere. Nove arhitekture projektiranja upita također besprijekorno integriraju nove alate i tehnike u tijek upita kako bi ublažile ili smanjile neke od ovih efekata.
Završimo ovaj odjeljak dobivanjem osjećaja za to kako se projektiranje upita koristi u stvarnim rješenjima, pogledom na jednu Studiju slučaja: GitHub Copilot.
GitHub Copilot je vaš "AI parni programer" - pretvara tekstualne upite u dovršetke koda i integriran je u vaše razvojno okruženje (npr. Visual Studio Code) za besprijekorno korisničko iskustvo. Kao što je dokumentirano u seriji blogova u nastavku, najranija verzija temeljila se na OpenAI Codex modelu - s inženjerima Konačna vrijednost predložaka leži u sposobnosti stvaranja i objavljivanja biblioteka promptova za vertikalne domene primjene - gdje je predložak prompta sada optimiziran kako bi odražavao kontekst specifičan za aplikaciju ili primjere koji čine odgovore relevantnijima i točnijima za ciljanu publiku korisnika. Prompts For Edu repozitorij je izvrstan primjer ovog pristupa, kreirajući biblioteku promptova za obrazovni domen s naglaskom na ključne ciljeve kao što su planiranje lekcija, dizajn kurikuluma, podučavanje studenata itd.
Ako razmišljamo o konstrukciji promptova kao o zadatku (instrukciji) i cilju (primarni sadržaj), tada je sekundarni sadržaj poput dodatnog konteksta koji pružamo kako bismo na neki način utjecali na ishod. To mogu biti parametri podešavanja, upute za formatiranje, taksonomije tema itd. koji mogu pomoći modelu da prilagodi svoj odgovor kako bi odgovarao željenim ciljevima ili očekivanjima korisnika.
Na primjer: Dajući katalog tečajeva s opsežnim metapodacima (naziv, opis, razina, oznake metapodataka, instruktor itd.) o svim dostupnim tečajevima u kurikulumu:
- možemo definirati instrukciju za "sažimanje kataloga tečajeva za jesen 2023."
- možemo koristiti primarni sadržaj da pružimo nekoliko primjera željenog ishoda
- možemo koristiti sekundarni sadržaj da identificiramo top 5 "oznaka" od interesa.
Sada, model može pružiti sažetak u formatu prikazanom kroz nekoliko primjera - ali ako rezultat ima više oznaka, može dati prioritet 5 oznaka identificiranih u sekundarnom sadržaju.
Sada kada znamo kako se promptovi mogu konstruirati, možemo početi razmišljati o tome kako ih dizajnirati da odražavaju najbolje prakse. Možemo o tome razmišljati u dva dijela - imati pravi mentalni sklop i primijeniti prave tehnike.
Inženjering promptova je proces pokušaja i pogrešaka, pa imajte na umu tri široka čimbenika:
-
Razumijevanje Domena je važno. Točnost i relevantnost odgovora funkcija je domena u kojem ta aplikacija ili korisnik djeluje. Primijenite svoju intuiciju i stručnost u domeni kako biste dodatno prilagodili tehnike. Na primjer, definirajte specifične osobnosti za domenu u vašim sistemskim promptovima ili koristite specifične predloške za domenu u vašim korisničkim promptovima. Pružite sekundarni sadržaj koji odražava kontekste specifične za domenu ili koristite specifične znakove i primjere za domenu kako biste vodili model prema poznatim obrascima korištenja.
-
Razumijevanje Modela je važno. Znamo da su modeli po prirodi stohastički. Ali implementacije modela također mogu varirati u pogledu skupa podataka za obuku koji koriste (prethodno naučeno znanje), mogućnosti koje pružaju (npr. putem API-ja ili SDK-a) i vrste sadržaja za koje su optimizirani (npr. kod vs. slike vs. tekst). Razumijte snage i ograničenja modela koji koristite i koristite to znanje za prioritizaciju zadataka ili izgradnju prilagođenih predložaka optimiziranih za sposobnosti modela.
-
Iteracija i Validacija su važne. Modeli se brzo razvijaju, kao i tehnike za inženjering promptova. Kao stručnjak za domenu, možda imate drugi kontekst ili kriterije za vašu specifičnu primjenu, koji možda ne vrijede za širu zajednicu. Koristite alate i tehnike za inženjering promptova da "započnete" konstrukciju promptova, a zatim iterirajte i validirajte rezultate koristeći vlastitu intuiciju i stručnost u domeni. Zabilježite svoje uvide i stvorite bazu znanja (npr. biblioteke promptova) koja se može koristiti kao nova osnovica od strane drugih, za brže iteracije u budućnosti.
Pogledajmo sada uobičajene najbolje prakse koje preporučuju OpenAI i Azure OpenAI praktičari.
| Što | Zašto |
|---|---|
| Procijenite najnovije modele. | Nova generacija modela vjerojatno će imati poboljšane značajke i kvalitetu - ali može također donijeti veće troškove. Procijenite ih za utjecaj, a zatim donesite odluke o migraciji. |
| Odvojite upute i kontekst | Provjerite definira li vaš model/davatelj graničnike kako bi jasnije razlikovao upute, primarni i sekundarni sadržaj. To može pomoći modelima da točnije dodijele težine tokenima. |
| Budite specifični i jasni | Dajte više detalja o željenom kontekstu, ishodu, duljini, formatu, stilu itd. To će poboljšati i kvalitetu i dosljednost odgovora. Uhvatite recepte u ponovno upotrebljivim predlošcima. |
| Budite opisni, koristite primjere | Modeli mogu bolje odgovarati na pristup "pokaži i reci". Počnite s 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_DEPLOYMENTvrijednostima. Vratite se na Odjeljak Sandbox za učenje da naučite kako.
- Odaberite runtime kernel. Ako koristite opcije 1 ili 2, jednostavno odaberite zadani Python 3.10.x kernel koji pruža razvojni kontejner.
Sve je spremno za izvođenje vježbi. Imajte na umu da ovdje nema točnih i netočnih odgovora - samo istražujemo opcije metodom pokušaja i pogrešaka i gradimo intuiciju za ono što funkcionira za određeni model i domenu primjene.
Iz tog razloga u ovoj lekciji nema segmenata s rješenjem koda. Umjesto toga, Notebook će imati Markdown ćelije naslovljene "Moje rješenje:" koje prikazuju jedan primjer izlaza za referencu.
Koji od sljedećih je dobar prompt koji slijedi neke razumne najbolje prakse?
- Pokaži mi sliku crvenog automobila
- Pokaži mi sliku crvenog automobila marke Volvo i modela XC90 parkiranog uz liticu sa zalaskom sunca
- Pokaži mi sliku crvenog automobila marke Volvo i modela XC90
A: 2, to je najbolji prompt jer pruža detalje o "čemu" i ide u specifičnosti (ne samo bilo koji automobil, već određena marka i model) i također opisuje cjelokupni ambijent. 3 je sljedeći najbolji jer također sadrži puno opisa.
Provjerite možete li iskoristiti tehniku "znaka" s promptom: Dovršite rečenicu "Pokaži mi sliku crvenog automobila marke Volvo i ". S čime odgovara i kako biste to poboljšali?
Želite li saznati više o različitim konceptima Inženjeringa Promptova? Idite na stranicu za kontinuirano učenje kako biste pronašli druge izvrsne resurse o ovoj temi.
Idite na Lekciju 5 gdje ćemo pogledati napredne tehnike promptiranja!
Odricanje odgovornosti: Ovaj dokument je preveden pomoću AI usluge za prevođenje Co-op Translator. Iako težimo točnosti, imajte na umu da automatizirani prijevodi mogu sadržavati pogreške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za kritične informacije preporučuje se profesionalni ljudski prijevod. Ne odgovaramo za bilo kakva nesporazuma ili pogrešna tumačenja koja proizlaze iz korištenja ovog prijevoda.