Ta modul pokriva osnovne pojme in tehnike za ustvarjanje učinkovitih pozivov v generativnih modelih AI. Pomemben je tudi način, kako napišete svoj poziv za LLM. Dobro oblikovan poziv lahko doseže boljšo kakovost odgovora. Kaj pa pravzaprav pomenita izraza poziv in oblikovanje pozivov? In kako izboljšati vhodni poziv, ki ga pošljem 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 doseže 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 z uporabo znanih paradigm, kot je klepet, brez potrebe po kakršnemkoli tehničnem znanju ali usposabljanju. Modeli so pozivno temelječi - uporabniki pošljejo besedilni vhod (poziv) in dobijo AI odgovor (dokončanje). Nato lahko iterativno "klepetajo z AI" v večkrogovnih pogovorih, izboljšujejo svoj poziv, dokler odgovor ne ustreza njihovim pričakovanjem.
"Pozivi" postanejo primarni 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 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 namen aplikacije. Spoznali bomo osnovne pojme in dobre prakse oblikovanja pozivov ter spoznali interaktivno okolje Jupyter zvezkov "peskovnik", kjer lahko vidimo to znanje uporabljeno na dejanskih primerih.
Do konca te lekcije bomo znali:
- Razložiti, kaj je oblikovanje pozivov in zakaj je pomembno.
- Opisati sestavine 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: Postopek načrtovanja in izboljševanja vhodov, ki usmerjajo AI modele k ustvarjanju želenih izhodov. Tokenizacija: Postopek pretvarjanja besedila v manjše enote, imenovane tokeni, ki jih model lahko razume in obdela. Modeli LLM s prilagojenimi navodili: Veliki jezikovni modeli (LLM), ki so dodatno prilagojeni z določenimi 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č vaje in sprejetje pristopa poskusov in napak, ki združuje strokovno znanje domene uporabe s priporočenimi tehnikami in optimizacijami, specifičnimi za model.
Jupyter zvezek, ki spremlja to lekcijo, ponuja peskovnik, kjer lahko preizkusite, kar se naučite - sproti ali kot del kodnega izziva na koncu. Za izvajanje vaj boste potrebovali:
- Azure OpenAI API ključ - končno točko storitve za nameščeni LLM.
- Python izvajalno okolje - v katerem lahko zaženete zvezek.
- Lokalne okoljske spremenljivke - zaključite SETUP korake zdaj, da boste pripravljeni.
Zvezek vsebuje začetne vaje - a spodbujamo vas, da dodate lastne Markdown (opisne) in Kode (pozivne zahtevke) razdelke za preizkušanje več primerov ali idej - in si tako zgradite intuicijo za oblikovanje pozivov.
Želite pred začetkom lekcije dobiti velik pregled tem, ki jih ta zajema? Oglejte si ta ilustriran vodnik, ki vam poda občutek glavnih tem in ključnih spoznanj, o katerih razmislite pri vsaki od njih. Načrt lekcije vas vodi od razumevanja osnovnih pojmov in izzivov do njihove obravnave z relevantnimi tehnikami oblikovanja pozivov in najboljšimi praksami. Upoštevajte, da se razdelek "Napredne tehnike" v tem vodniku nanaša na vsebino, zajeto v naslednjem poglavju tega kurikuluma.
Pogovorimo se zdaj, kako se ta tema povezuje z našim poslanstvom startup podjetja, da prinesemo AI inovacije v izobraževanje. Želimo ustvarjati AI-podprte aplikacije za personalizirano učenje - razmislimo torej, kako bi različni uporabniki naše aplikacije lahko "načrtovali" pozive:
- Administratorji lahko AI prosijo, naj analizira podatke učnih načrtov za ugotavljanje vrzeli v pokritosti. AI lahko povzame rezultate ali jih prikaže s kodo.
- Učitelji lahko AI prosijo, naj ustvari učni načrt za ciljno skupino in temo. AI lahko zgradi personaliziran načrt v določenem formatu.
- Učenci lahko AI prosijo, naj jih poučuje v zahtevni snovi. AI zdaj lahko vodi učence z lekcijami, namigi in primeri, prilagojenimi njihovi ravni.
To je šele vrh ledene gore. Oglejte si Pozive za izobraževanje - odprtokodno knjižnico pozivov, ki jo urejajo strokovnjaki za izobraževanje - da dobite širši vpogled v možnosti! Poskusite zagnati nekaj teh pozivov v peskovniku ali uporabite OpenAI Playground, da vidite, kaj se zgodi!
Lekcijo smo začeli z definicijo oblikovanja pozivov kot procesa načrtovanja in optimizacije besedilnih vhodov (pozivov) za zagotavljanje doslednih in kakovostnih odgovorov (dokončanj) za določen namen aplikacije in model. Ta postopek lahko razdelimo na 2 koraka:
- načrtovanje začetnega poziva za določen model in namen
- izboljšave poziva iterativno, da se izboljša kakovost odgovora
Gre za proces poskusov in napak, ki zahteva uporabniško intuicijo in trud za dosego optimalnih rezultatov. Zakaj je torej pomembno? Za odgovor najprej moramo razumeti tri pojme:
- Tokenizacija = kako model "vidi" poziv
- Osnovni LLM = kako temeljni model "obdeluje" poziv
- LLM s prilagojenimi navodili = kako model zdaj vidi "naloge"
LLM pozive vidi kot sekvenco tokenov, kjer različni modeli (ali različice modela) iste pozive razdelijo na tokene različno. Ker so LLM usposobljeni na tokenih (ne na surovem besedilu), način tokenizacije pozivov neposredno vpliva na kakovost ustvarjenega odgovora.
Za intuitivno razumevanje tokenizacije preizkusite orodja, kot je OpenAI Tokenizer prikazan spodaj. Vnesite svoj poziv in opazujte, kako se pretvori v tokene, pri tem bodite pozorni na obravnavo presledkov in ločil. Upoštevajte, da ta primer prikazuje starejši LLM (GPT-3) - zato lahko uporaba novejšega modela da drugačen rezultat.
Ko je poziv razdeljen na tokene, je glavna funkcija "Osnovnega LLM" (temeljnega modela) napovedovanje naslednjega tokena v zaporedju. Ker so LLM trenirani na obsežnih besedilnih podatkih, razumejo statistične zveze med tokeni in lahko napovedujejo z določeno gotovostjo. Opomba: ne razumejo pomena besed v pozivu ali tokenu; vidijo le vzorec, ki ga lahko "dokončajo" z naslednjo napovedjo. Napoved lahko nadaljujejo, dokler jih uporabnik ne prekine ali ne nastopi vnaprej določen pogoj.
Želite videti, kako deluje dokončanje na podlagi poziva? Vnesite zgornji poziv v Microsoft Foundry playground z privzetimi nastavitvami. Sistem obravnava pozive kot zahteve po informacijah - zato boste dobili odgovor, ki ustreza temu kontekstu.
Kaj pa, če bi uporabnik želel videti nekaj specifičnega, kar ustreza določenim kriterijem ali cilju naloge? Takrat vstopijo na sceno modeli LLM s prilagojenimi navodili.
LLM s prilagojenimi navodili začne z osnovnim modelom in ga dodatno prilagodi z uporabo primerov ali vhodno/izhodnih parov (npr. večkrogovnih "sporočil"), ki vsebujejo jasna navodila - in AI skuša slediti temu navodilu.
Uporablja tehnike, kot je okrepljeno učenje z človekovim povratnim informacijam (RLHF), ki model nauči sledenja navodilom in učenja iz povratnih informacij, da so odgovori bolje prilagojeni praktičnim aplikacijam in bolj relevantni za uporabniške cilje.
Preizkusimo to - vrnite se k zgornjemu pozivu, a spremenite sistemsko sporočilo in kot kontekst dodajte naslednje navodilo:
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 usklajen z željenim ciljem in formatom? Učitelj lahko ta odgovor neposredno uporabi v svojih diapozitivih za tisti razred.
Ko razumemo, kako LLM obdelujejo pozive, se pogovorimo, zakaj potrebujemo oblikovanje pozivov. Odgovor je v tem, da trenutni LLM postavljajo več izzivov, ki otežujejo doseganje zanesljivih in doslednih dokončanj brez truda pri ustvarjanju in optimizaciji pozivov. Na primer:
-
Odgovori modela so stohastični. Isti poziv bo verjetno z različnimi modeli ali različicami modela ustvaril različne odgovore. Lahko se zgodi celo, da isti model ob različnih časih poda različne rezultate. Tehnike oblikovanja pozivov nam lahko pomagajo zmanjšati te variacije z boljšimi varovali.
-
Modeli lahko izmišljajo odgovore. Modeli so predhodno usposobljeni na velikih, a omejenih naborih podatkov, zato nimajo znanja o pojmih zunaj tega obsega usposabljanja. Posledično lahko ustvarijo odgovore, ki so netočni, izmišljeni ali direktno nasprotujoči se znanim dejstvom. Tehnike oblikovanja pozivov uporabnikom pomagajo prepoznati in blažiti takšne izmišljotine, npr. z zahtevo po navedbah virov ali razlogovanju.
-
Zmožnosti modelov se razlikujejo. Novejši modeli ali generacije modelov imajo bogatejše zmogljivosti, a prinesejo tudi edinstvene posebnosti in kompromis med stroški in kompleksnostjo. Oblikovanje pozivov nam lahko pomaga razviti najboljše prakse in delovne tokove, ki abstraktno premagujejo razlike in se prilagajajo posebnim zahtevam modelov na načine, ki so razširljivi in nemoteči.
Poglejmo to v akciji v OpenAI ali Azure OpenAI Playground:
- Uporabite isti poziv z različnimi nameščenimi LLM (npr., OpenAI, Azure OpenAI, Hugging Face) - ste opazili razlike?
- Uporabite isti poziv večkrat z istim nameščenim LLM (npr., Azure OpenAI playground) - kako so se razlikovale variacije?
V tem tečaju uporabljamo izraz "izmišljotina", da označimo pojav, ko LLM včasih generirajo dejansko netočne informacije zaradi omejitev usposabljanja ali drugih razlogov. Lahko ste slišali tudi izraz "halucinacije" v popularnih člankih ali raziskovalnih prispevkih. Vendar močno priporočamo uporabo "izmišljotina", da ne antropomorfiziramo vedenja tako, da človeku podobno lastnost pripisujemo strojno generiranemu izidu. To tudi krepi Smernice odgovorne AI iz vidika terminologije, saj odstranjuje izraze, ki bi lahko bili v nekaterih kontekstih žaljivi ali neinkluzivni.
Želite razumeti, kako izmišljotine delujejo? Pomislite na poziv, ki AI naroča, naj ustvari vsebino za neobstoječo temo (da zagotovimo, da ni v podatkih za usposabljanje). Na primer - preizkusil sem naslednji poziv:
Poziv: ustvarite učni načrt o Marsovski vojni leta 2076.
Iskanje po spletu mi je pokazalo, da obstajajo fiktivni zapisi (npr., TV serije ali knjige) o marsovskih vojnah - a nobenih za leto 2076. Zdrava pamet nam pove, da je 2076 v prihodnosti in zato ne more biti povezan z resničnim dogodkom.
Kaj se torej zgodi, ko ta poziv zaženemo z različnimi ponudniki LLM?
Odgovor 1: OpenAI Playground (GPT-35)
Odgovor 2: Azure OpenAI Playground (GPT-35)
Odgovor 3: : Hugging Face Chat Playground (LLama-2)
Kot je pričakovano, vsak model (ali različica modela) nekoliko drugače odgovarja zaradi stohastičnega vedenja in razlik v zmogljivostih modela. Na primer, en model cilja na občinstvo 8. razreda, medtem ko drugi predvideva dijaka srednje šole. Vsi trije modeli pa so ustvarili odgovore, ki lahko prepričajo neinformiranega uporabnika, da je dogodek resničen.
Tehnike oblikovanja poziva, kot so metapodajanje in nastavitev temperature, lahko do neke mere zmanjšajo nastajanje lažnih vsebin s strani modela. Novi arhitekturi oblikovanja pozivov tudi brezhibno vključujejo nova orodja in tehnike v potek poziva, da omilijo ali zmanjšajo nekatere od teh učinkov.
Zaključimo ta del s pregledom, kako se oblikovanje pozivov uporablja v rešitvah iz resničnega sveta, z ogledom enega primera študije: GitHub Copilot.
GitHub Copilot je vaš "AI partner programer" – pretvarja besedilne pozive v dokončanja kode in je integriran v vaše razvojno okolje (npr. Visual Studio Code) za neprekinjeno 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 fino nastavitvi 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.
Berite prispevke po vrstnem redu, da sledite njihovemu učnemu potovanju.
- maj 2023 | GitHub Copilot izboljšuje razumevanje vaše kode
- maj 2023 | Notranjost GitHub: delo z LLM-ji za GitHub Copilot.
- jun 2023 | Kako pisati boljše pozive za GitHub Copilot.
- jul 2023 | .. GitHub Copilot presega Codex z izboljšanim AI modelom
- jul 2023 | Vodnik za razvijalce o oblikovanju pozivov in LLM-jih
- sep 2023 | Kako zgraditi aplikacijo podjetniškega LLM: Lekcije iz GitHub Copilot
Lahko si tudi ogledate njihov inženirski blog za več prispevkov, kot je ta, ki prikazuje, kako se ti modeli in tehnike uporabljajo za pogon rešitev iz resničnega sveta.
Videli smo, zakaj je oblikovanje pozivov pomembno - zdaj pa razumimo, kako so pozivi konstruirani, da lahko ocenimo različne tehnike za učinkovitejše oblikovanje poziva.
Začnimo z osnovnim pozivom: besedilnim vnosom, poslanim modelu brez drugega konteksta. Tukaj je primer - ko pošljemo prvih nekaj besed ameriške himne OpenAI Completion API, takoj dokonča odgovor z naslednjimi vrsticami, kar ponazarja osnovno napovedno vedenje.
| Poziv (vhod) | Dokončanje (izhod) |
|---|---|
| Oh say can you see | Zdi se, da ste začeli z besedilom "The Star-Spangled Banner", ameriške nacionalne himne. Polno besedilo je ... |
Zdaj dodajmo kontekst in navodila osnovnemu pozivu. Chat Completion API nam omogoča konstrukcijo kompleksnega poziva kot zbirko sporočil z:
- Pari vhod/izhod, ki odražajo uporabnikov vnos in pomočnikov odgovor.
- Sistemskim sporočilom, ki nastavi kontekst za obnašanje ali osebnost asistenta.
Zahteva je sedaj v spodnji obliki, kjer tokenizacija učinkovito zajema relevantne informacije iz konteksta in pogovora. Sprememba sistemskega konteksta je lahko tako vplivna na kakovost dokončanj kot podani uporabniški vnosi.
response = client.responses.create(
model="gpt-5-mini",
input=[
{"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 uporabniški poziv preprosto besedilno vprašanje, ki ga je mogoče interpretirati kot zahtevo po informaciji. Z navodili pozivov lahko uporabimo ta tekst za podrobnejšo določitev naloge, kar AI-ju omogoči boljše usmerjanje. Tukaj je primer:
| Poziv (vhod) | Dokončanje (izhod) | Tip navodila |
|---|---|---|
| Napiši opis Ameriške državljanske vojne | vrne preprost odstavek | Preprosto |
| Napiši opis Ameriške državljanske vojne. Navedi ključne datume in dogodke ter opiši njihov pomen | vrne odstavek, sledi pa seznam ključnih datumov dogodkov z opisi | Kompleksno |
| Napiši opis Ameriške državljanske vojne v 1 odstavku. Navedi 3 ključne točke z datumi in njihovim pomenom. Navedi še 3 točke o pomembnih zgodovinskih osebnostih in njihovih prispevkih. Izpis vrni kot JSON datoteko | vrne bolj obsežne podrobnosti v besedilnem polju, formatirano kot JSON, ki ga lahko kopiraš in prilepiš v datoteko ter preveriš | Kompleksno. Formatirano. |
V zgornjih primerih je bil poziv še vedno precej odprt, kar je omogočalo LLM-ju, da sam odloči, kateri del njegovega vnaprej usposobljenega nabora podatkov je relevanten. Z oblikovnim vzorcem primarna vsebina je besedilo vnosa razdeljeno na dve deli:
- navodilo (dejanje)
- relevantna vsebina (ki vpliva na dejanje)
Tukaj je primer, kjer je navodilo "strni to v 2 povedi".
| Poziv (vhod) | Dokončanje (izhod) |
|---|---|
| Jupiter je peti planet od Sonca in največji v Osončju. Je plinski velikan z maso eno tisočinko mase Sonca, a dvakrat in pol večjo od vseh drugih planetov Osončja skupaj. Jupiter je eden najsvetlejših predmetov, ki jih lahko vidimo z golim očesom ponoči, in je bil poznan 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 odbita svetloba meče vidne sence,[20] in je povprečno tretji najsvetlejši naravni predmet na nočnem nebu za Luno in Venero. Strni to v 2 kratki povedi |
Jupiter, peti planet od Sonca, je največji v Osončju in je znan kot eden najsvetlejših predmetov na nočnem nebu. Poimenovan po rimskem bogu Jupiterju, je plinski velikan z maso, ki je dvakrat in pol večja od vseh drugih planetov Osončja skupaj. |
Segment primarne vsebine se lahko uporablja na različne načine za učinkovitejša navodila:
- Primeri - namesto da modelu izrecno povemo, kaj naj stori, mu damo primere, kaj naj stori in naj sam sklepa vzorec.
- Namigi - sledi navodilu "namig", ki pripravlja dokončanje in usmerja model k bolj relevantnim odgovorom.
- Predloge - to so ponovljive "recepture" pozivov z držali (spremenljivkami), ki jih lahko prilagodimo z podatki za posebne primere uporabe.
Raziskajmo te primere v praksi.
To je pristop, kjer uporabimo primarno vsebino, da modelu "nahranimo" nekaj primerov želenega izhoda za dano navodilo in mu dovolimo, da sam sklepa vzorec željenega izhoda. Glede na število danih primerov imamo zero-shot, one-shot, few-shot pozivanje itd.
Poziv zdaj sestoji iz treh komponent:
- Opisa naloge
- Nekaj primerov želenega izhoda
- Začetka novega primera (kar postane implicitni opis naloge)
| Vrsta učenja | Poziv (vhod) | 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 tekel okoli baz => Baseball Igralec je zadel asa => Tenis Igralec je zadel šestko => Kriket Igralec je naredil zabijanje => |
Košarka |
Opazite, da smo morali pri zero-shot pozivanju navesti izrecno navodilo ("Prevedi v španščino"), medtem ko je to v one-shot primeru dobljeno implicitno. Primer few-shot pokaže, kako dodajanje več primerov omogoča modelom natančnejše sklepe brez dodatnih navodil.
Druga tehnika za uporabo primarne vsebine je dajanje namigov namesto primerov. V tem primeru modelu damo spodbudni zagon z odlomkom, ki odraža željeni format odgovora. Model nato "sprejme namig" in nadaljuje v isti smeri.
| Število namigov | Poziv (vhod) | Dokončanje (izhod) |
|---|---|---|
| 0 | Jupiter je peti planet od Sonca in največji v Osončju. Je plinski velikan z maso eno tisočinko mase Sonca, a dvakrat in pol večjo od vseh drugih planetov Osončja skupaj. Jupiter je eden najsvetlejših predmetov, ki jih lahko vidimo z golim očesom ponoči, in je bil poznan starodavnim civilizacijam že pred zapisano zgodovino. Strni to |
Jupiter je največji planet v našem Osončju in peti od Sonca. Je plinski velikan z maso 1/1000 mase Sonca, vendar je težji od vseh drugih planetov skupaj. Stare civilizacije so Jupitra poznale že dolgo, in ga z lahkoto vidimo na nočnem nebu.. |
| 1 | Jupiter je peti planet od Sonca in največji v Osončju. Je plinski velikan z maso eno tisočinko mase Sonca, a dvakrat in pol večjo od vseh drugih planetov Osončja skupaj. Jupiter je eden najsvetlejših predmetov, ki jih lahko vidimo z golim očesom ponoči, in je bil poznan starodavnim civilizacijam že pred zapisano zgodovino. Strni to Kar smo izvedeli je, da je Jupiter |
peti planet od Sonca in največji v Osončju. Je plinski velikan z maso eno tisočinko mase Sonca, a dvakrat in pol večjo od vseh drugih planetov skupaj. Je lahko viden z golim očesom in poznan že od antičnih časov. |
| 2 | Jupiter je peti planet od Sonca in največji v Osončju. Je plinski velikanko z maso eno tisočinko Sončeve, a dvakrat in pol večjo kot vsota vseh ostalih planetov v Osončju. Jupiter je eden najsvetlejših objektov, ki so vidni s prostim očesom ponoči na nebu, in je bil znan antičnim civilizacijam že pred zapisano zgodovino. Povzetek Top 3 dejstva, ki smo jih izvedeli: |
1. Jupiter je peti planet od Sonca in največji v Osončju. 2. Je plinski velikanko z maso eno tisočinko Sončeve... 3. Jupiter je bil s prostim očesom viden že v antičnih časih ... |
Predloga poziva je vnaprej določena receptura za poziv, ki jo je mogoče shraniti in po potrebi ponovno uporabiti, da se zagotovi bolj dosledna uporabniška izkušnja v obsegu. V najpreprostejši obliki je to preprosto zbirka primerov pozivov, kot je ta od OpenAI, ki zagotavlja tako interaktivne komponente poziva (uporabniška in sistemska sporočila) kot tudi format zahteve prek API – za podporo ponovni uporabi.
V bolj zapleteni obliki, kot je ta primer iz LangChain, vsebuje rezerve (placeholders), ki jih je mogoče zamenjati z podatki iz različnih virov (uporabniški vnos, sistemski kontekst, zunanji viri podatkov itd.) za dinamično ustvarjanje poziva. To nam omogoča ustvarjanje knjižnice ponovnih uporabnih pozivov, ki jih je mogoče programsko uporabljati za zagotavljanje doslednih uporabniških izkušenj v obsegu.
Končno je prava vrednost predlog v zmožnosti ustvarjanja in objavljanja knjižnic pozivov za vertikalna področja uporabe – kjer je predloga poziva zdaj optimizirana, da odraža kontekst ali primere, specifične za aplikacijo, zaradi česar so odgovori bolj relevantni in natančni za ciljno uporabniško publiko. Repozitorij Prompts For Edu je odličen primer tega pristopa, saj ureja knjižnico pozivov za področje izobraževanja z osredotočenostjo na ključne cilje, kot so načrtovanje učnih ur, oblikovanje kurikula, študentsko tutorstvo itd.
Če razmišljamo o konstrukciji poziva kot navodilu (nalogi) in cilju (primarni vsebini), potem je sekundarna vsebina kot dodaten kontekst, ki ga zagotovimo, da na nek način vplivamo na izhod. To so lahko nastavitveni parametri, navodila za oblikovanje, taksonomije tem itd., ki lahko pomagajo modelu prilagoditi njegov odgovor tako, da ustreza željenim 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.) o vseh razpoložljivih tečajih v kurikulu:
- lahko določimo navodilo, da "povzamemo katalog tečajev za jesen 2023"
- lahko uporabimo primarno vsebino, da zagotovimo nekaj primerov želenega izhoda
- lahko uporabimo sekundarno vsebino za opredelitev top 5 "oznak" zanimanja.
Sedaj lahko model zagotovi povzetek v formatu, ki ga pokaže nekaj primerov – vendar če ima rezultat več oznak, lahko prednostno obravnava teh 5 oznak, določenih v sekundarni vsebini.
Zdaj, ko vemo, kako lahko pozive konstruiramo, lahko začnemo razmišljati, kako jih zasnovati, da odražajo najboljše prakse. Lahko razmišljamo o tem v dveh delih – imeti pravo miselnost in uporabiti prave tehnike.
Inženiring pozivov je proces poskušanja in popravljanja, zato imejte v mislih tri široke vodilne dejavnike:
-
Razumevanje domene je pomembno. Natančnost in relevantnost odgovora sta funkciji domena, v kateri aplikacija ali uporabnik deluje. Uporabite svojo intuicijo in strokovno znanje domene, da še bolj prilagodite tehnike. Na primer, določite osebnosti, specifične za domeno v svojih sistemskih pozivih ali uporabite predloge, specifične za domeno v uporabniških pozivih. Zagotovite sekundarno vsebino, ki odraža kontekste, specifične za domeno, ali uporabite namige in primere, specifične za domeno, da usmerite model k znanim vzorcem uporabe.
-
Razumevanje modela je pomembno. Vemo, da so modeli po naravi stohastični. Ampak implementacije modelov se lahko razlikujejo glede na učne podatkovne nize, ki jih uporabljajo (predhodno naučeno znanje), zmogljivosti, ki jih nudijo (npr. preko API ali SDK) in tip vsebine, za katero so optimizirani (npr. koda proti slikam proti besedilu). Razumite prednosti in omejitve modela, ki ga uporabljate, in uporabite to znanje, da prioritizirate naloge ali ustvarite prilagojene predloge, ki so optimizirane za zmogljivosti modela.
-
Pomembna je iteracija in validacija. Modeli se hitro razvijajo, prav tako tehnike za inženiring pozivov. Kot strokovnjak za domeno imate morda dodatne kontekste ali kriterije za vašo specifično aplikacijo, ki morda ne veljajo za širšo skupnost. Uporabite orodja in tehnike inženiringa pozivov za "hitri začetek" konstrukcije poziva, nato iterirajte in validirajte rezultate s svojo intuicijo in strokovnim znanjem domene. 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.
Zdaj si ogledajmo običajne najboljše prakse, ki jih priporočajo strokovnjaki OpenAI in Azure OpenAI.
| Kaj | Zakaj |
|---|---|
| Ocenite najnovejše modele. | Nove generacije modelov verjetno prinašajo izboljšane funkcije in kakovost – vendar lahko povzročijo višje stroške. Ocenite jih glede vpliva in se nato odločite o migraciji. |
| Ločite navodila in kontekst | Preverite, ali vaš model/ponudnik določa ločila, da bolj jasno loči navodila, primarno in sekundarno vsebino. To lahko pomaga modelom natančneje dodeliti teže nizom (tokenom). |
| Bodite specifični in jasni | Podajte več podrobnosti o želenem kontekstu, rezultatu, dolžini, formatu, slogu itd. To bo izboljšalo tako kakovost kot konsistentnost odgovorov. Zajamčite recepte v ponovnih uporabnih predlogah. |
| Bodite opisni, uporabite primere | Modeli morda bolje odgovorijo na pristop "pokaži in povej". Začnite z zero-shot pristopom, kjer mu daste navodilo (brez primerov), nato poskusite few-shot kot izboljšavo, kjer zagotovite nekaj primerov želenega izhoda. Uporabite analogije. |
| Uporabite namige za začetek dopolnitev | Spodbudite model k želenemu rezultatu tako, da mu daste nekaj uvodnih besed ali fraz, ki jih lahko uporabi kot izhodišče za odgovor. |
| Ponovite | Včasih boste morali modele nekajkrat ponoviti. Dajte navodila pred in po primarni vsebini, uporabite navodilo in namig itd. Iterirajte in validirajte, da vidite, kaj deluje. |
| Pomemben je vrstni red | Vrstni red, v katerem modelu podate informacije, lahko vpliva na izhod, tudi pri učnih primerih, zaradi pristranskosti na nedavnost. Poskusite različne možnosti, da vidite, kaj najbolje deluje. |
| Dajte modelu možnost "izhoda" | Modelu dajte izhodni odgovor, ki ga lahko poda, če iz kakršnega koli razloga ne more dokončati naloge. To lahko zmanjša možnost, da model generira napačne ali izmišljene odgovore. |
Kot pri vsaki najboljši praksi se spomnite, da se lahko vaša uporabniška izkušnja razlikuje glede na model, nalogo in domeno. Uporabite jih kot izhodišče in iterirajte, da najdete, kaj vam najbolj ustreza. Nenehno ponovno ocenjujte svoj proces inženiringa pozivov, ko so na voljo novi modeli in orodja, s poudarkom na razširljivosti procesa in kakovosti odgovorov.
Čestitamo! Prišli ste do konca lekcije! Čas je, da nekatere koncepte in tehnike preizkusite z resničnimi primeri!
Za našo nalogo bomo uporabili Jupyter zvezek z vajami, ki jih lahko izpolnite interaktivno. Zvezek lahko tudi razširite s svojimi Markdown in Code celicami, da sami raziskujete ideje in tehnike.
- (Priporočeno) Zaženite GitHub Codespaces
- (Alternativno) Klonirajte repozitorij na svoj lokalni računalnik in ga uporabljajte z Docker Desktop
- (Alternativno) Odprite zvezek v vašem priljubljenem okolju za zagon zvezkov.
- Kopirajte datoteko
.env.copyiz korena repozitorija v.envin izpolnite vrednostiAZURE_OPENAI_API_KEY,AZURE_OPENAI_ENDPOINTinAZURE_OPENAI_DEPLOYMENT. Nato se vrnite na oddelek Learning Sandbox, da izveste kako.
- Izberite jedro za zagon. Če uporabljate možnosti 1 ali 2, preprosto izberite privzeto Python 3.10.x jedro, ki ga zagotavlja razvojni kontejner.
Pripravljeni ste za izvajanje vaj. Opozarjamo, da tukaj ni pravih in napačnih odgovorov – gre za raziskovanje možnosti z metodo poskušanja in napake ter razvijanje intuicije, kaj deluje za določen model in domeno uporabe.
Zato tukaj ni segmentov z rešitvami kode. Namesto tega bo v zvezku nekaj Markdown celic z naslovom "Moja rešitev:", ki prikazujejo en primer izhoda za referenco.
Kateri od naslednjih je dober poziv, 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 med sončnim zahodom
- Pokaži mi sliko rdečega avtomobila znamke Volvo in modela XC90
Odgovor: 2, ker je najboljši poziv, saj poda podrobnosti o "čemu" in gre v specifičnosti (ne gre samo za katerikoli avto, ampak specifično znamko in model) ter opisuje celotno okolje. Najbližje temu je 3, ki prav tako vsebuje veliko opisov.
Poskusite uporabiti tehniko "namiga" s pozivom: Dokončaj stavek "Pokaži mi sliko rdečega avtomobila znamke Volvo in ". Kako odgovori, in kako bi ga izboljšali?
Želite izvedeti več o različnih konceptih inženiringa pozivov? Obiščite stran za nadaljnje učenje, kjer najdete druge odlične vire o tej temi.
Nato pojdite na Lekcijo 5, kjer bomo pogledali napredne tehnike pozivanja!
Omejitev odgovornosti: Ta dokument je bil preveden z uporabo AI prevajalske storitve Co-op Translator. Čeprav si prizadevamo za natančnost, vas prosimo, da upoštevate, da avtomatizirani prevodi lahko vsebujejo napake ali netočnosti. Izvirni dokument v njegovem izvirnem jeziku je treba obravnavati kot avtoritativni vir. Za kritične informacije je priporočljiv strokovni človeški prevod. Ne odgovarjamo za morebitna nesporazume ali napačne interpretacije, ki izhajajo iz uporabe tega prevoda.







