Skip to content

Latest commit

 

History

History
409 lines (255 loc) · 47.8 KB

File metadata and controls

409 lines (255 loc) · 47.8 KB

Fundamentele Ingineriei Prompturilor

Fundamentele Ingineriei Prompturilor

Introducere

Acest modul acoperă conceptele și tehnicile esențiale pentru crearea de prompturi eficiente în modelele AI generative. Modul în care scrii promptul către un LLM contează de asemenea. Un prompt atent realizat poate obține o calitate mai bună a răspunsului. Dar ce înseamnă exact termenii prompt și ingineria prompturilor? Și cum îmbunătățesc promptul input pe care îl trimit către LLM? Acestea sunt întrebările la care vom încerca să răspundem în cadrul acestui capitol și următorul.

AI Generativ este capabil să creeze conținut nou (de exemplu, text, imagini, audio, cod etc.) ca răspuns la cererile utilizatorilor. Realizează acest lucru folosind Modele Mari de Limbaj precum seria GPT a OpenAI ("Generative Pre-trained Transformer"), antrenate pentru a folosi limbaj natural și cod.

Utilizatorii pot acum interacționa cu aceste modele folosind paradigme cunoscute, precum chat, fără a avea nevoie de expertiză tehnică sau instruire. Modelele sunt bazate pe prompturi - utilizatorii trimit un input text (prompt) și primesc înapoi răspunsul AI (completare). Ei pot apoi să "converseze cu AI-ul" iterativ, în conversații cu mai multe tururi, rafinând promptul până când răspunsul corespunde așteptărilor lor.

„Prompturile” devin acum principalul interfață de programare pentru aplicațiile AI generative, indicând modelelor ce să facă și influențând calitatea răspunsurilor returnate. „Ingineria prompturilor” este un domeniu în rapidă dezvoltare care se concentrează pe proiectarea și optimizarea prompturilor pentru a oferi răspunsuri consistente și de calitate la scară largă.

Obiective de învățare

În această lecție învățăm ce este Ingineria Prompturilor, de ce contează și cum să creăm prompturi mai eficiente pentru un model și un obiectiv aplicațional dat. Vom înțelege conceptele de bază și cele mai bune practici pentru ingineria prompturilor - și vom învăța despre un mediu interactiv „sandbox” în Jupyter Notebooks unde putem vedea aceste concepte aplicate în exemple reale.

La finalul acestei lecții vom putea:

  1. Explica ce este ingineria prompturilor și de ce contează.
  2. Descrie componentele unui prompt și cum sunt folosite.
  3. Învața cele mai bune practici și tehnici pentru ingineria prompturilor.
  4. Aplica tehnicile învățate pe exemple reale, utilizând un endpoint OpenAI.

Termeni cheie

Ingineria Prompturilor: Practica de proiectare și rafinare a inputurilor pentru a ghida modelele AI să producă rezultate dorite.
Tokenizare: Procesul de transformare a textului în unități mai mici, numite tokeni, pe care un model le poate înțelege și procesa.
LLM-uri Antrenate pe Instrucțiuni: Modele Mari de Limbaj (LLM) care au fost ajustate cu instrucțiuni specifice pentru a îmbunătăți acuratețea și relevanța răspunsurilor lor.

Mediu de Învățare Sandbox

Ingineria prompturilor este în prezent mai mult o artă decât o știință. Cel mai bun mod de a ne îmbunătăți intuiția este să exersăm mai mult și să adoptăm o abordare de tip încercare și eroare care combină expertiza domeniului de aplicare cu tehnicile recomandate și optimizările specifice modelului.

Jupyter Notebook-ul care însoțește această lecție oferă un mediu sandbox unde poți încerca ceea ce înveți - pe parcurs sau ca parte a provocării cu cod la final. Pentru a executa exercițiile, vei avea nevoie de:

  1. O cheie API Azure OpenAI - endpoint-ul serviciului pentru un LLM implementat.
  2. Un Runtime Python - în care poate fi executat Notebook-ul.
  3. Variabile de mediu locale - completează acum pașii din SETUP pentru a fi gata.

Notebook-ul vine cu exerciții de start - dar ești încurajat să adaugi propriile secțiuni de Markdown (descriere) și Cod (cereri prompt) pentru a încerca mai multe exemple sau idei - și să-ți construiești intuiția pentru proiectarea prompturilor.

Ghid ilustrat

