ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
Numărul 150
Numărul 149 Numărul 148 Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 140
Abonament PDF

Strategii pentru o inginerie eficientă a prompturilor

Adrian Căliman
Solution Architect @ PitechPlus



Marius Pop
Team Lead @ PitechPlus



PROGRAMARE

Ingineria prompturilor (prompt engineering) este o disciplină relativ recentă, care joacă un rol esențial în obținerea unor rezultate remarcabile prin folosirea modelelor de limbaj de mari dimensiuni (Large Language Models - LLM) nou apărute.

Din experiența noastră practică, constatăm că este cel mai important factor care determină succesul sau eșecul unei soluții bazate pe Generative AI. Spre deosebire de fluxul tradițional de adunare, procesare și stocare a unor cantități enorme de date pentru antrenarea modelelor, situația se schimbă în cazul LLM-urilor. Având în vedere pre-antrenarea lor pe seturi masive de date, accentul se mută pe arta de a crea prompturi.

În rândurile de mai jos, vom oferi mai multe detalii despre ce este de fapt un prompt și vom arăta câteva dintre strategiile comune de utilizare a lor.

Ce este un prompt?

Un prompt reprezintă un "input" sau o instrucțiune oferită unui model de limbaj de mari dimensiuni pentru a obține un răspuns. Poate fi un singur cuvânt, frază, propoziție sau chiar o listă detaliată de instrucțiuni, fiind un punct de pornire pentru ca modelul să genereze un text coerent și relevant din punct de vedere contextual.

Structura unui prompt poate varia în funcție de tipul LLM-ului folosit și de modul în care au fost pregătite datele de antrenament. De exemplu, în cazul modelelor Claude de la Anthropic, se așteaptă ca promptul să înceapă cu "nnHuman:" și să se încheie cu "nnAssistant:"—subliniind nuanțele structurale.

Dincolo de diferențele structurale, este esențial să recunoaștem că, deși conceptele de bază ale unui prompt sunt în general consecvente, nu toate modelele interpretează același prompt în mod identic. Acest aspect poate să nu fie evident în teorie, însă devine evident în aplicarea practică.

Strategiile prezentate mai jos sunt aplicabile în interacțiunile cu majoritatea LLM-urilor. Cu toate acestea, eficacitatea lor poate varia în funcție de tipul și de furnizorul modelului cu care lucrați.

Strategie: Structura clară a promptului

Pentru o abordare sigură și consecventă în crearea unui prompt, atunci când avem un set complex de instrucțiuni, trebuie să avem în considerare o structură.

Deși nu toate prompturile vor conține fiecare din aceste elemente, înțelegerea lor vă va furniza o bază solidă pentru a crea prompturi eficiente.

Vom numi aceasta structură de prompt RIRO (Role, Instructions, Rules, Output).

Sfat: Când creăm prompturi, putem folosi exact aceste titluri în promptul propriu-zis și le putem defini în sintaxa Markdown.

Exemplu:

** Rol 
Acționează ca …  
 
** Instrucțiuni
Analizează inputul și …  
 
** Reguli 
Fă asta și aia, nu face cealaltă 
 
** Output 
Folosește structura json, în acest format. 

Rolul

Abordați acest pas ca și când ați pregăti o scenă: îi indicați AI-ului ce ar trebui să facă - îi atribuiți rolul în marea schemă a lucrurilor. Îi solicitați să revizuiască un fragment de cod, să fie creativ și să creeze poezii sau să vă spună care este sensul vieții? Cereți-o clar, de la început.

Cu cât rolul este mai clar și detaliat, cu atât vor fi mai bune răspunsurile. Rolul poate fi generic, specific, real sau imaginar. Nu trebuie să conțină definiții formale, dar trebuie să specificați precis ce personalitate ar trebui să adopte.

Exemple:

Instrucțiuni

Păstrați totul simplu, dar nu prea simplu. Trebuie să oferiți inteligenței artificiale toate informațiile de care are nevoie pentru a îndeplini sarcina. Este ca și cum i-ați explica o problemă de programare unui prieten - pas cu pas și fără jargon. 

Este foarte important să faceți cât mai puține presupuneri cu putință și să fiți foarte clari în legătură cu succesiunea de pași pe care doriți să îi urmeze. Dacă lista de instrucțiuni este lungă, separați în mod clar în prompt fiecare instrucțiune.

De exemplu, să ne imaginăm că dezvoltăm un asistent AI care generează un rezumat al unei discuții dintre mai mulți oameni.

