ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
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 142
Abonament PDF

Îmbunătățirea performanței interne prin utilizarea inteligenței artificiale: experiența unui hackathon de 24 de ore

Cristian Chiriac
Frontend Software Engineer @ Accesa



Philipp Farnschlader
AI Engineer @ Accesa



PROGRAMARE

Într-o lume a schimbării și inovației constante, participarea la hackathoane reprezintă o oportunitate extraordinară de a-ți testa abilitățile, de a colabora cu colegii și de a construi ceva inovator. Recent, am avut ocazia de a participa la ShipIt, un hackathon de 24 de ore organizat de Accesa, ediția de anul acesta fiind axată pe implementarea diferitelor soluții interne bazate pe posibilitățile pe care le aduce inteligența artificială. Mai exact, echipa noastră a avut ca scop dezvoltarea unui chat-bot care centralizează cunoștințele din întreaga companie și recuperează informații relevante pentru toate întrebările interne, folosind o tehnică numită retrieval augmented generation (RAG) și API-ul OpenAI.

Dar să vedem cum am început. Din munca noastră zilnică și din discuțiile cu colegii, știm că găsirea documentelor și a informațiilor relevante în cadrul companiei necesită adesea un efort semnificativ. Pentru a rezolva problema aceasta, ne-am imaginat o soluție în care colegii noștri pot cere ușor informații relevante care sunt stocate de către companie. Să spunem, de exemplu, că dorim să știm dacă avem voie să aducem câinele la serviciu. Cu siguranță, această informație există undeva, doar că găsirea ei sau a unei persoane care ne-ar putea ajuta necesită mult timp.

Același lucru se aplică și dacă ne gândim la întrebări referitoare la procese specifice sau la orice informație îngropată adânc în politicile interne ale companiei. Aceste informații sunt, însă trebuie să știm unde să le căutăm. Cu un chat-bot la îndemână, recuperarea informațiilor relevante devine mult mai rapidă, mai ales când este capabil să facă referire la documentele din care își ia conținutul.

În continuare, vă vom oferi o scurtă prezentare a arhitecturii soluției, urmată de o analiză mai detaliată a tehnologiilor front-end și back-end, utilizate în proiectul nostru și de modul în care acestea au contribuit la crearea unei soluții eficiente și prietenoase cu utilizatorul. În cele din urmă, încheiem cu o scurtă sinteză despre experiența echipei noastre în hackathon și succesul soluției noastre.

Prezentare arhitecturală

Pentru a ne atinge obiectivele, am decis să utilizăm o tehnică de inteligență artificială numită retrieval augmented generation (RAG). În esență, sistemele RAG capabile să ofere noi cunoștințe unui model lingvistic mare (LLM) fără a fi nevoie să-l reantrenăm sau să-l ajustăm. Ideea este să oferim context relevant LLM-ului care conține cunoștințele de care are nevoie pentru a formula un răspuns corespunzător.

Diagrama de mai jos arată arhitectura aplicației. Fluxul utilizatorului începe la nivelul front-end-ului, care este o interfață simplă de chat cu un design dinamic. Atunci când un utilizator pune o întrebare în front-end, aceasta va fi transmisă la un backend Python. Backend-ul verifică mai întâi dacă aceasta este o primă interogare sau dacă a existat vreo altă interacțiune anterior, astfel încât să poată reține istoricul conversației. În continuare, interogarea utilizatorului este folosită pentru a verifica cunoștințele existente într-o bază de date vectorială bazată pe similitudine. Dacă se găsesc cunoștințe relevante, interogarea utilizatorului este transmisă la LLM (GPT-4) împreună cu istoricul anterior al chatului și cunoștințele relevante. Răspunsul LLM-ului este apoi trimis înapoi la frontend, care îl afișează într-o manieră asemănătoare unui chat. În continuare, vom aborda mai în detaliu ceea ce se întâmplă exact din punct de vedere tehnologic, argumentând de ce am ales aceste tehnologii.

Interfața chat-botului

În încercarea noastră de a dezvolta o aplicație eficientă pentru a satisface nevoile utilizatorilor, am ales să folosim următoarele tehnologii de UI care promit o experiență plăcută pentru utilizator.

Fig.1 Arhitectura aplicației AI Chatbot

Am început cu Next.js, renumit pentru capabilitatea sa de a randa componente pe server și de a genera site-uri statice. Cu capacitățile sale robuste, Next.js poate pune bazele unei aplicații web rapide și eficiente. Împreună cu React, unul dintre cele mai utilizate framework-uri din industrie, am reușit să creăm componente reutilizabile, ce ne-au ajutat sa fim productivi într-un timp foarte scurt. Pentru a alinia designul chat-botului nostru cu toolul nostru de comunicare internă, am ales Material-UI, folosindu-ne de colecția sa bogată de componente integrate și ușor adaptabile. Și, totuși, ca să adăugăm puțină personalitate aplicației noastre, am folosit Tailwind CSS. Acesta ne-a permis să creăm o aparență vizuală atractivă și personală, folosind clase predefinite pentru o stilizare rapidă.

Ca să adăugăm o interacțiune suplimentară la experiența utilizatorului, am încorporat Typed.js în setul nostru de instrumente. Această bibliotecă dinamică JavaScript injectează animații de text în timp real. Scopul a fost de a oferi utilizatorilor o experiență extrem de plăcută în comunicarea cu chatbot-ul nostru și de a face această interacțiune cât mai realistă posibil, simulând prezența unei persoane reale care vrea să ofere suport.

Backendul chat-botului