Vrei să înțelegi imaginea de ansamblu a ceea ce acoperă această lecție înainte să începi? Consultă acest ghid ilustrat, care îți oferă o idee despre principalele subiecte acoperite și punctele cheie de reflectat pentru fiecare. Planul lecției te conduce de la înțelegerea conceptelor de bază și a provocărilor către abordarea lor cu tehnici relevante de inginerie a prompturilor și cele mai bune practici. Reține că secțiunea „Tehnici Avansate” din acest ghid face referire la conținutul acoperit în capitolul următor al acestui curriculum.

Ghid Ilustrat al Ingineriei Prompturilor

Startup-ul nostru

Acum, să vorbim despre cum acest subiect se raportează la misiunea startup-ului nostru de a aduce inovația AI în educație. Dorim să construim aplicații AI pentru învățare personalizată - așa că să ne gândim cum diferiți utilizatori ai aplicației noastre ar putea „proiecta” prompturi:

  • Administratorii ar putea cere AI-ului să analizeze datele curriculumului pentru a identifica lacune în acoperire. AI-ul poate rezuma rezultatele sau le poate vizualiza cu cod.
  • Educatorii ar putea cere AI-ului să genereze un plan de lecție pentru un public țintă și un subiect. AI-ul poate construi planul personalizat într-un format specificat.
  • Elevii ar putea cere AI-ului să le fie tutor într-un subiect dificil. AI-ul poate ghida acum elevii cu lecții, sugestii și exemple adaptate nivelului lor.

Acesta este doar vârful aisbergului. Consultă Prompts For Education - o bibliotecă open-source de prompturi curatoriată de experți în educație - pentru a obține o perspectivă mai largă asupra posibilităților! Încearcă să rulezi unele dintre aceste prompturi în sandbox sau folosind OpenAI Playground pentru a vedea ce se întâmplă!

Ce este Ingineria Prompturilor?

Am început această lecție definind Ingineria Prompturilor ca procesul de proiectare și optimizare a inputurilor text (prompturi) pentru a livra răspunsuri consistente și de calitate (completări) pentru un anumit obiectiv aplicațional și model. Putem considera acest proces în 2 pași:

  • proiectarea promptului inițial pentru un anumit model și obiectiv
  • rafinarea promptului iterativ pentru a îmbunătăți calitatea răspunsului

Este în mod necesar un proces de încercare și eroare care necesită intuiția și efortul utilizatorului pentru a obține rezultate optime. Deci de ce este important? Pentru a răspunde la această întrebare, trebuie mai întâi să înțelegem trei concepte:

  • Tokenizarea = cum „vede” modelul promptul
  • LLM-urile de bază = cum „procesează” modelul de bază un prompt
  • LLM-urile antrenate pe instrucțiuni = cum poate modelul acum să „vadă sarcini”

Tokenizarea

Un LLM vede prompturile ca o secvență de tokeni unde diferite modele (sau versiuni ale unui model) pot tokeniza același prompt în moduri diferite. Deoarece LLM-urile sunt antrenate pe tokeni (și nu pe text brut), modul în care prompturile sunt tokenizate are un impact direct asupra calității răspunsului generat.

Pentru a-ți face o idee despre cum funcționează tokenizarea, încearcă unelte precum OpenAI Tokenizer afișate mai jos. Copiază promptul tău - și vezi cum se transformă în tokeni, acordând atenție modului în care sunt tratate caracterele spațiu și semnele de punctuație. Reține că acest exemplu arată un LLM mai vechi (GPT-3) - deci încercarea cu un model mai nou poate produce un rezultat diferit.

Tokenizare

Concept: Modele Fundamentale

După ce un prompt este tokenizat, funcția principală a "LLM-ului de bază" (sau modelului fundamental) este să prezică tokenul din acea secvență. Deoarece LLM-urile sunt antrenate pe date masive de text, ele au o bună înțelegere a relațiilor statistice dintre tokeni și pot face această predicție cu un anumit grad de încredere. Reține că ele nu înțeleg sensul cuvintelor din prompt sau token; ele văd doar un tipar pe care îl pot „completa” cu următoarea predicție. Pot continua să prezică secvența până când se termină prin intervenția utilizatorului sau o condiție prestabilită.

Vrei să vezi cum funcționează completarea bazată pe prompt? Introdu promptul de mai sus în Azure OpenAI Studio Chat Playground cu setările implicite. Sistemul este configurat să trateze prompturile ca cereri de informații - așa că ar trebui să vezi o completare care satisface acest context.

