Arhitectura proiectului, pe care o vom prezenta mai jos, s-a născut dintr-o inițiativă de cercetare a unui jucător important din sectorul de externalizare a proceselor de business (BPO). Serviciile BPO includ: consultanță, asistență comercială, servicii juridice, vânzări și suport tehnic.
În cadrul acestor servicii, suportul tehnic se diferențiază prin complexitate, care derivă din obiectivele serviciului, diversitatea canalelor de comunicare folosite și din volumul mare de muncă manuală necesară.
Soluția existentă urmărește să respecte mai multe angajamente cheie precum: îmbunătățirea experienței clienților și a utilizatorilor prin rezolvarea rapidă a problemelor tehnice, implementarea unor procese personalizate de gestionare a tichetelor, asigurarea monitorizării non-stop și a unui răspuns prompt la incidente.
Totuși, în acest cadru, fiecare echipă de suport trebuie să parcurgă un training pe baza cunoștințelor și proceselor specifice clientului. Această etapă de formare necesită mult timp și este costisitoare. În plus, vine cu provocări semnificative atunci când vorbim de extinderea echipelor și devine, în cele din urmă, un obstacol redutabil.
Pentru a simplifica și optimiza acest proces, o abordare este integrarea unui chatbot pentru automatizarea conversațiilor scrise între utilizatori și echipele de suport tehnic.
Chatboturile se dovedesc deosebit de valoroase atunci când intenția utilizatorului este clară, iar informațiile necesare pot fi furnizate prin intermediul unor reguli și condiții predefinite.
Cu toate acestea, în ciuda așteptărilor inițiale de îmbunătățire semnificativă a eficienței conversației, implementarea în lumea reală a dezvăluit câteva limitări notabile:
Un dezavantaj major este necesitatea de a configura un "customer journey" separat pentru fiecare caz în parte - acest lucru aduce cu sine o presiune semnificativă pe mentenanță, în special pentru clienții cu operațiuni complexe.
Pentru a răspunde acestor provocări, am explorat o alternativă promițătoare: modelele GPT ale OpenAI. Documentele care descriu aceste modele evidențiază abilitatea lor de a obține o înțelegere robustă a limbajului natural prin pre-antrenament generativ și ajustare fină, valorificând un corpus vast de text.
Cu entuziasm, în martie 2023, OpenAI a lansat API-ul ChatGPT, care permite utilizarea practică a acestor modele prin intermediul interfețelor de programare.
Deși inițial modelele ChatGPT pot părea o soluție "plug-and-play" convenabilă pentru a îmbunătăți chatbotul, am întâlnit trei limitări semnificative care împiedică aplicarea lor directă în cazul nostru specific:
Cunoștințe: Datele de antrenament folosite pentru aceste modele constau, în principal, în informații publice. Cu toate acestea, pentru clienții care au echipe de suport, majoritatea informațiilor esențiale, cum ar fi manualele și procedurile, se află în baze de date private, inaccesibile modelului. Utilizarea exclusivă a datelor publice reprezintă doar vârful icebergului și nu îndeplinește în totalitate cerințele clienților.
Restricție de subiecte: Modelele ChatGPT sunt concepute ca modele lingvistice generice și pot răspunde la întrebări legate de o gamă largă de subiecte considerate sigure de către echipa OpenAI. Însă acest lucru reprezintă o provocare, deoarece ne dorim un chatbot adaptat în mod specific unui anumit brand sau unei anumite aplicații, de exemplu de e-commerce. Este esențial ca chatbotul să răspundă doar la întrebări legate de brandul respectiv și să evite subiecte fără legătură, cum ar fi concurența sau subiecte sensibile, precum politică sau război.
Pe baza cercetării noastre, am stabilit că modelele GPT explorate au un potențial promițător pentru a fi utilizate, dar vor avea nevoie de personalizare. Pentru a utiliza în mod eficient LLM-urile, avem în vedere dezvoltarea arhitecturii unei aplicații "middleware" care poate gestiona procesarea intrărilor și ieșirilor. Scopul său principal va fi să personalizeze atât intrarea, cât și ieșirea răspunsurilor pe care le primesc utilizatorii, pentru a asigura exactitatea factuală întemeiată pe baza noastră de cunoștințe proprietare.
Ingineria prompturilor (Prompt engineering) este un proces crucial care implică crearea și ajustarea precisă a prompturilor (mesajul de intrare trimis către LLM) pentru a îmbunătăți performanța modelelor de învățare automată, asigurând răspunsuri mai precise și mai relevante din punct de vedere contextual. În special în cazul modelelor de limbaj de mari dimensiuni precum ChatGPT, prompturile de intrare joacă un rol vital nu numai în specificarea rezultatului dorit, ci și în furnizarea unui context esențial pentru întrebările noastre.
Pentru cazul nostru specific, acesta este un avantaj semnificativ: înseamnă că avem posibilitatea de a proiecta prompturi care includ informațiile necesare pentru ca modelul să răspundă cu precizie întrebărilor noastre. Prin elaborarea atentă a prompturilor, putem ghida înțelegerea modelului, putem îmbunătăți relevanța și acuratețea răspunsurilor sale.
Ingineria promptului ne permite să valorificăm eficient capacitățile modelului, aliniindu-l mai îndeaproape cu nevoile și cerințele specifice soluției noastre de chatbot.
Arhitectura LLM Chatbot
Să ne imaginăm că dezvoltăm un chatbot special conceput pentru a oferi informații despre utilizarea diferitelor funcționalități ale Dacia Duster. Să luăm în considerare un scenariu în care un utilizator întreabă: "Cum pot dezactiva controlul tracțiunii pe Dacia Duster Adventure?" Pentru a ne asigura că chatbotul furnizează un răspuns precis, putem proiecta strategic prompt-ul astfel: "
----
Given the following context, answer my question:
// pasting entire user manual
Question: How can I deactivate Traction control on my Dacia Duster Adventure?
----
Aceasta, totuși, nu ar fi o soluție practică, deoarece mesajele au limită de dimensiune. Limitele sunt exprimate în număr de tokeni, unde un token reprezintă aproximativ 0,75 cuvinte. Cel mai performant model GPT disponibil în prezent (iunie 2023) are o limită maximă de 8192 de tokeni pe suma întrebare + răspuns. De asemenea, ar fi nepractic să includem întregul manual de utilizare în prompt, deoarece modelul are nevoie doar de secțiunile referitoare la controlul tracțiunii pentru a citi și extrage ceea ce se dorește a fi obținut.
Prin urmare, o abordare mai practică ar fi aceea de a construi promptul astfel:
-----
*Given the following context, answer my question:*
```// pasting relevant section
// pasting relevant section```
…
Question: How can I deactivate Traction control on my Dacia Duster Adventure?
-----
Provocarea actuală constă în identificarea secțiunilor relevante din baza noastră de date. Pentru a o rezolva, ne vom folosi de conceptul de "embeddings", care este practic reprezentarea matematică a unor concepte textuale. Distanța dintre doi vectori ndică relația dintre ei, distanțele mai mici sugerând o relație mai mare, iar distanțele mai mari sugerând o relație mai mică.
Acest lucru ne permite să determinăm matematic ce secțiuni din baza de cunoștințe sunt similare din punct de vedere semantic cu întrebarea utilizatorului.
Pentru a pregăti datele, am împărțit baza de cunoștințe în fragmente de text care conțin fiecare aproximativ 200-500 de cuvinte . Apoi, utilizând un alt model din familia GPT3, Ada 002, așa cum a fost sugerat de OpenAI, am generat "embeddings" pentru fiecare fragment de text. Un "embedding" așadar este un vector cu dimensiunea de 1536 numere reale care servesc drept bază pentru găsirea de conținut similar.
Prin combinarea tuturor acestor componente, am conceput o arhitectură care acționează ca un intermediar între utilizatorul final și modelele de ultimă generație. Arhitectura ilustrată în diagrama următoare cuprinde două faze independente.
Această etapă se realizează o singură dată pentru fiecare bază de cunoștințe sau ori de câte ori o anumită parte se modifică. Secvența de evenimente este următoarea:
Datele din baza de cunoștințe a clientului sunt citite. Acestea pot fi structurate sau nu și pot fi localizate oriunde ne putem conecta la ele.
După ce datele sunt citite, acestea sunt împărțite în bucăți de text între 200 și 500 de cuvinte.
Pentru fiecare fragment de text se apelează interfața de programare de "embedding" pentru a genera vectorul corespunzător.
După finalizarea acestui proces, sistemul este pregătit să folosească aceste date și să le ofere drept context atunci când utilizatorul adresează o întrebare.
Această fază va avea loc numai după finalizarea părții de training. Secvența următoare va fi executată pentru fiecare întrebare a utilizatorului:
Utilizatorul adresează o întrebare.
Sistemul preia întrebarea în forma sa originală și obține "embedding" vectorul folosind aceeași interfață ca în faza de pregătire.
Apoi compară "embedding"-ul întrebării cu "embedding"-urile din toate datele și calculează similitudinea cosinusului pentru a determina ce fragmente de text din baza de date sunt cele mai asemănătoare cu întrebarea.
După determinarea fragmentelor relevante de text pe baza distanței dintre "embedding" vectori, primele X potriviri (configurabil) sunt preluate și sortate în funcție de similaritate.
Pentru fiecare fragment, calculăm numărul de tokeni și continuăm să-i adăugăm până când ajungem la limita de 4096 de tokeni.
Prin această abordare, împiedicăm și răspunderea la întrebări în afara domeniului nostru, adăugând restricții clare ca parte a promptului.
Integrarea modelelor GPT ale OpenAI în procesul de suport tehnic prin intermediul unui chatbot este promițătoare, dar are anumite limitări. Printre acestea amintim: accesul restricționat la bazele de cunoștințe proprietare, necesitatea de a se concentra pe subiecte specifice și posibilitatea de a furniza informații inexacte. Pentru a aborda aceste provocări, a fost dezvoltată o aplicație "middleware" pentru a personaliza răspunsurile chatbotului, folosind baza noastră de cunoștințe.
Ingineria promptului a avut un rol esențial în ghidarea înțelegerii modelului și îmbunătățirea relevanței și acurateței răspunsurilor sale. "Embedding"-urile au fost utilizate pentru a determina similaritatea semantică între întrebările utilizatorului și conținutul din baza de cunoștințe, permițând identificarea informațiilor relevante.
Arhitectura Chatbotului LLM descrisă, care constă într-o fază de pregătire și o fază de utilizare, îmbunătățește eficiența suportului tehnic prin furnizarea de răspunsuri precise din domeniul specificat. Progresele ulterioare ale modelelor de limbaj pot fi integrate pentru a îmbunătăți permanent performanța chatbotului. Dezvoltarea și personalizarea continue a modelelor LLM pot revoluționa industria de suport tehnic și transforma furnizarea de servicii către clienți.
de Alex Popescu
de Peter Leeson
de Denisa Lupu