Selectarea limbajului Python ca limbaj de bază pentru backend a fost motivată de ușurința de învățare și de suportul solid pentru dezvoltarea AI, în special prin intermediul bibliotecilor precum LangChain, care simplifică integrarea cu modelele lingvistice mari (LLM) ale OpenAI.

Pentru ca informațiile AI să se bazeze pe faptele și datele inerente Accesa, primul pas a fost proiectarea unui canal care să preia documente reale și să le transforme într-un format utilizabil. Am început cu documente reale din SharePoint, pe care le-am stocat în backendul nostru pentru a demonstra conceptul. Următorul pas ar fi să integrăm direct SharePoint pentru a avea acces la toate tipurile de date. Aceste documente au fost analizate și împărțite în bucăți de lungime fixă, cu unele suprapuneri pentru a menține continuitatea semantică. Fiecare bucată a fost adnotată cu numele documentului și cu URL-ul locației de stocare originale, ceea ce ajută ulterior la urmărirea sursei informațiilor utilizate de LLM.

Bucățile sunt apoi convertite în vectori prin apelarea API-ului de încorporare al OpenAI, care ia orice șir de cuvinte - adică o bucată - și îi încorporează semnificația într-un vector numeric. Vectorul este apoi stocat într-o bază de date de vectori, pentru care am folosit FAISS (Facebook AI Similarity Search) de la Meta. Această bază de date de vectori conține acum toți vectorii corespunzători tuturor fragmentelor și poate fi interogată în termeni de similaritate.

Când o întrebare a unui utilizator intră prin intermediul frontendului, întrebarea este primită în backend și transformată într-o reprezentare vectorială, folosind din nou API-ul de încorporare OpenAI. Această reprezentare vectorială este apoi comparată cu toți vectorii din baza de date vectorială, utilizând similitudinea cosinusului încorporată în FAISS. Ideea din spatele acestui lucru este că dorim să recuperăm exact acele documente care se aseamănă cel mai mult cu întrebarea de intrare. În cazul în care vectorii sunt suficient de asemănători cu interogarea utilizatorului, bucățile corespunzătoare ar trebui să fie transmise către LLM ca și context.

Pe lângă context și interogarea de intrare, solicitarea conține și un mesaj de sistem, care joacă un rol esențial în modelarea răspunsului LLM, ghidându-l în ceea ce privește modul de răspuns, formatul rezultatului și instruindu-l în mod explicit să își bazeze răspunsurile pe contextul furnizat. Elaborarea acestui mesaj - sau "prompt engineering" - a apărut ca un aspect crucial, echipa descoperind că instrucțiunile prea restrictive ar putea împiedica capacitatea LLM de a oferi răspunsuri. Mesajul de sistem include, de asemenea, directive pentru LLM de a cita sursele pe care le-a obținut din context într-un format JSON specific, astfel încât răspunsul LLM să poată fi trimis direct la frontend, care se ocupă de analiza JSON și afișează PDF-urile la care face referire în mod corespunzător. Pentru a realiza acest lucru, am folosit o tehnică numită one-shot prompting, astfel încât LLM să înțeleagă formatul pe care dorim să-l obținem. Această metodă a arătat că, deși LLM poate construi în mod adecvat JSON și poate face referințe exacte la sursele pe care le utilizează, a existat un compromis în ceea ce privește eficiența utilizării tokenurilor. Cu toate acestea, această abordare a fost preferată pentru simplitatea și eficiența implementării sale.

În cele din urmă, integrarea LangChain a permis asamblarea fără probleme a interogării utilizatorului, a contextului relevant și a mesajului sistemului într-un singur mesaj. Răspunsul LLM, bazat pe această solicitare a fost apoi transmis către frontend. Pentru a sprijini conversația continuă, fiecare interacțiune - care cuprinde interogarea utilizatorului, solicitarea și răspunsul LLM - este, de asemenea, salvată în backend. Acest istoric al conversației a asigurat păstrarea contextului interacțiunilor anterioare, îmbunătățind experiența utilizatorului cu răspunsuri ulterioare relevante și coerente.

Succesul unei viziuni comune

După aproape 24 de ore de colaborare intensă, am reușit să facem o demonstrație live a chat-botului nostru în fața juriului, arătând funcțiile soluției noastre pe baza mai multor exemple de interogări. Sistemul nostru a răspuns corect la întrebări, făcând în același timp referințe exacte la PDF-urile pe care le-a folosit pentru a genera răspunsurile. Am verificat, de asemenea, dacă chat-botul va răspunde la orice intrare care nu se bazează în mod specific pe contextul furnizat, lucru pe care l-a reușit. Dacă ar exista un aspect care trebuie îmbunătățit, acesta ar fi latența - ideal, o soluție productivă ar trebui să analizeze găzduirea unor LLM-uri mai rapide la nivel local, deoarece noi am folosit API-ul GPT-4 relativ lent.

În general, experiența hackathonului a fost intensă, iar implicarea activă a întregii echipe a făcut-o memorabilă, aspect datorat nu în ultimul rând organizării bune a evenimentului în sine, cu obiective, direcții, termene și așteptări clar comunicate. Per total, în cadrul echipei și, din câte am aflat, în toate celelalte opt echipe, atmosfera a fost productivă, entuziastă și, cel mai important, foarte distractivă. Demonstrația tuturor soluțiilor dezvoltate a fost, probabil, cea mai interesantă parte: să vedem ce au construit colegii noștri în această perioadă scurtă de timp și cum au folosit inteligența artificială generativă pentru diferite soluții a fost pur și simplu remarcabil.

LANSAREA NUMĂRULUI 150

Noile tehnologii SAP ABAP

Marți, 10 Decembrie, ora 18:00

sediul MHP - A Porsche Company

Facebook Meetup StreamEvent YouTube

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