Dar ce se întâmplă dacă utilizatorul vrea să vadă ceva specific care să corespundă unui anumit criteriu sau obiectiv de sarcină? Aici intră în joc LLM-urile antrenate pe instrucțiuni.

Completare Chat LLM de bază

Concept: LLM-uri Antrenate pe Instrucțiuni

Un LLM Antrenat pe Instrucțiuni pornește de la modelul fundamental și îl ajustează cu exemple sau perechi input/output (de exemplu, „mesaje” cu mai multe tururi) care pot conține instrucțiuni clare - iar răspunsul AI încearcă să urmeze acea instrucțiune.

Acest lucru folosește tehnici precum Învățarea prin Recompensă cu Feedback Uman (RLHF) ce pot antrena modelul să urmeze instrucțiuni și să învețe din feedback, astfel încât să producă răspunsuri mai potrivite pentru aplicații practice și mai relevante pentru obiectivele utilizatorului.

Hai să încercăm - revino la promptul de mai sus, dar acum schimbă mesajul sistem pentru a oferi următoarea instrucțiune ca context:

Rezuma conținutul pe care îl primești pentru un elev de clasa a doua. Păstrează rezultatul într-un paragraf și 3-5 puncte principale în format listă.

Vezi cum rezultatul este acum ajustat să reflecte scopul și formatul dorit? Un educator poate folosi direct acest răspuns în slide-urile pentru acea clasă.

Completare Chat LLM Antrenat pe Instrucțiuni

De ce avem nevoie de Ingineria Prompturilor?

Acum că știm cum sunt procesate prompturile de către LLM-uri, să vorbim despre de ce avem nevoie de ingineria prompturilor. Răspunsul constă în faptul că LLM-urile actuale prezintă o serie de provocări care fac ca completările fiabile și consistente să fie mai greu de obținut fără a depune efort în construcția și optimizarea promptului. De exemplu:

  1. Răspunsurile modelului sunt stocastice. Același prompt va produce probabil răspunsuri diferite cu modele sau versiuni diferite ale modelului. Și chiar și cu același model pot apărea rezultate diferite la momente diferite. Tehnicile de inginerie a prompturilor ne pot ajuta să minimizăm aceste variații oferind ghidaje mai bune.

  2. Modelele pot fabrica răspunsuri. Modelele sunt antrenate pe seturi de date mari, dar finite, ceea ce înseamnă că le lipsește cunoașterea despre concepte din afara acelui domeniu de antrenament. Ca urmare, pot produce completări inexacte, imaginare sau chiar contradictorii cu fapte cunoscute. Tehnicile de inginerie a prompturilor ajută utilizatorii să identifice și să atenueze astfel de fabricări, de exemplu, cerând AI-ului citări sau explicații.

  3. Capabilitățile modelelor vor varia. Modelele noi sau generațiile noi vor avea capabilități mai bogate, dar vor aduce de asemenea particularități unice și compromisuri în cost și complexitate. Ingineria prompturilor ne poate ajuta să dezvoltăm cele mai bune practici și fluxuri de lucru care abstractizează diferențele și se adaptează la cerințele specifice modelului într-un mod scalabil și fluid.

Hai să vedem asta în acțiune în OpenAI sau Azure OpenAI Playground:

  • Folosește același prompt cu implementări diferite de LLM (de exemplu, OpenAI, Azure OpenAI, Hugging Face) - ai observat variațiile?
  • Folosește același prompt repetat cu același deployment LLM (de exemplu, Azure OpenAI playground) - cum au diferit aceste variații?

Exemplu de Fabricări

În acest curs, folosim termenul „fabricare” pentru a face referire la fenomenul prin care LLM-urile generează uneori informații factual inexacte din cauza limitărilor antrenamentului lor sau a altor constrângeri. Probabil ai mai auzit acest fenomen numit „halucinații” în articole populare sau lucrări de cercetare. Totuși, recomandăm puternic folosirea termenului „fabricare” pentru a evita antropomorfizarea comportamentului prin atribuirea unui trăsătură umană unui rezultat generat de mașină. Aceasta întărește și ghidurile pentru AI responsabil din perspectiva terminologiei, eliminând termeni care ar putea fi considerați ofensatori sau neincluzivi în anumite contexte.

Vrei să înțelegi cum funcționează fabricările? Gândește-te la un prompt care instructează AI să genereze conținut despre un subiect inexistent (pentru a te asigura că nu se găsește în datasetul de antrenament). De exemplu - am încercat acest prompt:

Prompt: generează un plan de lecție pentru Războiul Marțian din 2076. O căutare web mi-a arătat că există relatări fictive (de exemplu, seriale de televiziune sau cărți) despre războaie marțiene - dar niciuna în 2076. Bunul simț ne spune de asemenea că 2076 este în viitor și, prin urmare, nu poate fi asociat cu un eveniment real.

Deci ce se întâmplă când rulăm acest prompt cu diferiți furnizori LLM?

Răspuns 1: OpenAI Playground (GPT-35)

Response 1

Răspuns 2: Azure OpenAI Playground (GPT-35)

Response 2

Răspuns 3: : Hugging Face Chat Playground (LLama-2)

Response 3

Așa cum era de așteptat, fiecare model (sau versiune a modelului) produce răspunsuri ușor diferite datorită comportamentului aleator și variațiilor în capacitatea modelului. De exemplu, un model se adresează unui public de clasa a 8-a, în timp ce celălalt presupune un elev de liceu. Dar toate cele trei modele au generat răspunsuri care ar putea convinge un utilizator neinformat că evenimentul a fost real.

Tehnicile de inginerie a promptului precum metaprompting și configurarea temperaturii pot reduce fabricările modelului într-o anumită măsură. Noile arhitecturi de inginerie a promptului încorporează de asemenea noi unelte și tehnici fluid în fluxul promptului pentru a atenua sau reduce unele dintre aceste efecte.

Studiu de Caz: GitHub Copilot

Să încheiem această secțiune având o idee despre cum se folosește ingineria promptului în soluții reale, analizând un Studiu de Caz: GitHub Copilot.

GitHub Copilot este „Programatorul tău AI în pereche” – convertește prompturile text în completări de cod și este integrat în mediul tău de dezvoltare (de exemplu, Visual Studio Code) pentru o experiență utilizator fluidă. Așa cum este documentat în seria de bloguri de mai jos, prima versiune a fost bazată pe modelul OpenAI Codex – inginerii realizând rapid necesitatea de a adapta fin modelul și de a dezvolta tehnici mai bune de inginerie a promptului pentru a îmbunătăți calitatea codului. În iulie, ei au lansat un model AI îmbunătățit care depășește Codex pentru sugestii și mai rapide.

Citește postările în ordine pentru a urmări călătoria lor de învățare.

Poți de asemenea să răsfoiești blogul lor de inginerie pentru mai multe articole, cum ar fi acesta care arată cum sunt aplicate aceste modele și tehnici pentru a conduce aplicații din lumea reală.


Construcția promptului

Am văzut de ce ingineria promptului este importantă – acum să înțelegem cum sunt construite prompturile ca să putem evalua diferite tehnici pentru un design mai eficient al promptului.

Prompt de bază

Să începem cu promptul de bază: un text introdus trimis modelului fără alt context. Iată un exemplu – când trimitem primele câteva cuvinte ale imnului național al SUA către OpenAI Completion API, el completează instantaneu răspunsul cu următoarele câteva versuri, ilustrând comportamentul de predicție de bază.

Prompt (Input) Completare (Output)
Oh say can you see Pare că începi versurile la „The Star-Spangled Banner,” imnul național al Statelor Unite. Versurile complete sunt ...

Prompt complex

Acum să adăugăm context și instrucțiuni la promptul de bază. Chat Completion API ne permite să construim un prompt complex ca o colecție de mesaje cu:

  • Perechi input/output reflectând inputul utilizatorului și răspunsul asistentului.
  • Mesaj al sistemului care setează contextul pentru comportamentul sau personalitatea asistentului.

Cererea este acum în forma de mai jos, unde tokenizarea capturează eficient informațiile relevante din context și conversație. Acum, schimbarea contextului sistemului poate fi la fel de impactantă asupra calității completărilor ca și inputurile utilizatorului oferite.

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?"}
    ]
)

Prompt de instrucțiuni

În exemplele de mai sus, promptul utilizatorului a fost o simplă interogare text ce poate fi interpretată ca o cerere de informații. Cu prompturi de instrucțiuni, putem folosi acel text pentru a specifica o sarcină în mai multe detalii, oferind o ghidare mai bună AI-ului. Iată un exemplu:

Prompt (Input) Completare (Output) Tip instrucțiune
Scrie o descriere a Războiului Civil a returnat un paragraf simplu Simplu
Scrie o descriere a Războiului Civil. Furnizează date și evenimente cheie și descrie semnificația lor a returnat un paragraf urmat de o listă cu datele evenimentelor cheie și descrieri Complex
Scrie o descriere a Războiului Civil în 1 paragraf. Oferă 3 puncte bullet cu date cheie și semnificația lor. Oferă încă 3 puncte bullet cu figuri istorice importante și contribuțiile lor. Returnează outputul ca fișier JSON returnează detalii extinse într-o casetă de text, formatat ca JSON ce poate fi copiat și validat după nevoie Complex. Formatat.

Conținut primar

În exemplele de mai sus, promptul a rămas destul de deschis, permițând LLM-ului să decidă ce parte din setul său preantrenat este relevantă. Cu designul conținut primar, textul de input este împărțit în două părți:

  • o instrucțiune (acțiune)
  • conținut relevant (care influențează acțiunea)

Iată un exemplu unde instrucțiunea este „rezumă asta în 2 propoziții”.

Prompt (Input) Completare (Output)
Jupiter este a cincea planetă de la Soare și cea mai mare din Sistemul Solar. Este un gigant gazos cu o masă de o mie de ori mai mică decât cea a Soarelui, dar de două ori și jumătate mai mare decât a tuturor celorlalte planete din Sistemul Solar împreună. Jupiter este unul dintre cele mai strălucitoare obiecte vizibile cu ochiul liber pe cerul nopții și a fost cunoscut de civilizațiile antice încă dinainte de istoria înregistrată. Poartă numele zeului roman Jupiter.[19] Privit de pe Pământ, Jupiter poate fi suficient de strălucitor pentru ca lumina reflectată să arunce umbre vizibile,[20] și este în medie al treilea obiect natural ca strălucire pe cerul nopții după Lună și Venus.
Rezumați în 2 propoziții scurte
Jupiter, a cincea planetă de la Soare, este cea mai mare din Sistemul Solar și este cunoscută pentru faptul că este unul dintre cele mai strălucitoare obiecte pe cerul nopții. Purtând numele zeului roman Jupiter, este un gigant gazos a cărui masă este de două ori și jumătate mai mare decât cea a tuturor celorlalte planete din Sistemul Solar împreună.

Segmentul de conținut primar poate fi folosit în mai multe moduri pentru a conduce instrucțiuni mai eficiente:

  • Exemple - în loc să spui modelului ce să facă printr-o instrucțiune explicită, oferă-i exemple a ceea ce trebuie să facă și lasă-l să deducă tiparul.
  • Indicii - urmează instrucțiunea cu un „indiciu” care pregătește completarea, ghidând modelul spre răspunsuri mai relevante.
  • Șabloane - acestea sunt „rețete” repetitive pentru prompturi cu locuri libere (variabile) care pot fi personalizate cu date pentru cazuri de utilizare specifice.

Să explorăm acestea în acțiune.

Folosirea Exemplelor

Aceasta este o abordare în care folosești conținutul primar pentru a „hrăni modelul” cu câteva exemple ale outputului dorit pentru o instrucțiune dată și îl lași să deducă modelul pentru outputul dorit. În funcție de numărul de exemple oferite, putem avea zero-shot prompting, one-shot prompting, few-shot prompting etc.

Promptul constă acum în trei componente:

  • O descriere a sarcinii
  • Câteva exemple ale outputului dorit
  • Începutul unui nou exemplu (care devine o descriere implicită a sarcinii)
Tip de învățare Prompt (Input) Completare (Output)
Zero-shot "Soarele strălucește". Tradu în spaniolă "El Sol está brillando".
One-shot "Soarele strălucește" => "El Sol está brillando".
„Este o zi friguroasă și vântoasă” =>
"Es un día frío y ventoso".
Few-shot Jucătorul a alergat bazele => Baseball
Jucătorul a dat un as => Tenis
Jucătorul a dat șase => Cricket
Jucătorul a făcut un slam-dunk =>
Baschet

Observă cum în zero-shot prompting a trebuit să oferim instrucțiunea explicită („Tradu în spaniolă”), dar în exemplul one-shot promptarea este dedusă. Exemplul few-shot arată cum prin adăugarea de mai multe exemple modelele pot face inferențe mai precise fără instrucțiuni adăugate.

Indiciile în Prompt

O altă tehnică pentru folosirea conținutului primar este să oferi indici în loc de exemple. În acest caz, oferim modelului un impuls în direcția corectă prin introducerea lui cu o mostră care reflectă formatul răspunsului dorit. Modelul „prinde indiciul” și continuă în aceeași linie.

