Agenți AI

Oamenii excelează în recunoașterea modelelor complexe, dar se bazează adesea pe instrumente precum Google sau calculatoare. Similar, modelele de AI generativă pot folosi instrumente pentru acces la informații în timp real sau pentru a executa acțiuni, precum generarea de recomandări personalizate sau efectuarea tranzacțiilor. Această combinație de raționament, logică și acces la resurse externe definește conceptul de „agent”, care extinde capacitățile unui model AI.

Dorinel Siteavu

1/10/202513 min citit

Ce este un agent?

Un agent de AI generativă este o aplicație concepută pentru a atinge un scop prin observarea lumii și utilizarea instrumentelor pe care le are la dispoziție. Agenții sunt autonomi, ceea ce înseamnă că pot acționa independent de intervenția umană, mai ales atunci când au obiective bine definite.

De asemenea, aceștia pot fi proactivi, luând decizii cu privire la următorii pași necesari pentru atingerea scopului final, chiar și în lipsa unor instrucțiuni explicite.

Deși conceptul de agenți în AI este general și puternic, acest blog se axează pe tipurile specifice de agenți pe care modelele de AI generativă le pot crea.

Pentru a înțelege mai bine modul în care funcționează un agent, este esențial să analizăm componentele de bază care îi ghidează comportamentul, acțiunile și luarea deciziilor – componente ce formează o „arhitectură cognitivă”, cu multiple variante posibile prin combinarea acestora.

Modelul

În contextul unui agent, modelul se referă la modelul de limbaj (LM) care acționează ca decident central în procesele agentului.

Acesta poate fi un singur model sau mai multe modele LM de diferite dimensiuni (mici sau mari), capabile să urmeze cadre logice și de raționament bazate pe instrucțiuni, cum ar fi ReAct, Chain-of-Thought sau Tree-of-Thoughts. Modelele pot fi generale, multimodale sau ajustate în funcție de nevoile arhitecturii specifice a agentului.

Pentru rezultate optime, este recomandat să utilizați un model potrivit aplicației finale dorite, ideal antrenat pe date relevante pentru instrumentele planificate în arhitectura cognitivă.

Deși modelul nu este, în mod obișnuit, antrenat pe setările specifice ale agentului (precum alegerea instrumentelor sau configurarea raționamentului), acesta poate fi perfecționat oferindu-i exemple care demonstrează capabilitățile agentului, inclusiv utilizarea instrumentelor sau pașii de raționament în diverse contexte.

Instrumente

Modelele fundamentale, deși impresionante în generarea de text și imagini, sunt limitate de incapacitatea lor de a interacționa cu lumea exterioară. Instrumentele elimină această barieră, permițând agenților să acceseze date și servicii externe, extinzându-le capacitățile dincolo de cele ale modelului de bază.

Acestea pot varia ca formă și complexitate, fiind adesea aliniate cu metode web API, precum GET, POST, PATCH și DELETE.

De exemplu, un instrument poate actualiza informații despre clienți într-o bază de date sau prelua date meteo pentru a influența o recomandare de călătorie.

Instrumentele permit agenților să proceseze informații din lumea reală, susținând sisteme specializate precum retrieval augmented generation (RAG), care extind semnificativ funcționalitățile unui agent. Pe scurt, instrumentele creează o punte între capacitățile interne ale agentului și lumea externă, deschizând un spectru mai larg de posibilități.

Stratul de orchestrare

Stratul de orchestrare reprezintă un proces ciclic care ghidează modul în care agentul preia informații, realizează raționamente interne și folosește aceste raționamente pentru a decide acțiunea următoare.

Acest ciclu continuă până când agentul își atinge scopul sau un punct de oprire.

Complexitatea stratului de orchestrare variază în funcție de agent și de sarcina sa. Unele cicluri pot include calcule simple bazate pe reguli de decizie, în timp ce altele pot implica logici înlănțuite, algoritmi de învățare automată sau tehnici de raționament probabilistic.

Agenții vs Modele