Modelele mai capabile vor genera un rezumat decent chiar și cu instrucțiuni simple precum "Generează un rezumat bazat pe acest text". Dar, în acest exemplu, lăsăm AI-ul să facă foarte multe presupuneri.

Vă întrebați ce fel de presupuneri? Să fim mai preciși:

"Generează un rezumat bazat pe acest text, urmând acești pași:

Sfat: În prompt engineering, fiecare cuvânt contează. De exemplu, "Generează un rezumat" versus "Generează un rezumat complet și detaliat" pot duce la răspunsuri foarte diferite.

Reguli

Fiecare joc are regulile lui. La fel este și în cazul prompturilor. Acestea sunt niște măsuri de protecție care împiedică AI-ul să devieze de la subiect. Este important să vă gândiți aici în special la fluxurile negative. Care sunt cele câteva reguli specifice pentru afacerea voastră pe care doriți ca inteligența artificială să le gestioneze sau nu? Ca în orice alt aspect atunci când creăm promptul perfect, fiți cât mai clari posibil.

De exemplu, să presupunem că dezvoltăm un chatbot:

Sfat: Furnizarea de exemple (atunci când se aplică) ajută foarte mult la clarificarea așteptărilor.

Output 

Până la urmă, ce ne dorim să obținem de la AI? Un raport de buguri, un fragment de cod rescris sau o implementare a unei noi funcționalități? Fiți preciși cu privire la ceea ce vă așteptați, nu neapărat cu privire la conținutul în sine (care a fost gestionat prin stabilirea adecvată a rolului, instrucțiunilor clare și regulilor), ci cu privire la structura acestuia.

Dacă utilizați AI în mod programatic, prin API, pentru a obține răspunsuri fiabile, este extrem de important să furnizați descrieri lămuritoare ale modului în care ar trebui să arate rezultatul. 

Dacă extrageți mai multe tipuri de informații în răspuns, puteți solicita o structura clară cu cheile pe care le așteptați.

Exemplu:

"Răspundeți cu un obiect JSON valid cu următoarea structură:
{ "language": "Engleză", // limbă detectată în pasul X "answer": "Răspuns la întrebarea utilizatorului aici" 
// Răspuns determinat prin urmarea instrucțiunilor specificate }"

Strategie: prompting pentru modul de gândire

Modul în care funcționează LLM constă în prezicerea următorului cuvânt/token. În esența lor, aceste modele sunt funcții matematice, algoritmi, care nu au nicio capacitate de raționament precum o avem noi, oamenii. Din acest motiv, atunci când un LLM este instruit să răspundă la o problemă matematică sau să utilizeze logica comună, s-ar putea să greșească.

O modalitate de a rezolva această problemă este de a instrui modelul cu privire la modul în care trebuie să "gândească" pentru a obține rezultatul corect. Iată două dintre cele mai frecvente strategii folosite.

Few-Shot Prompting 

În această strategie, adăugăm unul sau mai multe exemple în prompt pentru a explica modelului raționamentul și obținerea răspunsului dorit. Ca regulă generală, cu cât oferim mai multe exemple, cu atât răspunsurile devin mai precise.

Sfat: Cu cât modelul este mai slab, cu atât strategia este mai eficientă.

În mod contrastant, când promptul conține numai întrebarea/instrucțiunea specifică fără exemple, îl numim "Zero-Shot Prompt".

Spre exemplu, să utilizăm modelul mistralai/Mistral-7B-Instruct-v0.2 cu următorul prompt:

Zero-Shot Prompt: 

John a adăugat un nou commit. 
Fiecare fișier are 5 linii adăugate și 3 linii șterse. 
Sunt 3 fișiere în commit.

Întrebare: Câte linii s-au schimbat?

Răspunsul AI-ului:

În total, commitul lui John a adăugat 5 linii pentru fiecare fișier (deoarece sunt trei fișiere), deci 5 * 3 = 15 linii au fost adăugate. Similar, 3 linii au fost șterse din fiecare fișier, deci 3 * 3 = 9 linii au fost șterse. Schimbarea netă este, prin urmare, diferența dintre numărul de linii adăugate și numărul de linii șterse, care este 15 - 9 = 6 linii.

După cum se poate observa în răspuns, deși șirul gândirii și raționamentului a fost aproape corect, la final, a scăzut numărul de linii eliminate din numărul de linii adăugate, în loc să fie adunate.

Acum, haideți să luăm același exemplu, dar oferindu-i exemple de interogări similare cu rezultatele lor corespunzătoare.

Few-Shot Prompt: 

John a adăugat un nou commit. 
Fiecare fișier are 5 linii adăugate și 3 linii șterse. 
Sunt 3 fișiere în commit.

Întrebare: Câte linii s-au schimbat?

Răspuns: Răspunsul este: 15 adăugate, 9 șterse, 
în total 15 + 9 = 24 linii schimbate.

Dan a adăugat un nou commit. 
Fiecare fișier are 7 linii adăugate și 2 linii șterse. 
Sunt 5 fișiere în commit.

Întrebare: Câte linii s-au schimbat?

Răspuns AI:

Pentru commitul lui Dan, sunt 5 fișiere cu 7 linii adăugate 
la fiecare fișier (decii 5 * 7 = 35 linii adăugate).
De asemenea, sunt 5 fișiere cu 2 linii șterse din fiecare 
fișier (decii 5 * 2 = 10 linii șterse). 
Deci, numărul total de linii schimbate este suma linilor
adăugate și a celor șterse, care este 35 + 10 = 45 linii.

Chain-of-Thought (CoT) Prompting 

O altă abordare este să determinăm modelul să gândească pe cont propriu ca să ajungă la rezultat.

Putem face acest lucru adăugând: "Să gândim aceasta pas cu pas." la sfârșitul promptului. Uneori, acest demers poate fi suficient, alteori putem fi chiar mai specifici și să detaliem cum ar trebui să arate fiecare pas.

Astfel, vom obține rezultate mai bune pentru problemele matematice sau de comune, deoarece încurajează AI-ul să abordeze instrucțiunile pas cu pas și să raționeze între ele

Să luăm următorul exemplu de prompt:

CoT Prompt:

Dan a adăugat un nou commit. 
Fiecare fișier are 7 linii adăugate și 2 linii eliminate. 
Sunt 5 fișiere în commit.

Întrebare: Câte linii s-au schimbat?

Să gândim pas cu pas, să calculăm numărul total de linii adăugate și să îl adunăm cu numărul total de linii eliminate.

Răspuns AI:

Pentru a determina numărul total de linii schimbate în 
commitul lui Dan, puteți urma acești pași:

1. Calculați numărul de linii adăugate pentru toate fișierele:
Linii adăugate = Numărul de fișiere * 
Linii adăugate pe fișier = 5 * 7 = 35 de linii

2. Calculați numărul de linii eliminate pentru toate fișierele: 
Linii eliminate = Numărul de fișiere 
* Linii eliminate pe fișier = 5 * 2 = 10 linii

3. Găsiți numărul total de linii schimbate: 
Total linii schimbate = Linii adăugate + 
Linii eliminate = 35 + 10 = 45 de linii

Prin urmare, commitul lui Dan a rezultat într-o 
schimbare de 45 de linii în total.

Sfat: Există deja furnizori care aplică acest lucru în mod implicit, cum ar fi modelele GPT ale OpenAI sau seria Gemini a Google.

Concluzii:

Aceasta este ingineria prompturilor pe scurt!

Ingineria prompturilor nu este doar despre a oferi instrucțiuni, ci este despre a fi foarte clar, având o structură precisă pe care inteligența artificială să o urmeze; la acestea se adaugă cunoștințele necesare pentru a utiliza cele mai bune strategii de prompt engineering pentru necesități specifice.

Detaliul cel mai remarcabil este că ne aflăm în etapele pionieratului, când încă descoperim empiric cum să creăm promptul perfect.

În prezent, abilitatea de a stăpâni ingineria prompturilor reprezintă una dintre cele mai esențiale competențe necesare pentru a utiliza sau integra cu succes modelele lingvistice mari (LLM) în aplicații. Este important să subliniem că, pe măsură ce inteligența artificială devine tot mai avansată și sofisticată, procesul de inginerie a prompturilor va deveni, cel mai probabil, mai accesibil și intuitiv, deschizând astfel calea inovației și posibilităților remarcabile.

În calitate de persoană profund implicată în domeniul integrării modelelor lingvistice mari (LLM), am avut oportunitatea să constat personal influența semnificativă a prompturilor bine formulate asupra modelării comportamentului și capacităților inteligenței artificiale.

Aprofundarea acestor concepte vă va permite să ajustați prompturile în concordanță cu sarcina în lucru, garantând astfel obținerea rezultatelor dorite.

NUMĂRUL 149 - Development with AI

Sponsori

  • Accenture
  • BT Code Crafters
  • Accesa
  • Bosch
  • Betfair
  • MHP
  • BoatyardX
  • .msg systems
  • P3 group
  • Ing Hubs
  • Cognizant Softvision
  • Colors in projects