Număr de indicii Prompt (Input) Completare (Output)
0 Jupiter este a cincea planetă de la Soare și cea mai mare din Sistemul Solar. Este un gigant gazos cu o masă de o mie de ori mai mică decât cea a Soarelui, dar de două ori și jumătate mai mare decât a tuturor celorlalte planete din Sistemul Solar împreună. Jupiter este unul dintre cele mai strălucitoare obiecte vizibile cu ochiul liber pe cerul nopții și a fost cunoscut de civilizațiile antice încă dinainte de istoria înregistrată.
Rezumați acest text
Jupiter este cea mai mare planetă din Sistemul Solar și a cincea de la Soare. Este un gigant gazos cu o masă de 1/1000 din cea a Soarelui, dar este mai greu decât toate celelalte planete la un loc. Civilizațiile antice îl cunosc de mult și este ușor vizibil pe cerul nopții.
1 Jupiter este a cincea planetă de la Soare și cea mai mare din Sistemul Solar. Este un gigant gazos cu o masă de o mie de ori mai mică decât cea a Soarelui, dar de două ori și jumătate mai mare decât toate celelalte planete din Sistemul Solar împreună. Jupiter este unul dintre cele mai strălucitoare obiecte vizibile cu ochiul liber pe cerul nopții și a fost cunoscut civilizațiilor antice încă dinainte de istoria consemnată.
Rezumați aceasta
Ceea ce am învățat este că Jupiter
este a cincea planetă de la Soare și cea mai mare din Sistemul Solar. Este un gigant gazos cu o masă de o mie de ori mai mică decât cea a Soarelui, dar de două ori și jumătate mai mare decât toate celelalte planete combinate. Este ușor vizibil cu ochiul liber și a fost cunoscut încă din vremuri străvechi.
2 Jupiter este a cincea planetă de la Soare și cea mai mare din Sistemul Solar. Este un gigant gazos cu o masă de o mie de ori mai mică decât cea a Soarelui, dar de două ori și jumătate mai mare decât toate celelalte planete din Sistemul Solar împreună. Jupiter este unul dintre cele mai strălucitoare obiecte vizibile cu ochiul liber pe cerul nopții și a fost cunoscut civilizațiilor antice încă dinainte de istoria consemnată.
Rezumați aceasta
Top 3 lucruri pe care le-am învățat:
1. Jupiter este a cincea planetă de la Soare și cea mai mare din Sistemul Solar.
2. Este un gigant gazos cu o masă de o mie de ori mai mică decât cea a Soarelui...
3. Jupiter a fost vizibil cu ochiul liber încă din vremuri străvechi ...

Șabloane de prompturi

Un șablon de prompt este o rețetă predefinită pentru un prompt care poate fi stocată și reutilizată după nevoie, pentru a oferi experiențe mai consistente utilizatorilor la scară largă. În cea mai simplă formă, este pur și simplu o colecție de exemple de prompturi precum acesta de la OpenAI care oferă atât componente interactive de prompt (mesaje pentru utilizator și sistem) cât și formatul cererii prin API - pentru a sprijini reutilizarea.

În forma sa mai complexă, cum este exemplul de la LangChain, conține locuri pentru date care pot fi înlocuite cu date din diferite surse (introducerea utilizatorului, contextul sistemului, surse externe etc.) pentru a genera un prompt dinamic. Aceasta ne permite să creăm o bibliotecă de prompturi reutilizabile care pot fi folosite pentru a oferi experiențe consistente programatic la scară.

În sfârșit, valoarea reală a șabloanelor constă în abilitatea de a crea și publica biblioteci de prompturi pentru domenii verticale de aplicație - unde șablonul de prompt este acum optimizat să reflecte contextul specific al aplicației sau exemplele care fac răspunsurile mai relevante și exacte pentru audiența țintă. Repozitoriul Prompts For Edu este un exemplu excelent, colecționând o bibliotecă de prompturi pentru domeniul educației cu accent pe obiective cheie precum planificarea lecțiilor, proiectarea curriculei, tutoratul studenților etc.

Conținut de sprijin

Dacă ne gândim la construcția unui prompt ca având o instrucțiune (sarcină) și un țintă (conținutul principal), atunci conținutul secundar este precum un context suplimentar pe care îl oferim pentru a influența răspunsul într-un fel. Ar putea fi parametri de configurare, instrucțiuni de formatare, taxonomii de subiecte etc. care pot ajuta modelul să ajusteze răspunsul pentru a corespunde obiectivelor sau așteptărilor utilizatorului.

