Totul începe cu un prompt slab, un punct de plecare modest. Imaginați-vă un model lingvistic mic, care se luptă să rezolve probleme de genul „Maria are 5 mere, îi dă lui Ion 2, apoi cumpără încă 3. Câte mere are acum?”. Fără un ghidaj adecvat, modelul poate greși pașii sau poate ignora contextul. Aici intervine GEPA, un cadru care evoluează prompturile prin reflecție și feedback structurat.
Primul pas este construirea unui benchmark determinist. Acesta este un set de probleme aritmetice, fiecare cu o soluție clară și unică. De exemplu, o problemă tipică ar putea fi: „Un tren pleacă din București la ora 8:00 cu 120 de pasageri. La prima stație, coboară 30 și urcă 45. La a doua stație, coboară 20 și urcă 15. Câți pasageri sunt acum în tren?”. Răspunsul corect este 130. Acest benchmark servește drept teren de testare pentru prompturile noastre.
Apoi, definim un evaluator structurat. Acesta nu se limitează la a spune „corect” sau „greșit”. În schimb, oferă feedback acționabil. De exemplu, dacă modelul greșește, evaluatorul poate spune: „Ai omis un pas: după ce ai scăzut 30, trebuia să aduni 45, nu să scazi din nou”. Sau: „Ai interpretat greșit ordinea operațiilor: întâi scăderea, apoi adunarea”. Acest feedback este esențial pentru evoluția promptului.
Partea inovatoare este configurarea multi-componentă. În loc să optimizăm un singur câmp de instrucțiuni, GEPA evoluează simultan atât instrucțiunile principale, cât și regulile de formatare a ieșirii. De exemplu, instrucțiunile ar putea fi: „Rezolvă problema pas cu pas, scriind fiecare operație”. Iar regulile de formatare: „Scrie răspunsul final pe o linie separată, precedat de cuvântul Răspuns:”. Această abordare duală permite o sinergie între conținut și prezentare.
Procesul de evoluție funcționează astfel: pornim de la un prompt inițial, îl testăm pe benchmark, colectăm feedback, apoi generăm variante prin mutații și încrucișări. De exemplu, o mutație ar putea schimba „pas cu pas” în „etapă cu etapă”, iar o încrucișare ar putea combina instrucțiunile unui prompt cu regulile de formatare ale altuia. Fiecare variantă este evaluată, iar cele mai bune sunt selectate pentru următoarea generație.
După mai multe iterații, obținem un prompt optimizat. Să comparăm promptul de bază cu cel optimizat. Promptul de bază: „Rezolvă problema”. Promptul optimizat: „Rezolvă problema aritmetică pas cu pas. Pentru fiecare pas, scrie operația și rezultatul. La final, scrie răspunsul pe o linie nouă, precedat de 'Răspuns:'. Asigură-te că respecți ordinea operațiilor.” Diferența este clară: promptul optimizat oferă structură și claritate.
Testăm ambele prompturi pe un set de validare separat, care conține probleme similare, dar nu identice cu cele din benchmark. Rezultatele sunt convingătoare: promptul de bază obține o acuratețe de 45%, în timp ce promptul optimizat atinge 78%. Aceasta demonstrează că îmbunătățirile nu sunt doar întâmplătoare, ci se generalizează la probleme noi.
Un exemplu concret: problema „Un magazin are 200 de cărți. Vinde 35 luni, 42 marți și 28 miercuri. Câte cărți au rămas?” Cu promptul de bază, modelul ar putea răspunde „95” (scăzând doar 35+42+28=105, 200-105=95). Cu promptul optimizat, modelul scrie: „Pas 1: 200 - 35 = 165. Pas 2: 165 - 42 = 123. Pas 3: 123 - 28 = 95. Răspuns: 95”. Deși răspunsul este același, procesul este transparent și verificabil.
Dar ce se întâmplă când modelul greșește? Să presupunem că problema este: „O fermă are 150 de oi. Vinde 40, apoi cumpără 25, apoi vinde încă 30. Câte oi sunt?” Răspunsul corect este 105. Cu promptul de bază, modelul ar putea răspunde „105” din greșeală, dar fără să arate pașii. Cu promptul optimizat, modelul scrie: „Pas 1: 150 - 40 = 110. Pas 2: 110 + 25 = 135. Pas 3: 135 - 30 = 105. Răspuns: 105”. Acum putem verifica fiecare pas.
GEPA nu se oprește aici. Putem extinde abordarea la probleme mai complexe, cum ar fi cele cu procente sau fracții. De exemplu: „Un produs costă 200 lei. Se aplică o reducere de 15%, apoi o taxă de 10%. Care este prețul final?” Promptul optimizat ar putea include instrucțiuni specifice pentru procente: „Calculează reducerea ca procent din prețul inițial, apoi adaugă taxa ca procent din prețul redus.”
Un alt aspect important este gestionarea erorilor. Dacă modelul face o greșeală, feedback-ul structurat îl corectează. De exemplu, dacă modelul calculează 15% din 200 ca 30, dar apoi scade 30 din 200 și obține 170, apoi adaugă 10% din 170 (17) și obține 187, în loc de 187 (corect este 187, dar să verificăm: 200 - 30 = 170, 170 + 17 = 187, corect). Dacă modelul ar fi greșit, feedback-ul ar spune: „Ai calculat greșit taxa: taxa se aplică după reducere, dar ai adăugat 10% din prețul inițial.”
În concluzie, GEPA oferă o metodă robustă de optimizare a prompturilor pentru modele lingvistice mici. Prin combinarea unui benchmark determinist, a unui evaluator structurat și a unei evoluții multi-componente, putem transforma prompturi slabe în instrumente puternice. Rezultatele pe seturi de validare separate confirmă că îmbunătățirile sunt generalizabile, deschizând calea pentru aplicații practice în educație, asistență virtuală și nu numai.
De ce este important:
Această abordare este crucială deoarece demonstrează că modelele lingvistice mici, adesea considerate limitate, pot fi semnificativ îmbunătățite prin optimizarea prompturilor. În loc să investim în modele mari și costisitoare, putem rafina interacțiunea cu modelele existente, făcându-le mai accesibile și mai eficiente. În plus, metoda GEPA este transparentă și reproductibilă, permițând cercetătorilor și dezvoltatorilor să aplice aceleași principii în diverse domenii, de la rezolvarea problemelor matematice până la generarea de text complex. Aceasta reprezintă un pas important spre democratizarea inteligenței artificiale.