Pentru a înțelege mai clar diferența dintre agenți și modele, consultați următorul tabel:

Arhitecturile cognitive: Cum operează agenții

Imaginează-ți un bucătar într-o bucătărie aglomerată, având ca scop crearea unor feluri de mâncare delicioase pentru clienții restaurantului, urmând un ciclu de planificare, execuție și ajustare.

Procesul bucătarului:

  1. Adună informații: Preia comanda clientului și verifică ingredientele disponibile în cămară și frigider.

  2. Raționează intern: Se gândește la preparatele și combinațiile de arome pe care le poate crea în funcție de ingredientele disponibile.

  3. Acționează: Tăie legume, combină condimente și gătește preparatele.

În fiecare etapă, bucătarul ajustează planul pe măsură ce ingredientele se epuizează sau pe baza feedback-ului primit de la clienți. Acest ciclu de adunare a informațiilor, planificare, execuție și ajustare reflectă o arhitectură cognitivă unică utilizată pentru a-și atinge scopul.

La fel ca bucătarul, agenții folosesc arhitecturi cognitive pentru a-și atinge obiectivele, procesând informațiile iterativ, luând decizii informate și ajustând acțiunile viitoare pe baza rezultatelor anterioare.

Stratul central: Orchestrarea

La baza arhitecturii cognitive a unui agent se află stratul de orchestrare, responsabil de gestionarea memoriei, stării, raționamentului și planificării. Acesta folosește domeniul în continuă evoluție al prompt engineering-ului și al cadrelor asociate pentru a ghida procesul de raționament și planificare, permițând agentului să interacționeze mai eficient cu mediul său și să finalizeze sarcini.

Cadre populare și tehnici de raționament:

  1. ReAct (Reason + Act): O strategie de prompt engineering care ghidează modelele de limbaj să raționeze și să ia măsuri pe baza întrebărilor utilizatorilor. A demonstrat performanțe superioare și o interoperabilitate crescută cu utilizatorii.

  2. Chain-of-Thought (CoT): Permite raționamente intermediare prin pași intermediari. Include tehnici precum self-consistency și active-prompt, utile în funcție de aplicația specifică.

  3. Tree-of-Thoughts (ToT): Cadru potrivit pentru sarcini care implică explorare sau planificare strategică. Permite explorarea mai multor lanțuri de gândire pentru a rezolva probleme generale.

Exemplar: Cum funcționează un agent cu ReAct

  1. Utilizatorul trimite o interogare agentului.

  2. Agentul inițiază secvența ReAct.

  3. Agentul oferă un prompt modelului pentru a genera următorul pas din secvența ReAct:

    • Întrebare: Interogarea utilizatorului.

    • Gând: Ce ar trebui să facă modelul mai departe.

    • Acțiune: Decizia modelului cu privire la următoarea acțiune (de exemplu, alegerea unui instrument precum „Căutare” sau „Cod”).

    • Intrare acțiune: Decizia modelului privind datele de intrare pentru instrument (dacă este cazul).

    • Observație: Rezultatul acțiunii.

  4. Secvența ReAct continuă până când agentul oferă răspunsul final utilizatorului.

Această buclă permite agenților să ia decizii informate și să-și ajusteze acțiunile pentru a răspunde cerințelor utilizatorului.

Așa cum este ilustrat în Figura , modelul, instrumentele și configurația agentului lucrează împreună pentru a oferi un răspuns fundamentat și concis utilizatorului, pe baza interogării inițiale. În loc ca modelul să ghicească un răspuns (generând halucinații) bazat pe cunoștințele sale anterioare, acesta a utilizat un instrument (de exemplu, „Flights”) pentru a căuta informații externe în timp real. Aceste informații suplimentare au fost furnizate modelului, permițându-i să ia o decizie mai bine informată, bazată pe date reale și să rezume aceste informații pentru utilizator.

Extensii

Cel mai simplu mod de a înțelege extensiile este să le consideri ca pe o punte între o API și un agent, într-un mod standardizat. Acestea permit agenților să execute API-uri fără probleme, indiferent de implementarea lor de bază.