De exemplu: Având un catalog de cursuri cu metadate extinse (nume, descriere, nivel, taguri metadate, instructor etc.) pentru toate cursurile disponibile în curriculă:

  • putem defini o instrucțiune pentru „rezumă catalogul de cursuri pentru toamna 2023”
  • putem folosi conținutul principal pentru a oferi câteva exemple de rezultat dorit
  • putem folosi conținutul secundar pentru a identifica primele 5 "taguri" de interes.

Acum, modelul poate oferi un rezumat în formatul arătat de acele exemple - dar dacă un rezultat conține mai multe taguri, poate prioritiza cele 5 taguri identificate în conținutul secundar.


Cele mai bune practici pentru prompturi

Acum că știm cum pot fi construite prompturile, putem începe să ne gândim la cum să le proiectăm pentru a reflecta cele mai bune practici. Putem analiza asta în două părți - având atitudinea (mindset) potrivită și aplicând tehnicile potrivite.

Atitudinea în ingineria prompturilor

Ingineria prompturilor este un proces de încercare și eroare, așa că ține minte trei factori generali de ghidare:

  1. Înțelegerea domeniului este importantă. Precizia și relevanța răspunsului depind de domeniul în care aplicația sau utilizatorul operează. Aplică-ți intuiția și expertiza domeniului pentru a personaliza tehnicile mai departe. De exemplu, definește personalități specifice domeniului în prompturile sistemului sau folosește șabloane specifice domeniului în prompturile utilizatorului. Oferă conținut secundar care reflectă contexte specifice domeniului sau folosește indici și exemple specifice domeniului pentru a ghida modelul către tipare familiare de utilizare.

  2. Înțelegerea modelului este importantă. Știm că modelele sunt pe natură lor stocastice. Dar implementările modelului pot varia în funcție de setul de date de antrenament folosit (cunoștințe pre-antrenate), funcționalitățile pe care le oferă (ex: prin API sau SDK) și tipul conținutului pentru care sunt optimizate (ex: cod, imagini, text). Înțelege punctele forte și limitările modelului pe care îl folosești și folosește acestă cunoaștere pentru a prioritiza sarcini sau pentru a construi șabloane personalizate optimizate pentru capabilitățile modelului.

  3. Iterația și validarea contează. Modelele evoluează rapid, la fel ca și tehnicile de inginerie a prompturilor. Ca expert în domeniu, s-ar putea să ai alte contexte sau criterii pentru aplicația ta specifică, care pot să nu se aplice comunității mai largi. Folosește instrumente și tehnici de inginerie a prompturilor pentru a „accelera” construcția unui prompt, apoi iteră și validează rezultatele folosindu-ți propria intuiție și expertiză. Înregistrează-ți observațiile și creează o bază de cunoștințe (ex: biblioteci de prompturi) care pot fi folosite ca bază nouă de către alții, pentru iterații mai rapide pe viitor.

Cele mai bune practici

Acum, să vedem cele mai comune bune practici recomandate de practicienii de la OpenAI și Azure OpenAI.

Ce De ce
Evaluează cele mai recente modele Noile generații de modele au probabil caracteristici și calitate îmbunătățite - dar pot implica și costuri mai mari. Evaluează impactul, apoi decide migrarea.
Separă instrucțiunile și contextul Verifică dacă modelul sau furnizorul folosește delimitatori pentru a distinge mai clar instrucțiunile, conținutul principal și cel secundar. Acest lucru poate ajuta modelele să aloce mai corect greutăți tokenurilor.
Fii specific și clar Oferă mai multe detalii despre contextul dorit, rezultatul, lungimea, formatul, stilul etc. Acest lucru îmbunătățește atât calitatea, cât și consistența răspunsurilor. Înregistrează rețetele în șabloane reutilizabile.
Fii descriptiv, folosește exemple Modelele pot răspunde mai bine unei metode „arată și spune”. Începe cu o abordare zero-shot, unde dai instrucțiunea (fără exemple), apoi încearcă few-shot pentru rafinare, oferind câteva exemple de rezultat dorit. Folosește analogii.
Folosește indici pentru a porni completările Încurajează modelul spre un rezultat dorit dându-i câteva cuvinte sau expresii care să servească drept punct de plecare pentru răspuns.
Reamplică (Double Down) Uneori poate fi nevoie să repeți instrucțiunile modelului. Furnizează instrucțiuni înainte și după conținutul principal, folosește o instrucțiune și un indiciu, etc. Iterează și validează pentru a vedea ce funcționează.
Ordinea contează Ordinea în care prezinți informația modelului poate influența rezultatul, chiar și în exemplele de învățare, datorită biasului de recență. Încearcă opțiuni diferite ca să vezi ce funcționează mai bine.
Oferă modelului o „portiță de ieșire” Oferă modelului o opțiune de răspuns alternativ în caz că nu poate completa sarcina. Acest lucru reduce șansele ca modelul să genereze răspunsuri false sau fabricate.

