Ovaj modul pokriva osnovne koncepte 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 oblikovanje upita? I kako mogu poboljšati unos upita koji šaljem LLM-u? To su pitanja na koja ćemo pokušati odgovoriti u ovom poglavlju i sljedećem.
Generativna umjetna inteligencija sposobna je stvarati novi sadržaj (npr. tekst, slike, audio, kod itd.) kao odgovor na korisničke zahtjeve. To postiže pomoću velikih jezičnih modela poput OpenAI-jevih GPT ("Generative Pre-trained Transformer") serija koji su obučeni za korištenje prirodnog jezika i koda.
Korisnici sada mogu komunicirati s ovim modelima koristeći poznate paradigme poput chata, bez potrebe za tehničkom stručnošću ili obukom. Modeli se temelje na upitima - korisnici šalju tekstualni unos (upit) i dobivaju AI odgovor (dovršetak). Zatim 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 da rade i utječući na kvalitetu dobivenih odgovora. "Oblikovanje upita" je brzo rastuće područje proučavanja koje se fokusira na dizajn i optimizaciju upita kako bi se osigurali dosljedni i kvalitetni odgovori u velikim razmjerima.
U ovoj lekciji naučit ćemo što je oblikovanje upita, zašto je važno i kako možemo osmisliti učinkovitije upite za određeni model i cilj aplikacije. Razumjet ćemo osnovne koncepte i najbolje prakse za oblikovanje upita - te ćemo naučiti o interaktivnom "sandbox" okruženju u Jupyter Notebooku gdje možemo primijeniti ove koncepte na stvarne primjere.
Na kraju ove lekcije moći ćemo:
- Objasniti što je oblikovanje upita i zašto je važno.
- Opisati komponente upita i kako se koriste.
- Naučiti najbolje prakse i tehnike za oblikovanje upita.
- Primijeniti naučene tehnike na stvarne primjere, koristeći OpenAI endpoint.
Oblikovanje upita: Praksa dizajniranja i usavršavanja unosa kako bi se AI modeli usmjerili prema željenim izlazima. Tokenizacija: Proces pretvaranja teksta u manje jedinice, zvane tokeni, koje model može razumjeti i obraditi. Instrukcijski prilagođeni LLM-ovi: Veliki jezični modeli (LLM-ovi) koji su dodatno prilagođeni specifičnim uputama kako bi poboljšali točnost i relevantnost svojih odgovora.
Oblikovanje upita trenutno je više umjetnost nego znanost. Najbolji način za poboljšanje intuicije za to je više vježbati i usvojiti pristup pokušaja i pogrešaka koji kombinira stručnost u primjeni s preporučenim tehnikama i optimizacijama specifičnim za model.
Jupyter Notebook koji prati ovu lekciju pruža sandbox okruženje u kojem možete isprobati ono što ste naučili - tijekom lekcije 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 može izvršiti Notebook.
- Lokalne varijable okruženja - dovršite korake POSTAVKE sada kako biste se pripremili.
Notebook dolazi s početnim vježbama - ali potičemo vas da dodate vlastite Markdown (opis) i Code (zahtjevi za upitima) sekcije kako biste isprobali više primjera ili ideja - i izgradili svoju intuiciju za dizajn upita.
Želite li dobiti širu sliku o tome što ova lekcija pokriva prije nego što se upustite u detalje? Pogledajte ovaj ilustrirani vodič koji vam daje uvid u glavne teme koje se obrađuju i ključne zaključke o kojima trebate razmisliti u svakoj od njih. Plan lekcije vodi vas od razumijevanja osnovnih koncepata i izazova do njihovog rješavanja relevantnim tehnikama oblikovanja upita i najboljim praksama. Napominjemo 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 bi različiti korisnici naše aplikacije mogli "dizajnirati" upite:
- Administratori bi mogli tražiti od AI-ja da analizira podatke o kurikulumu kako bi identificirao praznine u pokrivenosti. AI može sažeti rezultate ili ih vizualizirati pomoću koda.
- Edukatori bi mogli tražiti od AI-ja da generira plan lekcije za ciljanu publiku i temu. AI može izraditi personalizirani plan u određenom formatu.
- Studenti bi mogli tražiti od AI-ja da ih podučava u teškom predmetu. AI sada može voditi studente lekcijama, savjetima i primjerima prilagođenim njihovoj razini.
To je samo vrh ledenog brijega. Pogledajte Upiti za obrazovanje - otvorenu biblioteku upita koju su kurirali stručnjaci za obrazovanje - kako biste dobili širi uvid u mogućnosti! Pokušajte pokrenuti neke od tih upita u sandboxu ili koristeći OpenAI Playground da vidite što se događa!
Započeli smo ovu lekciju definiranjem oblikovanja upita kao procesa dizajniranja i optimizacije tekstualnih unosa (upita) kako bi se osigurali dosljedni i kvalitetni odgovori (dovršetci) za određeni cilj aplikacije i model. Možemo razmišljati o tome kao o procesu u 2 koraka:
- 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 intuiciju korisnika i trud za postizanje optimalnih rezultata. Zašto je to važno? Da bismo odgovorili na to pitanje, prvo moramo razumjeti tri koncepta:
- Tokenizacija = kako model "vidi" upit
- Osnovni LLM-ovi = kako temeljni model "obrađuje" upit
- Instrukcijski prilagođeni LLM-ovi = kako model sada vidi "zadatke"
LLM vidi upite kao niz tokena gdje različiti modeli (ili verzije modela) mogu tokenizirati isti upit na različite načine. Budući da su LLM-ovi obučeni 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 Tokenizer prikazanog dolje. Kopirajte svoj upit - i pogledajte kako se pretvara u tokene, obraćajući pažnju na to kako se obrađuju razmaci i interpunkcijski znakovi. Napominjemo da ovaj primjer prikazuje stariji LLM (GPT-3) - pa bi pokušaj s novijim modelom mogao proizvesti drugačiji rezultat.
Nakon što se upit tokenizira, primarna funkcija "Osnovnog LLM-a" (ili Temeljnog modela) je predvidjeti token u tom nizu. Budući da su LLM-ovi obučeni na ogromnim tekstualnim skupovima podataka, oni imaju dobar osjećaj za statističke odnose između tokena i mogu napraviti to predviđanje s određenom sigurnošću. Napominjemo da ne razumiju značenje riječi u upitu ili tokenu; samo vide obrazac koji mogu "dovršiti" svojim sljedećim predviđanjem. Mogu nastaviti predviđati niz 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 Chat Playground u Azure OpenAI Studio s zadanim postavkama. Sustav je konfiguriran da tretira upite kao zahtjeve za informacijama - pa biste trebali vidjeti dovršetak koji zadovoljava ovaj kontekst.
Ali što ako korisnik želi vidjeti nešto specifično što zadovoljava određene kriterije ili cilj zadatka? Tu dolaze instrukcijski prilagođeni LLM-ovi.
Instrukcijski prilagođeni LLM započinje s temeljnim modelom i dodatno se prilagođava primjerima ili parovima ulaz/izlaz (npr. višekratnim "porukama") koji mogu sadržavati jasne upute - a odgovor AI-ja pokušava slijediti te upute.
Ovo koristi tehnike poput učenja pojačanja uz povratne informacije od ljudi (RLHF) koje mogu obučiti model da slijedi upute i uči iz povratnih informacija kako bi proizvodio odgovore koji su bolje prilagođeni praktičnim primjenama i relevantniji korisničkim ciljevima.
Pokušajmo to - ponovno posjetite gornji upit, ali sada promijenite sistemski poruku kako biste dali sljedeću uputu kao kontekst:
Sažmi sadržaj koji ti je pružen za učenika drugog razreda. Zadrži rezultat u jednom odlomku s 3-5 točaka.
Vidite kako je rezultat sada prilagođen da odražava željeni cilj i format? Edukator 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 treba oblikovanje upita. Odgovor leži u činjenici da trenutni LLM-ovi postavljaju niz izazova koji čine pouzdane i dosljedne dovršetke teže postići 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čito vrijeme. Tehnike oblikovanja upita mogu nam pomoći minimizirati ove varijacije pružanjem boljih smjernica.
-
Modeli mogu izmišljati odgovore. Modeli su unaprijed obučeni s velikim ali ograničenim skupovima podataka, što znači da nemaju znanje o konceptima izvan tog opsega obuke. Kao rezultat toga, mogu proizvesti dovršetke koji su netočni, izmišljeni ili izravno kontradiktorni poznatim činjenicama. Tehnike oblikovanja upita pomažu korisnicima identificirati i ublažiti takve izmišljotine, npr. traženjem od AI-ja citata ili obrazloženja.
-
Sposobnosti modela će varirati. Noviji modeli ili generacije modela imat će bogatije sposobnosti, ali također donose jedinstvene osobitosti i kompromise u troškovima i složenosti. Oblikovanje upita može nam pomoći razviti najbolje prakse i radne tokove koji apstrahiraju razlike i prilagođavaju se zahtjevima specifičnim za model na skalabilan i besprijekoran način.
Pogledajmo ovo u praksi u OpenAI ili Azure OpenAI Playgroundu:
- Koristite isti upit s različitim LLM implementacijama (npr. OpenAI, Azure OpenAI, Hugging Face) - jeste li primijetili 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" za označavanje fenomena kada LLM-ovi ponekad generiraju činjenično netočne informacije zbog ograničenja u njihovoj obuci ili drugih ograničenja. 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 vođenom strojem. Ovo također jača smjernice za odgovornu AI s terminološke perspektive, uklanjajući izraze koji bi također mogli biti smatrani uvredljivima ili neuključivima u nekim kontekstima.
Želite li steći osjećaj kako izmišljotine funkcioniraju? Smislite upit koji upućuje AI da generira sadržaj za nepostojeću temu (kako biste osigurali da se ne nalazi u skupu podataka za obuku). Na primjer - pokušao sam s ovim upitom:
Upit: generiraj plan lekcije o Marsovskom ratu iz 2076. Pretraživanje na internetu pokazalo mi je da postoje izmišljeni prikazi (npr. televizijske serije ili knjige) o Marsovskim ratovima - ali nijedan iz 2076. Zdrav razum nam također govori da je 2076. u budućnosti i stoga ne može biti povezana s stvarnim događajem.
Što se događa kada pokrenemo ovaj upit s različitim pružateljima LLM-a?
Odgovor 1: OpenAI Playground (GPT-35)
Odgovor 2: Azure OpenAI Playground (GPT-35)
Odgovor 3: Hugging Face Chat Playground (LLama-2)
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školsku razinu. No, sva tri modela generirala su odgovore koji bi mogli uvjeriti neinformiranog korisnika da je događaj stvaran.
Tehnike oblikovanja upita, poput metapromptinga i konfiguracije temperature, mogu donekle smanjiti izmišljotine modela. Nove arhitekture za oblikovanje upita također integriraju nove alate i tehnike u tijek upita kako bi ublažile ili smanjile neke od ovih učinaka.
Završimo ovaj dio dobivanjem uvida u to kako se oblikovanje upita koristi u stvarnim rješenjima, pogledom na jednu studiju slučaja: GitHub Copilot.
GitHub Copilot je vaš "AI suprogramer" - pretvara tekstualne upite u prijedloge 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 koji su brzo shvatili potrebu za finim podešavanjem modela i razvojem boljih tehnika oblikovanja upita kako bi poboljšali kvalitetu koda. U srpnju su predstavili poboljšani AI model koji nadilazi Codex za još brže prijedloge.
Pročitajte postove redoslijedom kako biste pratili njihov put učenja.
- Svibanj 2023 | GitHub Copilot postaje bolji u razumijevanju vašeg koda
- Svibanj 2023 | Unutar GitHuba: Rad s LLM-ovima iza GitHub Copilota.
- Lipanj 2023 | Kako pisati bolje upite za GitHub Copilot.
- Srpanj 2023 | .. GitHub Copilot nadilazi Codex s poboljšanim AI modelom
- Srpanj 2023 | Vodič za programere o oblikovanju upita i LLM-ovima
- Rujan 2023 | Kako izgraditi LLM aplikaciju za poduzeća: Lekcije iz GitHub Copilota
Također možete pregledati njihov inženjerski blog za više postova poput ovog koji pokazuje kako se ovi modeli i tehnike primjenjuju za pokretanje stvarnih aplikacija.
Vidjeli smo zašto je oblikovanje upita važno - sada ćemo razumjeti kako se upiti konstruiraju kako bismo mogli procijeniti različite tehnike za učinkovitiji dizajn upita.
Počnimo s osnovnim upitom: tekstualni unos koji se šalje modelu bez dodatnog konteksta. Evo primjera - kada pošaljemo prve riječi američke nacionalne himne OpenAI Completion API, ona odmah dovršava odgovor s idućim stihovima, ilustrirajući osnovno prediktivno ponašanje.
| Upit (Ulaz) | Dovršetak (Izlaz) |
|---|---|
| Oh say can you see | Izgleda da započinjete stihove pjesme "The Star-Spangled Banner", nacionalne himne Sjedinjenih Američkih Država. Cijeli stihovi su ... |
Sada dodajmo kontekst i upute tom osnovnom upitu. Chat Completion API omogućuje nam konstrukciju složenog upita kao zbirke poruka s:
- Parovima ulaz/izlaz koji odražavaju korisnički unos i odgovor asistenta.
- Porukom sustava koja postavlja kontekst za ponašanje ili osobnost asistenta.
Zahtjev sada ima oblik prikazan dolje, gdje tokenizacija učinkovito bilježi relevantne informacije iz konteksta i razgovora. Promjena konteksta sustava može biti jednako utjecajna na kvalitetu dovršetaka kao i pruženi korisnički unosi.
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?"}
]
)U gore navedenim primjerima, korisnički upit bio je jednostavan tekstualni upit koji se može interpretirati kao zahtjev za informacijama. S uputama u upitima, možemo koristiti taj tekst za detaljnije specificiranje zadatka, pružajući bolju smjernicu AI-u. Evo primjera:
| Upit (Ulaz) | Dovršetak (Izlaz) | Vrsta upute |
|---|---|---|
| Napiši opis Građanskog rata | vraćen jednostavan odlomak | Jednostavna |
| Napiši opis Građanskog rata. Navedi ključne datume i događaje te opiši njihovu važnost | vraćen odlomak praćen popisom ključnih datuma događaja s opisima | Složena |
| Napiši opis Građanskog rata u jednom odlomku. Navedi 3 ključna datuma i njihovu važnost u obliku točaka. Navedi još 3 ključne povijesne osobe i njihove doprinose. Vrati izlaz u obliku JSON datoteke. | vraćeni su opsežniji detalji u tekstualnom okviru, formatirani kao JSON koji možete kopirati i zalijepiti u datoteku te provjeriti po potrebi | Složena. Formatirana. |
U gore navedenim primjerima, upit je još uvijek bio prilično otvoren, dopuštajući LLM-u da odluči koji je dio njegovog unaprijed treniranog skupa podataka relevantan. S dizajnerskim uzorkom primarnog sadržaja, ulazni tekst podijeljen je na dva dijela:
- uputu (radnja)
- relevantan sadržaj (koji utječe na radnju)
Evo primjera gdje je uputa "sažmi ovo u 2 rečenice".
| Upit (Ulaz) | Dovršetak (Izlaz) |
|---|---|
| Jupiter je peti planet od Sunca i najveći u Sunčevom sustavu. To je plinoviti div s masom tisućiti dio mase Sunca, ali dva i pol puta većom od mase svih ostalih planeta u Sunčevom sustavu zajedno. Jupiter je jedan od najsjajnijih objekata vidljivih golim okom na noćnom nebu i poznat je drevnim civilizacijama od prije zabilježene povijesti. Ime je dobio po rimskom bogu Jupiteru.[19] Kada se gleda sa Zemlje, Jupiter može biti dovoljno svijetao da njegova reflektirana svjetlost baca vidljive sjene,[20] i prosječno je treći najsvjetliji prirodni objekt na noćnom nebu nakon Mjeseca i Venere. Sažmi ovo u 2 kratke rečenice |
Jupiter, peti planet od Sunca, najveći je u Sunčevom sustavu i poznat je kao jedan od najsjajnijih objekata na noćnom nebu. Nazvan po rimskom bogu Jupiteru, to je plinoviti div čija je masa dva i pol puta veća od mase svih ostalih planeta u Sunčevom sustavu zajedno. |
Segment primarnog sadržaja može se koristiti na različite načine za učinkovitije davanje uputa:
- Primjeri - umjesto da modelu izričito kažete što treba učiniti, dajte mu primjere željenog izlaza i dopustite mu da zaključi obrazac.
- Smjernice - pratite uputu s "smjernicom" koja usmjerava dovršetak, vodeći model prema relevantnijim odgovorima.
- Predlošci - to su ponovljivi 'recepti' za upite s rezerviranim mjestima (varijablama) koje se mogu prilagoditi podacima za specifične slučajeve.
Istražimo ove primjere u praksi.
Ovo je pristup gdje koristite primarni sadržaj kako biste "nahranili model" nekim primjerima željenog izlaza za određenu uputu i dopustili mu da zaključi obrazac za željeni izlaz. Na temelju broja pruženih primjera, možemo imati upite bez primjera, s jednim primjerom, s nekoliko primjera itd.
Upit sada sadrži tri komponente:
- Opis zadatka
- Nekoliko primjera željenog izlaza
- Početak novog primjera (koji postaje implicitni opis zadatka)
| Vrsta učenja | Upit (Ulaz) | Dovršetak (Izlaz) |
|---|---|---|
| Bez primjera | "Sunce sja". Prevedi na španjolski | "El Sol está brillando". |
| Jedan primjer | "Sunce sja" => ""El Sol está brillando". "Hladan i vjetrovit dan" => |
"Es un día frío y ventoso". |
| Nekoliko primjera | Igrač je trčao po bazama => Baseball Igrač je pogodio as => Tenis Igrač je pogodio šesticu => Kriket Igrač je zakucao loptu => |
Košarka |
Primijetite kako smo morali pružiti eksplicitnu uputu ("Prevedi na španjolski") u upitu bez primjera, ali ona se zaključuje u primjeru s jednim primjerom. Primjer s nekoliko primjera pokazuje kako dodavanje više primjera omogućuje modelima da donesu točnije zaključke bez dodatnih uputa.
Druga tehnika za korištenje primarnog sadržaja je pružanje smjernica umjesto primjera. U ovom slučaju, dajemo modelu poticaj u pravom smjeru započinjanjem s isječkom koji odražava željeni format odgovora. Model tada "prihvaća smjernicu" i nastavlja u tom tonu.
| Broj smjernica | Upit (Ulaz) | Dovršetak (Izlaz) |
|---|---|---|
| 0 | Jupiter je peti planet od Sunca i najveći u Sunčevom sustavu. To je plinoviti div s masom tisućiti dio mase Sunca, ali dva i pol puta većom od mase svih ostalih planeta u Sunčevom sustavu zajedno. Jupiter je jedan od najsjajnijih objekata vidljivih golim okom na noćnom nebu i poznat je drevnim civilizacijama od prije zabilježene povijesti. Sažmi ovo |
Jupiter je najveći planet u našem Sunčevom sustavu i peti od Sunca. To je plinoviti div s masom 1/1000 mase Sunca, ali teži od svih ostalih planeta zajedno. Drevne civilizacije poznaju Jupiter već dugo, a lako je vidljiv na noćnom nebu. |
| 1 | Jupiter je peti planet od Sunca i najveći u Sunčevom sustavu. To je plinoviti div s masom koja je tisućiti dio mase Sunca, ali dva i pol puta veća od mase svih ostalih planeta u Sunčevom sustavu zajedno. Jupiter je jedan od najsjajnijih objekata vidljivih golim okom na noćnom nebu i poznat je drevnim civilizacijama od prije pisane povijesti. Sažmi ovo Naučili smo da je Jupiter |
peti planet od Sunca i najveći u Sunčevom sustavu. To je plinoviti div s masom koja je tisućiti dio mase Sunca, ali dva i pol puta veća od mase svih ostalih planeta zajedno. Lako je vidljiv golim okom i poznat je od davnina. |
| 2 | Jupiter je peti planet od Sunca i najveći u Sunčevom sustavu. To je plinoviti div s masom koja je tisućiti dio mase Sunca, ali dva i pol puta veća od mase svih ostalih planeta u Sunčevom sustavu zajedno. Jupiter je jedan od najsjajnijih objekata vidljivih golim okom na noćnom nebu i poznat je drevnim civilizacijama od prije pisane povijesti. Sažmi ovo Top 3 činjenice koje smo naučili: |
1. Jupiter je peti planet od Sunca i najveći u Sunčevom sustavu. 2. To je plinoviti div s masom koja je tisućiti dio mase Sunca... 3. Jupiter je vidljiv golim okom od davnina ... |
Predložak za upit je unaprijed definirani recept za upit koji se može pohraniti i ponovno koristiti po potrebi, kako bi se omogućilo dosljedno korisničko iskustvo u velikom opsegu. U svom najjednostavnijem obliku, to je jednostavno zbirka primjera upita poput ovog od OpenAI koji pruža interaktivne komponente upita (poruke korisnika i sustava) i format zahtjeva temeljen na API-ju - za podršku ponovnoj upotrebi.
U svom složenijem obliku, poput ovog primjera iz LangChain, sadrži mjesta za unos koja se mogu zamijeniti podacima iz različitih izvora (korisnički unos, kontekst sustava, vanjski izvori podataka itd.) kako bi se dinamički generirao upit. To nam omogućuje stvaranje biblioteke upita koji se mogu koristiti za dosljedno korisničko iskustvo programski u velikom opsegu.
Na kraju, prava vrijednost predložaka leži u mogućnosti stvaranja i objavljivanja biblioteka upita za vertikalne aplikacijske domene - gdje je predložak upita sada optimiziran kako bi odražavao kontekst specifičan za aplikaciju ili primjere koji odgovore čine relevantnijima i točnijima za ciljanu publiku korisnika. Prompts For Edu repozitorij je izvrstan primjer ovog pristupa, koji prikuplja biblioteku upita za obrazovnu domenu s naglaskom na ključne ciljeve poput planiranja lekcija, dizajna kurikuluma, podučavanja učenika itd.
Ako razmišljamo o konstrukciji upita kao o zadatku (instrukcija) i cilju (primarni sadržaj), tada sekundarni sadržaj predstavlja dodatni kontekst koji pružamo kako bismo utjecali na izlaz na neki način. To mogu biti parametri za podešavanje, upute za formatiranje, taksonomije tema itd., koji mogu pomoći modelu da prilagodi svoj odgovor željenim ciljevima ili očekivanjima korisnika.
Na primjer: S obzirom na 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 "sažmi katalog tečajeva za jesen 2023."
- možemo koristiti primarni sadržaj za pružanje nekoliko primjera željenog izlaza
- možemo koristiti sekundarni sadržaj za identifikaciju 5 najvažnijih "oznaka".
Sada model može pružiti sažetak u formatu prikazanom kroz nekoliko primjera - ali ako rezultat ima više oznaka, može prioritizirati 5 oznaka identificiranih u sekundarnom sadržaju.
Sada kada znamo kako se upiti mogu konstruirati, možemo početi razmišljati o tome kako ih dizajnirati prema najboljim praksama. Možemo razmišljati o tome u dva dijela - imati pravi mentalni sklop i primijeniti prave tehnike.
Oblikovanje upita je proces pokušaja i pogrešaka, stoga imajte na umu tri široka čimbenika:
-
Razumijevanje domene je važno. Točnost i relevantnost odgovora ovise o domeni u kojoj aplikacija ili korisnik djeluje. Primijenite svoju intuiciju i stručnost u domeni kako biste dodatno prilagodili tehnike. Na primjer, definirajte osobnosti specifične za domenu u upitima sustava ili koristite predloške specifične za domenu u korisničkim upitima. Pružite sekundarni sadržaj koji odražava kontekste specifične za domenu ili koristite naznake i primjere specifične za domenu kako biste usmjerili model prema poznatim obrascima korištenja.
-
Razumijevanje modela je važno. Znamo da su modeli stohastičke prirode. No, implementacije modela također se mogu razlikovati u pogledu skupa podataka za obuku koji koriste (predobučeno znanje), mogućnosti koje pružaju (npr. putem API-ja ili SDK-a) i vrste sadržaja za koje su optimizirani (npr. kod, slike, tekst). Razumijte snage i ograničenja modela koji koristite i iskoristite to znanje za prioritetizaciju zadataka ili izgradnju prilagođenih predložaka optimiziranih za mogućnosti modela.
-
Iteracija i validacija su važne. Modeli se brzo razvijaju, kao i tehnike za oblikovanje upita. Kao stručnjak za domenu, možda imate dodatni kontekst ili kriterije specifične za vašu aplikaciju, koji možda ne vrijede za širu zajednicu. Koristite alate i tehnike za oblikovanje upita kako biste "započeli" konstrukciju upita, zatim iterirajte i validirajte rezultate koristeći vlastitu intuiciju i stručnost u domeni. Zabilježite svoja saznanja i stvorite bazu znanja (npr. biblioteke upita) koja se može koristiti kao nova osnova za brže iteracije u budućnosti.
Sada pogledajmo uobičajene najbolje prakse koje preporučuju OpenAI i Azure OpenAI praktičari.
| Što | Zašto |
|---|---|
| Procijenite najnovije modele. | Generacije novih modela vjerojatno imaju poboljšane značajke i kvalitetu - ali mogu također uzrokovati veće troškove. Procijenite njihov utjecaj, a zatim donesite odluke o migraciji. |
| Odvojite instrukcije i kontekst | Provjerite definira li vaš model/provajder graničnike za jasnije razlikovanje instrukcija, primarnog i sekundarnog sadržaja. To može pomoći modelima da točnije dodijele težinu 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. Zabilježite recepte u predlošcima koji se mogu ponovno koristiti. |
| Budite opisni, koristite primjere | Modeli mogu bolje reagirati na pristup "pokaži i reci". Započnite s pristupom zero-shot gdje mu dajete instrukciju (ali bez primjera), a zatim pokušajte few-shot kao doradu, pružajući nekoliko primjera željenog izlaza. Koristite analogije. |
| Koristite naznake za pokretanje odgovora | Usmjerite ga prema željenom ishodu dajući mu nekoliko početnih riječi ili fraza koje može koristiti kao polazište za odgovor. |
| Ponovite | Ponekad ćete morati ponoviti svoje upute modelu. Dajte instrukcije prije i nakon vašeg primarnog sadržaja, koristite instrukciju i naznaku itd. Iterirajte i validirajte kako biste vidjeli što najbolje funkcionira. |
| Redoslijed je važan | Redoslijed kojim predstavljate informacije modelu može utjecati na izlaz, čak i u primjerima učenja, zahvaljujući pristranosti prema novijim informacijama. Isprobajte različite opcije kako biste vidjeli što najbolje funkcionira. |
| Dajte modelu "izlaz" | Dajte modelu rezervni odgovor koji može pružiti ako iz bilo kojeg razloga ne može dovršiti zadatak. To može smanjiti šanse da modeli generiraju lažne ili izmišljene odgovore. |
Kao i kod svake najbolje prakse, zapamtite da vaše iskustvo može varirati ovisno o modelu, zadatku i domeni. Koristite ih kao početnu točku i iterirajte kako biste otkrili što najbolje funkcionira za vas. Neprestano ponovno procjenjujte svoj proces oblikovanja upita kako postaju dostupni novi modeli i alati, s fokusom na skalabilnost procesa i kvalitetu odgovora.
Čestitamo! Došli ste do kraja lekcije! Vrijeme je da testirate neke od tih koncepata i tehnika s pravim primjerima!
Za naš zadatak koristit ćemo Jupyter Notebook s vježbama koje možete interaktivno dovršiti. Također možete proširiti Notebook s vlastitim Markdown i Code ćelijama kako biste istražili ideje i tehnike na vlastitu inicijativu.
- (Preporučeno) Pokrenite GitHub Codespaces
- (Alternativno) Klonirajte repozitorij na svoj lokalni uređaj i koristite ga s Docker Desktop
- (Alternativno) Otvorite Notebook s vašim preferiranim runtime okruženjem za Notebook.
- Kopirajte datoteku
.env.copyu korijenu repozitorija u.envi ispunite vrijednostiAZURE_OPENAI_API_KEY,AZURE_OPENAI_ENDPOINTiAZURE_OPENAI_DEPLOYMENT. Vratite se na sekciju Learning Sandbox kako biste saznali kako.
- Odaberite runtime kernel. Ako koristite opcije 1 ili 2, jednostavno odaberite zadani Python 3.10.x kernel koji pruža dev container.
Spremni ste za pokretanje vježbi. Imajte na umu da ovdje nema točnih i netočnih odgovora - samo istražujete opcije metodom pokušaja i pogrešaka i gradite intuiciju za ono što funkcionira za određeni model i aplikacijsku domenu.
Iz tog razloga u ovoj lekciji nema segmenata s rješenjima koda. Umjesto toga, Notebook će imati Markdown ćelije naslovljene "Moje rješenje:" koje prikazuju jedan primjer izlaza za referencu.
Koji od sljedećih upita je dobar primjer koji slijedi razumne najbolje prakse?
- Pokaži mi sliku crvenog automobila
- Pokaži mi sliku crvenog automobila marke Volvo i modela XC90 parkiranog uz liticu s zalaskom sunca
- Pokaži mi sliku crvenog automobila marke Volvo i modela XC90
O: 2, to je najbolji upit jer pruža detalje o "čemu" i ide u specifičnosti (ne samo bilo koji automobil, već određena marka i model) te također opisuje cjelokupni ambijent. 3 je sljedeći najbolji jer također sadrži puno opisa.
Pokušajte iskoristiti tehniku "naznake" s upitom: Dovrši rečenicu "Pokaži mi sliku crvenog automobila marke Volvo i ". Što odgovara, i kako biste to poboljšali?
Želite li saznati više o različitim konceptima oblikovanja upita? Posjetite stranicu za nastavak učenja kako biste pronašli druge izvrsne resurse o ovoj temi.
Prijeđite na Lekciju 5 gdje ćemo pogledati napredne tehnike oblikovanja upita!
Izjava o odricanju odgovornosti:
Ovaj dokument je preveden pomoću AI usluge za prevođenje Co-op Translator. Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadržavati pogreške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za nesporazume ili pogrešna tumačenja koja mogu proizaći iz korištenja ovog prijevoda.