De exemplu, dacă ai creat un agent cu scopul de a ajuta utilizatorii să rezerve zboruri, știi că vrei să folosești API-ul Google Flights pentru a obține informații despre zboruri. Totuși, poate nu ești sigur cum să faci ca agentul tău să apeleze punctul final al acestei API. Extensiile rezolvă această problemă, oferind o modalitate standardizată de integrare între agent și API-uri.

O abordare ar fi implementarea unui cod personalizat care să preia interogarea utilizatorului, să extragă informațiile relevante, iar apoi să efectueze apelul API. De exemplu, într-un scenariu de rezervare a zborurilor, utilizatorul ar putea spune: „Vreau să rezerv un zbor de la Austin la Zurich.” În acest caz, codul personalizat ar trebui să identifice „Austin” și „Zurich” ca entități relevante înainte de a face apelul API.

Dar ce se întâmplă dacă utilizatorul spune: „Vreau să rezerv un zbor către Zurich” fără să menționeze orașul de plecare? Apelul API ar eșua din cauza lipsei datelor necesare, iar mai mult cod ar trebui implementat pentru a gestiona astfel de cazuri speciale. Această abordare nu este scalabilă și se poate defecta ușor în orice scenariu care nu este acoperit de codul personalizat implementat.

O abordare mai rezilientă ar fi utilizarea unei Extensii. Aceasta creează o punte între un agent și o API, având următoarele funcții principale:

  1. Învățarea agentului cum să folosească punctul final al API-ului, utilizând exemple.

  2. Învățarea agentului ce argumente sau parametri sunt necesari pentru a apela cu succes punctul final al API-ului.

Astfel, extensiile simplifică interacțiunea agentului cu API-urile și reduc semnificativ riscurile asociate cu cazurile complexe sau incomplete.

Extensii

Cel mai simplu mod de a înțelege extensiile este să le consideri ca pe o punte între o API și un agent, într-un mod standardizat. Acestea permit agenților să execute API-uri fără probleme, indiferent de implementarea lor de bază.

De exemplu, dacă ai creat un agent cu scopul de a ajuta utilizatorii să rezerve zboruri, știi că vrei să folosești API-ul Google Flights pentru a obține informații despre zboruri. Totuși, poate nu ești sigur cum să faci ca agentul tău să apeleze punctul final al acestei API. Extensiile rezolvă această problemă, oferind o modalitate standardizată de integrare între agent și API-uri.

O abordare ar fi implementarea unui cod personalizat care să preia interogarea utilizatorului, să extragă informațiile relevante, iar apoi să efectueze apelul API. De exemplu, într-un scenariu de rezervare a zborurilor, utilizatorul ar putea spune: „Vreau să rezerv un zbor de la Austin la Zurich.” În acest caz, codul personalizat ar trebui să identifice „Austin” și „Zurich” ca entități relevante înainte de a face apelul API.

Dar ce se întâmplă dacă utilizatorul spune: „Vreau să rezerv un zbor către Zurich” fără să menționeze orașul de plecare? Apelul API ar eșua din cauza lipsei datelor necesare, iar mai mult cod ar trebui implementat pentru a gestiona astfel de cazuri speciale. Această abordare nu este scalabilă și se poate defecta ușor în orice scenariu care nu este acoperit de codul personalizat implementat.

O abordare mai rezilientă ar fi utilizarea unei Extensii. Aceasta creează o punte între un agent și o API, având următoarele funcții principale:

  1. Învățarea agentului cum să folosească punctul final al API-ului, utilizând exemple.

  2. Învățarea agentului ce argumente sau parametri sunt necesari pentru a apela cu succes punctul final al API-ului.

Astfel, extensiile simplifică interacțiunea agentului cu API-urile și reduc semnificativ riscurile asociate cu cazurile complexe sau incomplete.

Funcțiile