Ca orice bună practică, amintește-ți că experiența ta poate varia în funcție de model, sarcină și domeniu. Folosește aceste recomandări ca punct de plecare și iterează pentru a găsi ce funcționează cel mai bine pentru tine. Reevaluează constant procesul de inginerie a prompturilor pe măsură ce apar noi modele și instrumente, cu accent pe scalabilitatea procesului și calitatea răspunsului.

Tema

Felicitări! Ai ajuns la finalul lecției! Este timpul să pui în practică unele dintre conceptele și tehnicile studiate prin exemple reale!

Pentru tema noastră vom folosi un Jupyter Notebook cu exerciții pe care le poți completa interactiv. Poți extinde Notebook-ul cu propriile tale celule Markdown și cod pentru a explora idei și tehnici pe cont propriu.

Pentru a începe, fă fork la repo, apoi

  • (Recomandat) Lansează GitHub Codespaces
  • (Alternativ) Clonează repo-ul pe dispozitivul tău local și folosește-l cu Docker Desktop
  • (Alternativ) Deschide Notebook-ul în mediul de rulare preferat de Notebook.

Apoi, configurează variabilele de mediu

  • Copiază fișierul .env.copy aflat în rădăcina repo-ului într-un fișier .env și completează valorile pentru AZURE_OPENAI_API_KEY, AZURE_OPENAI_ENDPOINT și AZURE_OPENAI_DEPLOYMENT. Revino la secțiunea Learning Sandbox pentru instrucțiuni.

Apoi, deschide Jupyter Notebook

  • Selectează kernel-ul de rulare. Dacă folosești opțiunile 1 sau 2, selectează pur și simplu kernel-ul Python 3.10.x oferit de containerul dev implicit.

Ești gata să rulezi exercițiile. Reține că aici nu există răspunsuri bune sau greșite - ci doar explorarea opțiunilor prin încercări și construirea intuiției pentru ce funcționează într-un anumit model și domeniu de aplicație.

Din acest motiv, nu există segmente cu Rezolvarea Codului în această lecție. În schimb, Notebook-ul va avea celule Markdown intitulate „Soluția mea:” care arată un exemplu de răspuns pentru referință.

Verificare de cunoștințe

Care dintre următoarele este un prompt bun care respectă unele bune practici rezonabile?

  1. Arată-mi o imagine cu o mașină roșie
  2. Arată-mi o imagine cu o mașină roșie de marca Volvo și model XC90 parcată lângă o stâncă la apus
  3. Arată-mi o imagine cu o mașină roșie de marca Volvo și model XC90

A: 2, este cel mai bun prompt deoarece oferă detalii despre „ce” și intră în detalii (nu orice mașină, ci una specifică ca marcă și model) și de asemenea descrie cadrul înconjurător. 3 este următorul cel mai bun pentru că conține și el multă descriere.

🚀 Provocare

Încearcă să folosești tehnica „indiciului” cu promptul: Completează propoziția „Arată-mi o imagine cu o mașină roșie de marca Volvo și ". Cu ce răspunde și cum ai îmbunătăți promptul?

Bravo! Continuă să înveți

Vrei să afli mai multe despre conceptele diferite din ingineria prompturilor? Accesează pagina de învățare continuă pentru a găsi alte resurse excelente pe acest subiect.

Mergi la Lecția 5 unde vom explora tehnici avansate de prompting!


Declinarea responsabilității:
Acest document a fost tradus utilizând serviciul de traducere AI Co-op Translator. Deși ne străduim pentru acuratețe, vă rugăm să fiți conștienți că traducerile automate pot conține erori sau inexactități. Documentul original în limba sa nativă trebuie considerat sursa autorizată. Pentru informații critice, se recomandă traducerea profesională realizată de un specialist uman. Nu ne asumăm responsabilitatea pentru eventualele neînțelegeri sau interpretări greșite rezultate din utilizarea acestei traduceri.