În domeniul ingineriei software, funcțiile sunt module independente de cod care îndeplinesc o sarcină specifică și pot fi reutilizate după nevoie. Un dezvoltator software, atunci când scrie un program, creează adesea mai multe funcții pentru diverse sarcini, definind și logica pentru când să apeleze function_a versus function_b, împreună cu intrările și ieșirile așteptate.

În lumea agenților, funcțiile funcționează într-un mod similar, însă dezvoltatorul software este înlocuit cu un model. Modelul poate utiliza un set de funcții cunoscute, decide când să folosească o anumită funcție și ce argumente sunt necesare, pe baza specificațiilor acesteia.

Funcțiile diferă de extensii în următoarele moduri:

  1. Modelul generează o funcție și argumentele acesteia, dar nu face un apel API în timp real.

  2. Funcțiile sunt executate pe partea clientului, în timp ce extensiile sunt executate pe partea agentului.

Aceasta separare asigură o implementare clară și flexibilă pentru sarcini diferite.

Funcțiile și diferențele față de Extensii

Principala diferență este că nici Funcțiile, nici agentul nu interacționează direct cu API-ul Google Flights. Deci, cum se face de fapt apelul API?
Cu funcțiile, logica și execuția apelului la punctul final al API-ului sunt transferate de la agent la aplicația de pe partea clientului, așa cum se vede în Figura 8 și Figura 9.

Această abordare oferă dezvoltatorilor mai mult control granular asupra fluxului de date în aplicație. Există mai multe motive pentru care un dezvoltator ar putea alege funcțiile în locul extensiilor, printre care:

  • Apelurile API sunt realizate într-un alt nivel al stivei aplicației, în afara fluxului direct al arhitecturii agentului (de exemplu, un sistem middleware sau un framework front-end).

  • Restricții de securitate sau autentificare care împiedică agentul să apeleze direct API-ul (de exemplu, API-ul nu este expus internetului sau nu este accesibil din infrastructura agentului).

  • Constrângeri de sincronizare sau ordine de operații care împiedică apelurile API în timp real (de exemplu, operațiuni în loturi, verificare cu implicarea unui om).

  • Necesitatea transformării suplimentare a datelor în răspunsul API, pe care agentul nu o poate realiza (de exemplu, un API care nu are un mecanism de filtrare pentru a limita numărul de rezultate).

  • Iterație rapidă a dezvoltării agentului fără a implementa infrastructură suplimentară pentru punctele finale ale API-urilor (funcțiile pot acționa ca un „stubbing” al API-urilor).

De ce să folosești Funcții?

Deși diferența dintre arhitecturile interne ale celor două abordări este subtilă, utilizarea Funcțiilor oferă:

  1. Control suplimentar asupra datelor și fluxului de lucru.

  2. Decuplarea dependenței de infrastructura externă.

Aceste beneficii fac ca utilizarea Funcțiilor să fie o opțiune atractivă pentru dezvoltatori în anumite scenarii

Data Store

Imaginează-ți un model de limbaj ca pe o vastă bibliotecă plină de cărți, care reprezintă datele sale de antrenament. Spre deosebire de o bibliotecă reală care își actualizează constant colecția, această bibliotecă rămâne statică, conținând doar cunoștințele inițiale cu care a fost antrenată. Acest lucru reprezintă o provocare, deoarece cunoștințele din lumea reală evoluează continuu.

Depozitele de date (Data Stores) rezolvă această limitare prin:

  • Oferirea accesului la informații mai dinamice și actualizate.

  • Asigurarea că răspunsurile modelului sunt bazate pe fapte și relevante.

Exemplu:

Un scenariu obișnuit ar fi cel în care un dezvoltator trebuie să furnizeze modelului o cantitate mică de date suplimentare, cum ar fi un fișier Excel sau un PDF. Depozitele de date permit modelului să acceseze aceste informații pentru a răspunde în mod mai precis și fundamentat la interogările utilizatorului.

Acest sistem extinde semnificativ capacitățile modelului, menținându-l relevant într-o lume în continuă schimbare.

Depozite de date: Simplificarea accesului la informații

Depozitele de date (Data Stores) le permit dezvoltatorilor să furnizeze agenților date suplimentare în formatul original, eliminând necesitatea de:

  • Transformări complexe de date,

  • Reantrenare a modelului,

  • Finisare (fine-tuning) consumatoare de timp.

Aceste depozite transformă documentele primite într-un set de vectori în baza de date (vector embeddings). Agentul poate utiliza acești vectori pentru a extrage informațiile necesare și pentru a-și completa acțiunea sau răspunsul către utilizator.

Această abordare sporește eficiența și flexibilitatea agenților, menținând în același timp relevanța informațiilor fără intervenții complexe.

Pe scurt, extensiile, funcțiile și depozitele de date reprezintă diferite tipuri de instrumente disponibile pentru agenți în timpul execuției. Fiecare are un scop specific și pot fi utilizate împreună sau independent, în funcție de decizia dezvoltatorului agentului.

Exemple de utilizare a agenților AI

genții AI au potențialul de a revoluționa numeroase domenii, inclusiv:

  • Asistență virtuală: Agenții AI pot acționa ca asistenți personali inteligenți, gestionând programări, rezervând bilete, răspunzând la emailuri și oferind recomandări personalizate.

  • Servicii clienți: Agenții AI pot oferi suport tehnic, răspunde la întrebări frecvente și rezolva probleme rapide și eficient.

  • E-commerce: Agenții AI pot personaliza experiența de cumpărare, oferi recomandări de produse și automatiza procesul de comandă.

  • Sănătate: Agenții AI pot monitoriza pacienții, oferi consultanță medicală și asista medicii în diagnosticare și tratament.

Rezumat final

Acest Blog a prezentat componentele fundamentale ale agenților AI generativi, structura lor și modalitățile eficiente de implementare sub forma arhitecturilor cognitive. Iată principalele concluzii:

  1. Agenții extind capacitățile modelelor de limbaj folosind instrumente pentru a accesa informații în timp real, a sugera acțiuni reale și a planifica și executa sarcini complexe în mod autonom. Agenții pot utiliza unul sau mai multe modele de limbaj pentru a decide când și cum să tranziteze prin stări și să folosească instrumente externe pentru a finaliza sarcini complexe, imposibil de realizat doar de model.

  2. Stratul de orchestrare este esențial în funcționarea unui agent, fiind o arhitectură cognitivă care structurează raționamentul, planificarea, luarea deciziilor și acțiunile agentului. Tehnici de raționament precum ReAct, Chain-of-Thought și Tree-of-Thoughts oferă un cadru pentru ca stratul de orchestrare să proceseze informațiile, să efectueze raționamente interne și să genereze decizii sau răspunsuri informate.

  3. Instrumentele, cum ar fi Extensiile, Funcțiile și Depozitele de date, sunt cheia către lumea exterioară pentru agenți:

    • Extensiile creează o punte între agenți și API-urile externe, permițând apeluri și obținerea de informații în timp real.

    • Funcțiile oferă un control mai detaliat pentru dezvoltator, permițând execuția pe partea clientului.

    • Depozitele de date oferă acces la date structurate sau nestructurate, sprijinind aplicațiile bazate pe date.

Viitorul agenților

Viitorul agenților AI promite progrese spectaculoase, pe măsură ce instrumentele devin mai sofisticate, iar capacitățile de raționament sunt îmbunătățite. Strategia „agent chaining” (conectarea mai multor agenți specializați într-un lanț) va deveni tot mai populară, permițând crearea unei rețele de experți agenți care pot oferi rezultate excepționale în diverse domenii și industrii.

Construcția agenților complexi

Crearea arhitecturilor complexe pentru agenți necesită o abordare iterativă. Experimentarea și rafinarea sunt esențiale pentru a găsi soluții adaptate nevoilor de afaceri și organizaționale specifice. Fiecare agent este unic, datorită naturii generative a modelelor fundamentale care stau la baza arhitecturii lor. Totuși, folosind punctele forte ale fiecărei componente, putem construi aplicații impactante care extind capabilitățile modelelor de limbaj și generează valoare reală.