Programul de studii: Calculatoare [617241]
Programul de studii: Calculatoare
Serviciu web pentru agen ți conversa ționali
COORDONATOR, ABSOLVENT: [anonimizat]
2019
Programul de studii: DENUMIREA PROGRAMULUI
PROIECT DE DIPLOMĂ
1. Tema proiectului: Dezvoltatea unui serviciu web care permite
creearea, utilizarea și mentenanța a mai mulți agenți conversaționali
prin utilizarea unui REST API.
2. Numele și prenumele absolvent: [anonimizat]: Hambuer Norbert Rudolf
3. Promoția: 2019
4. Numele și prenumele coordonatorului : Costea Cristinel
5. Termenul de predare al proiectului: 18 Iulie 2019
DECAN,
Prof.univ.dr.ing. Nicolae UNGUREANU
Fișa candidat: [anonimizat]: ________________________________ _______________________________ Promoția: ___________________
Program de studii: ________________________________ ___________________ Forma de învățământ: _____________
Titlul proiectului /lucrării de finalizare a studiilor: ________________________________ ____________________________
________________________________ ________________________________ ________________________________ ____
Coordonatorul proiectului /lucrării de finalizare a studiilor ________________________________ ____________________
________________________________ ________________________________ ________________________________ ____
Proiectul /lucrarea rezolvă:
□ o temă în continuarea unui proiect din anii anteriori
□ o temă în legătură cu un alt proiect
□ o temă nouă fără conexiuni cu alte proiecte
1. Documentarea absolvent: [anonimizat]: □ foarte bună; □ bună; □ suficientă; □ insuficientă.
2. Volumul de muncă depus: □ foarte mare; □ mare; □ mediu; □ mic.
3. Idei originale introduse de absolvent: [anonimizat]: □ foarte multe; □ multe; □ puține; □ niciuna.
4. Rezultatele au fost testate sau simulate: □ complet; □ parțial; □ insuficient; □ nu e cazul.
5. Cerințele temei au fost îndeplinite: □ complet; □ parțial; □ insuficient; □ deloc.
6. Prezentarea (claritatea) și aspectul lucrării: □ foarte bune; □ bune; □ suficiente; □ insuficiente.
7. Alte aprecieri (dacă este cazul) ________________________________ ________________________________ ________
________________________________ ________________________________ __________________
Nr.
crt. Etapa de preg ătire Observa ții Nota
1 Întocmirea planurilor de cercetare + documentare bibliografică +
acumulare de abilități
2 Prezentarea rezultatelor obținute, evaluarea progresului în
elaborarea proiectului și consiliere
3 Pre-prezentarea lucrărilor în stadiul nefinalizat (eventual sesiune de
lucrări știintifice)
4 Forma scrisă a lucrării de finalizare a studiilor
NOTA FINALĂ PROPUS Ă
De acord cu susținerea proiectului: □ DA □ NU
Data ________________________________ _____ Semnătura coordonatorului ________________________________ ___
DECLARAȚIE PE PROPRIE RĂSPUNDERE
PRIVIND AUTENTICITATEA LUCRĂRII DE DIPLOMĂ / DISERTAȚIE
Subsemnatul
_____________________________________________________________________,
legitimat cu _______ , seria ___ _____ __, nr ________________, CNP
____________ ____ _______________ , autorul lucrării
__________________________________________________________ _________ ________
_______________________________________________________________ ___________________
_____, elaborată în vederea susținerii examenului de finalizare a studiilor de licență/masterat la
Facultatea de Inginerie , Specializarea ________________________ _________, din cadrul
Universității Tehnic e din Cluj -Napoca , sesiunea ____________________ a anului universitar
__________________, declar pe proprie răspunde re, că această lucrare este rezultatul propriei
activități intelectuale, pe baza cercetărilor mele și pe baza informațiilor obținute din surse care au
fost citate, în textul lucrării, și în bibliografie.
Declar, că această lucrare nu conține porțiuni plagi ate, iar sursele bibliografice au fost folosite cu
respectarea legislației române și a convențiilor internaționale privind drepturile de autor.
Declar, de asemenea, că aceasta lucrare nu a mai fost prezentată în fața unei alte comisii de examen
de licență/ diplomă/disertație.
În cazul constatării ulterioare a unor declarații false, voi suporta sancțiunile administrative, respectiv,
anularea examenului de licență/diplomă/disertație.
Nume, prenume
_________________________________
Data
_____________________
Semnăt ura
REZUMAT
Titlul: Serviciu web pentru agenți conversaționali
Sistemul implementează un serviciu web care permite crearea și utilizarea agenților
conversaționali utilizând un REST API și administrarea acestora prin care se poate realiza
actualizarea acestora precum și vizualizarea unor statistici. Sistemul este format din două
aplicații :
– Un server Flask care expune un REST API prin care se pot accesa toate resursele
sistemului
– O aplicație de administrare prin care se pot gestiona utilizatori și se pot
adăuga,administra agenții conversaționali ai utilizatorului și de asemenea se pot
interacționa cu aceștia
ABSTRACT
Tilul: Web service for conversational agents
The system implements a web service that allows the creation and use of conversational
agents using a REST API and their administration by allowing you to update the agents and
view their statistics. The system consists of two applications :
– A Flask server that exposes a REST API to access all system resources
– An administration application that manages users and can add, manage, and
interact with the conversational agents of the user
Cuprins
Contents
Cuprins ………………………….. ………………………….. ………………………….. ………………………….. ……………. 11
Capitolul 1. Introducere ………………………….. ………………………….. ………………………….. ………………… 13
1.1 Contextul proiectului ………………………….. ………………………….. ………………………….. ……………. 13
1.2 Motivația ………………………….. ………………………….. ………………………….. ………………………….. …. 14
2.1 Scopul ………………………….. ………………………….. ………………………….. ………………………….. ……… 15
2.2 Obiective secundare ………………………….. ………………………….. ………………………….. ……………… 15
Capitolul 3. Studiu Bibliografic ………………………….. ………………………….. ………………………….. ……… 17
Capitolul 4. Analiză și Fundamentare Teoretică ………………………….. ………………………….. …………. 21
4.1 Arhitectura aplicației ………………………….. ………………………….. ………………………….. ……………. 21
4.2 Componenta front end ………………………….. ………………………….. ………………………….. ………….. 22
4.2.1 ReactJS ………………………….. ………………………….. ………………………….. ………………………….. . 22
4.2.2 Bootstrap ………………………….. ………………………….. ………………………….. ………………………… 24
4.3 Co mponenta backend ………………………….. ………………………….. ………………………….. …………… 25
4.3.1 Baza de date ………………………….. ………………………….. ………………………….. ……………………. 25
4.3.2 Framework -ul Flask ………………………….. ………………………….. ………………………….. …………. 25
4.3.3 Librăria ChatterBot ………………………….. ………………………….. ………………………….. …………. 26
4.3.4 Natural Language Processing ………………………….. ………………………….. ……………………….. 27
4.3.5 Algoritmi de calcul a similarității ………………………….. ………………………….. …………………… 27
4.4 Fragmentarea bazei de date(Sharding) ………………………….. ………………………….. ………………. 29
4.5 Securitatea sistemului ………………………….. ………………………….. ………………………….. …………… 30
4.5.1 JWT – JSON Web Token ………………………….. ………………………….. ………………………….. …… 30
4.5.2 Modelul Double Submit Cookie ………………………….. ………………………….. ……………………… 31
4.6 Imagini și containere Docker ………………………….. ………………………….. ………………………….. … 32
Capitolul 5. Proiectare de Detaliu și Implementare ………………………….. ………………………….. ……… 33
5.1 Pr oiectarea bazei de date ………………………….. ………………………….. ………………………….. ………. 33
5.2 Proiectarea backend ………………………….. ………………………….. ………………………….. …………….. 35
5.2.1 Modulul server Flask ………………………….. ………………………….. ………………………….. ……….. 35
5.2.2 Serviciul REST ………………………….. ………………………….. ………………………….. ………………… 37
5.2.3 Generarea imaginilor Docker ………………………….. ………………………….. ………………………… 41
5.3 Proiectarea frontend ………………………….. ………………………….. ………………………….. …………….. 42
5.1.1 Inregistrare și autentificare ………………………….. ………………………….. ………………………….. . 43
Proiect de diplomă
12
5.1.2 Accesare resurse ………………………….. ………………………….. ………………………….. ……………… 44
5.1.3 Creare agenti ………………………….. ………………………….. ………………………….. ………………….. 46
5.1.4 Statistica agent ………………………….. ………………………….. ………………………….. ………………… 46
5.1.5 Administrare agent ………………………….. ………………………….. ………………………….. …………… 47
5.1.6 Statistică utilizator ………………………….. ………………………….. ………………………….. …………… 48
5.4 Deployment ………………………….. ………………………….. ………………………….. ………………………….. 48
Capitolul 6. Testare și Validare ………………………….. ………………………….. ………………………….. ……… 51
6.1 Black box testing ………………………….. ………………………….. ………………………….. ………………….. 51
6.2 White box testing ………………………….. ………………………….. ………………………….. ………………….. 52
Capitolul 7. Manual de Instalare și Utilizare ………………………….. ………………………….. ………………. 53
7.1 Resurse necesare ………………………….. ………………………….. ………………………….. ………………….. 53
7.2 Instalare aplicație ………………………….. ………………………….. ………………………….. …………………. 53
7.3 Ut ilizare ………………………….. ………………………….. ………………………….. ………………………….. …… 55
Capitolul 8. Concluzii ………………………….. ………………………….. ………………………….. ……………………. 57
8.1 Obiective realizate ………………………….. ………………………….. ………………………….. ………………… 57
8.2 Dezvoltări ulterioare ………………………….. ………………………….. ………………………….. …………….. 57
Bibliografie ………………………….. ………………………….. ………………………….. ………………………….. ………. 59
Proiect de diplomă
13
Capitolul 1. Introducere
Inteligent a artificială și algoritmii de machile learning impreună cu rețelele neurale au
evoluat într -un mod exponențial în decursul ultimilor ani. Astfel că în ziua de azi tot mai
multe job -uri și domenii conțin elemente care se folosesc de aceste inovații. Una din tre
principalele utilități remarcabile ale inteligenței artificiale este în domeniul procesării
limbajului natural care include atât recunoașterea vocii cât și analiza textului pentru a
determina și analiza structurile lingvistice.
1.1 Contextul proiectul ui
Utilizarea interfețelor conversaționale care în spate dispun de age nți conversaționali
special cre ati pentru a răspunde unor seturi de întrebări specifice unui anumit domeniu a
devenit din ce în ce mai frecventă. Acești agenți conversaționali, denumiți și chatboti, sunt
inteligențe artificiale capabile să poarte o conversație cu diverși utilizatori folosind diferi te
metode de analiză a textului. Scopul acestora este de a simula într -un mod cât mai realist
comportamentul unui partener de conversație și de a da răspunsuri cât mai utile pentru
utilizatori ca aceștia să poată găsi cu ușurință informațiile de care au ne voie.
Acești agenți conversaționali pot fi utilizați în primul rând de către site-urile care
ofera un serviciu de support online . Acest suport este o componentă cheie pentru majoritatea
site-urilor, în special pentru cele din domeniul tehnologiei. Indifer ent dacă produsul este un
open source, o aplicație web sau un produs descărcabil, clienții se asteaptă să se ofere o
anumită formă de asistentă tehnică iar furnizarea acestora este benefică și pentru afacere
deoarece ajută la sprijinul utilizatorului fapt ce imbunătăteste sentimentul de loialitate fată de
produs și vânzător ceea ce ulterior optimizează șansele ca utilizatorii să revină sau să mai
utilizeze serviciile oferite.
În al doilea rând acești agenți conversaționali pot fi utilizați în diferitele a plicații
dedicate pentru e -learning. Prin dispunerea unei interfețe conversaționale și a unui chatbot
special antrenat să răspundă întrebărilor specifice unui anumit domeniu, utilizatorii pot căuta
Proiect de diplomă
14
mult mai rapid o anumită informație fără a fi nevoiți să g ăsească secțiunile site -ului în care se
regăsește informația dorită. De exemplu pe un site în care se regăsește curiculum unui anumit
curs, studenții pot pur și simplu să adreseze anumite întrebări legate de cursul respectiv direct
din pagina principală pr in intermediul unei interfețe conversaționale fără să fie nevoiți să
răscolească tot site -ul și să găsească secțiunile care fac referire la informațiile dorite.
1.2 Motiva ția
În primul rând datorită necesităților prezentate anterior am implementat un framework
care permite antrenarea și accesarea agenților conversaționali prin intermediul unui REST
API care utilizează o librărie de chatboti ce permite generarea unor răspunsuri la anumite
întrebări utilizând o selecție de algortmi de machine learning.
În al doilea rând acest fremework împreună cu bazele de date care conțin toate
cunoștințele agenților conversaționali este dispus pe un serviciu de cloud. Acest lucru precum
faptul că toate resursele sunt disponibile printr -un REST API face ca acest frame work să fie
integrat mult mai ușor în diferite aplicații sau site -uri web ceea ce implică mai puține resurse
necesare din partea celor care vor să îl utilizeze.
Aplicația creată oferă posibilitatea de a antrena mai mulți agenți conversaționali,
fiecare fi ind complet independent de ceilalți, dispunând de setului lui de întrebări și
răspunsuri. Ulterior acești agenți pot fi integrați cu ușurință împreună cu o interfață
conversaționala în diferite site -uri. De asemenea aplicația dispune de o interfață web car e
permite administrarea agențiilor creați, creearea unor agenți noi precum și vizualizarea
diferitelor statistici ale fiecărui agent în parte.
Proiect de diplomă
15
Capitolul 2. Scopul și Obiectivele Proiectului
2.1 Scopul
Dezvoltatea unui framework care permite creearea, dispunerea și mentenanța a mai
mulți agenți conversaționali prin utilizarea unui REST API .
Prin intermediul acestei aplicații se dorește ca diferite site -uri și aplicații web să
dispună de posibilitatea de a înbunata ții accesul clientului la informațiile acestora precum și
oferirea unui suport tehnic pentru utilizatori indiferent de momentul la care se accesează site –
ul sau aplicația .
2.2 Obiective secundare
Interfață de administrare a utilizatorilor și a tuturor agenților conversaționali creați de
aceștia
REST API care v -a permite antrenarea/crearea agenților conversaționali pe baza unor
fișiere cu întrebări și răspunsuri
Serviciu REST pentru interac țiunea cu chatbot -ul
API pentru antrenarea continu ă a agentului conversa țional
Exportul unui chatbot ca și o imagine virtuală care va putea fi instantiata ca și un
container pe o altă mașină
Statistici legate de fiecare chatbot în parte prec um și o statistică generală a
utilizatorului care să contină informații legate de interacțiunea cliențiilor cu chatbotii
acestuia
Sistem de autentificare și protecția a resurselor prin intermediul unui model de
securitate
Înregistrarea și autentificarea utilizatorilor
Mecanism recuperare parolă utilizator
Proiect de diplomă
16
Integrarea agenților și a interfeței conversaționale cu alte aplicații web prin
intermediul unui kit javascript
Proiect de diplomă
17
Capitolul 3. Studiu Bibliografic
Inteligența artificială și algoritmii de machine learning împreună cu rețelele neurale
au evoluat într -un mod exponențial în decursul ultimilor ani. Astfel că în ziua de azi tot mai
multe job -uri și domenii conțin elemente care se folosesc de aceste inovații.
C. Grosan și A. Abraham [1] susțin faptul că în ziua de azi avem o mulțime de
sisteme inteligente precum mașini care pot interpreta scrisul de mână mai bine dec ât oamenii,
sisteme care pot lua anumite decizii mult mai bine decât oamenii, mașini care pot calcula și
interpreta un număr foarte mare de date într -un timp scurt, acestea fiind lucruri naturale în
zilele noastre, dar au fost greu de crezut în urmă cu doar două decenii în urmă. Toturi chiar și
cu aceste inovații tehnologice dacă privim aceste mașini inteligente dintr -un punct de vedere
uman nu putem spune că sunt comparabile cu nivelul uman de inteligență.
Conform [2],companiile din ziua de azi rămân fixate să utilizeze boți care folosesc
inteligența artificială pentru a îmbunătății experienta consumatoriilor. Aceștia continuă să
investea scă masiv în acest domeniu vast astfel mentinand piața și încurajând potențialul
acestei tehnologii. Totuși datorită unor greșeli în procesul de implementare al multor dintre
aceste tehnologii, integrarea acestora în multe soluții conduce la anumite proble me precum
lipsă atenției în ceea ce privește dorințele consumatorulor din cauza unor i mplementări
robuste care nu țin cont de nevo ile și dorințele acestora, lipsa unui plus de valoare pentru
consumator deoarece mulți dintre acești chatboti nu reușesc să fu rnizeze funcționalități care
ar fi dorite sau chia r necesare consumatorilor, lipsa unei comunicări directe între consumator
și reprezentanții companiilor deoarece multe din implementări încearcă să înlocuiască
complet intervenția umană în această parte a c omunicării cu clientul.
De asemenea deficitul de încredere în utilizarea soluțiilor care depind de aceste medii
IT va dispărea în următorii 10 ani.[5] Afirmă că în decursul următorului deceniu, vom asist a
la o trecere radicală de la neîncredere și scepticism parțial la dependentă deplină de AI și de
alte tehnologii avansate. Majoritatea aplicațiilor bazate pe AI se confruntă cu consumatorii,
ceea ce reprezintă un alt motiv solid pentru utilizatorii obișnu iți de a depăsi barieră de
încredere în timp. Cu mai multă expunere și mai mult acces la soluții tehnologice pentru
Proiect de diplomă
18
afacerile lor zilnice. În epocă postindustrială, oamenii au lucrat pentru a cre ea o masină c are
se comportă ca un om. În ultimii ani, autove hiculele cu asistenții digitali, personalul din
fabricile robotizate și orașele inteligente au dovedit că sunt posibile mașini inteligențe. AI a
transformat majoritatea sectoarelor industriale, cum ar fi retail, producție, finanțe, asistentă
medicală și ma ss-media, și continuă să invadeze noi teritorii. Trecând prin tendințele actuale
de cercetare în AI și ML, progresele în domeniul securitătii cibernetice au dus algoritmii ML
la nivelul următor de invătare, ceea ce sugerează că aplicațiile AI și ML axate p e securitate
vor fi marcate pentru viteză și precizia lor.Trecând prin tendințele actuale de cercetare în AI
și ML, progresele în domeniul securitătii cibernetice au dus algoritmii ML la nivelul următor
de invătare, ceea ce sugerează că aplicațiile AI și M L axate pe securitate vor fi marcate
pentru viteză și precizia lor.
Yahya Al -Dhuraibi, Fawaz Paraiso, Nabil Djarallah, Philippe Merle[3] afirmă că
tehnologiile de cloud computing au câștigat mai multă popularitate și atenție în ultimii 10 ani
din mediul industrial și chiar și cel academic. Principalul factor al utilizării tehnologiilor de
cloud computing îl constituie abilitatea acestora de a oferii consumatorilor resurse în funcție
de nevoile consumatorilor, permițând ajustarea în mod dinamic a memoriei allocate pentru a
îndeplinii specificațiile necesare, lucru cunoscut că și elasticitate. Aceas tă proprietate fiind
considerat ă una din cele cheie când vine vorba de cloud computing.
Viitorul tehnologiilor de cloud computing este unul foarte sigur. Conform [4]
viitorul cloud computing este o arhitectură unică, bazată pe c elulă computerizată care
furnizează în mod constant infrastructura software de cea mai bună calitate, inclusiv
criptarea, autentificarea, segmentarea rețelei, integritatea datelor și gestionarea datelor pe mai
multe servicii de cloud. Contrar credinței pop ularie, servicile private de cloud nu sunt pur și
simplu centre de date existențe care rulează simple prelucrări de date. Acestea sunt medii de
aplicații și servicii digitale extrem de modernizate care rulează pe platforme cloud, cum ar fi
Azure Slack de l a Microsoft și pot fi găzduite atât la sediul companiei cât și la un partener de
servicii de găzduire. Aceste inovații vor duce la prelucrarea datelor, stocarea acestora și
diversele funcționalități complexe să fie integrate sub noi forme cum ar fi hainel e și
accesorile din viață de zi cu zi și nu vor mai fi dispozitive pe care vom fi nevoiți să le purtăm
cu noi. Limitarea spectrului de frecvențe ne va conduce din nou la o arhitectură distribuită
deoarece conductele vor fi prea mici pentru a centraliza ace ste operații atât de puternice.
Proiect de diplomă
19
Conform [5], în cele mai recente studii proiectarea API -ului care susține interfețele
REST s -a dovedit a fi în mare creștere. Integrarea și dezvoltarea arhitecturi i aplicațiilor se
schimbă subtil , iar lumea a ajuns într -un punct în care API -urile nu mai sunt un privilegiu, ci
o necesitate. Informațiile care se procesează prin REST(Reprezentațional State Transfer),
folosind astfel protocolul HTTP sau chiar și HTTPS este de asemenea rentabilă în ceea ce
privește lățimea de b andă, ceea ce o face mai utilă pentru traficul pe internet și facilitează
simplitatea utilizării. Indiferent dacă este prezentă în rețele sociale, aplicații mobile,
instrumente de mashup sau procese de afaceri complicate, API -urile RE ST sunt acum
prezente peste tot, pur și simplu cuprinzând interacțiunea dintre serviciile web și clienții într –
o manieră mai bună și mai angajată. Și în timp ce stilul SOAP (Simple Object Access
Protocol), un concurent al cadrului REST s -a dovedit a fi un pic de modă veche fiin d făcut
pentru arhitectură de tip middleware, interfețele REST API au alterat procesul de proiectare
de la foarte general la foarte specific, ceea ce reprezintă un pas revoluționar în tehnologie. Cu
alte cuvinte, REST este perfect făcut pentru cloud, mobil și alte inovații și acces rapid la
zonele de informații care sunt considerate a fi viitorul Web -ului. Pe măsură ce lumea și -a
manifestat interesul pentru mobil și cloud, interfața REST a cre scut progresiv, făcand
interfața să se potrivească cu capacitătil e coerente de infrastructură ale comunicațiilor limitate
și a cazurilor implicate de un număr mare de contrapărti.
Aceste modele de livrare se concentrează pe furnizarea de soluții software pentru
consumatori, în timp ce infrastructura ca serviciu (IaaS) se concentrează asupra serviciilor de
infrastructură (de exemplu, capacitătile de calcul sau de stocare). Cele mai rapide API -uri se
bazează pe soluțiile SaaS, deși există numeroase soluții API RESTful disponibil e și pentru
consumatorii PaaS.[6 ]
Proiect de diplomă
20
Proiect de diplomă
21
Capitolul 4. Analiză și Fundamentare Teoretică
În acest capitol vom descrie algoritmii utilizați în dezvoltarea aplicației, conceptele
utilizate precum și instrumentele și platformele utilizate în implementarea acesteia.
4.1 Arhitectura aplica ției
Arhitectura este bazată pe modelul client -server pentru a facilita accesul utilizatorilor
la agenții conversaționali. În momentul în care un utilizator adresează o întrebare în interfața
conversațională, aceasta este trimisă către server unde se determină agentul conversațional și
baza de date care trebuie interogată pentru a se află răspunsul. După identificare se accesează
baza de cunoștințe a agentului și se procesează întrebarea de către fiecare adaptor logic al
agentului astfel determinându -se o listă de posibile răspunsuri, fiecare cu un identificator care
indică nivelul de acuratețe și incredera al răspunsului. După acesta procesare se trimite la
utilizator răspunsul care are cel mai mare indice de acuratețe. În final chatbot -ul stochează
conversația respectivă pentru a putea fi utilizată ulterior în determinarea altor răspunsuri. În
cazul în care un utilizator pune o întrebare către același chatbot atunci acesta se v -a accesa
din memoria server -ului, nefiind necesară o nouă instanțiere a acestuia și o nouă reconectare
la bază de date. Agentul conversațional v -a determina un răspuns pentru orice întrebare chiar
dacă indicele de acuratețe este unul scăzut.
Proiect de diplomă
22
Fig. 4.1 Arhitectura sistemului
4.2 Componenta front end
4.2.1 ReactJS
Pentru partea de client am ales să folosesc ReactJS deoarece este o librărie ușor de
învățat și folosit care deține și o documentație extinsă precum și o comunitate vastă.
ReactJS este în principiu o bibliotecă JavaScript open -source, care este utilizată
pentru a construi interfețe utilizator special pentru aplicații de o singură pagină. Este folosit
pentru manipularea stratului de vizualizare pentru aplicațiile web și mobile. React ne permite,
de asemenea, să creăm componente UI reutilizabile. React permite dezvoltatorilo r să creeze
aplicații web mari, care pot schimba datele, fără a reîncărca pagina. Scopul principal al React
este să fie rapid, scalabil și simplu. Funcționează numai pe interfețele utilizator în aplicație.
Aceasta corespunde vizualizării în șablonul MVC. A cesta poate fi folosit cu o combinație de
alte biblioteci sau framework -uri JavaScript, cum ar fi Angular JS în MVC. [13]
Proiect de diplomă
23
Fiecare componentă react are un ciclu de viață propriu. Acestea sunt etape prin care
trece componenta în timpul utilizării acesteia [14]. Cele 4 etape prin care trece o componenta
sunt:
Montarea – Aceasta este faza inițială a oricărei componente. În această etapă se
setează starea inițială și valorile de bază ale elementelor care sunt cuprinse în
componența. Acest lucru se face de obicei în interiorul metodei constructorului.
Incarcarea – Aceasta este etapa în care componenta se montează în DOM(adică este
creată și inserată în DOM) și este prima data când componenta se afișează în pagină .
Actualizarea – Aceasta este a treia fază prin care trece componenta. După faza de
încărcare în care a fost creată componenta, faza de actualizare se desfășoară. Aici se
schimbă starea componen tei și prin urmare se realizează reafisarea acesteia. În această
fază datele componen tei(starea și proprietățile) s e actualizează că răspuns la
evenimentele utilizatorilor, cum ar fi click -urile, tastarea etc .
Demontarea – Aceasta este etapa finală a unei componente în care se demontează
componenta din DOM .
Proiect de diplomă
24
Fig. 4.2 Ciclul de viata al unei componente
4.2.2 Bootstrap
Pentru partea de design a aplicației de administrare am ales să folosesc framework -ul
Bootstrap deoarece prin intermediul acestuia se poate creea cu ușurință pagini web care se fie
compatibile atât cu dispozitivele mobile cât și cu ecranele d e dimensiuni mai mari cum ar fi
cele de laptop sau desktop .
Bootstrap este un framework CSS gratuit și open -source, orientat către dezvoltarea de
aplicații web adaptabile, compatibile cu ecranele de diferite dimensiuni. Acesta conține
șabloane de design CSS și (opțional) bazate pe JavaScript pentru tipografie, formulare,
butoane, navigație și alte componente ale interfeței [15].
Proiect de diplomă
25
4.3 Componenta backend
4.3.1 Baza de date
Pentru gestionarea utilizatorilor, a resurselor pe care le dețin aceștia precum și a
agențiilor c onversaționali pe care i -au cre at am decis să folosesc baza de date PostgreSQ
deoarece este o bază de date open source obiect -relațională care este capabilă se gestioneze în
mod eficient mai multe sarcini în același timp, lucru cunoscut ca și concurență, fără a impune
blocări de citire pe tabele. Această baza de date este adecvată aplicației deoarece oferă o
implementare riguroasă a integrității datelor, PostgreSQL fiind complet în conformitate cu
setul de proprietăți ACID, iar dezavantajel e acestuia, precum faptul că viteza de citire și
scriere a datelor este mai scăzută comparativ cu alte baze de date, nu constituie un dezavantaj
deoarece numărul de accesări a datelor din această bază este unul scăzut, seturile de date
pentru agenții conve rsaționali fiind stocate în baze de date SQLite.
Pentru stocarea bazei de cunoștințe specific fiecărui agent conversațional am utilizat
baza de date SQLite. Aceasta este o bază de date relațională autonomă, bazată pe fișiere și
complet open -source, cunos cută pentru portabilitatea și fiabilitatea precum și performanță
puternică chiar și pe sisteme cu memorie redusă. Tranzacțiile sale sunt compatibile cu ACID,
chiar și în cazurile în care sistemul se blochează sau suferă o întrerupere a alimentării.
Această baza de date este adecvată pentru stocarea cunoștințelor agenților conversaționali
deoarece permite ca fiecare agent să fie complet independent de ceilalți, toate datele sunt
stocate într -un singur fișier ceea ce face exportul acestora mai fiabil, iar în arhitectură aceasta
managmentul utilizatorilor nu este necesar, acesta fiind realizat la nivelul bazei de date
PostgreSQL .
4.3.2 Framework -ul Flask
Pentru partea de server am ales să folosesc un framework din limbajul Python
denumit Flask. Acesta este un framework extrem de ușor care oferă simplitate, flexibilitate și
control. Acesta implementează un schelet minimal și lasă la latitudinea dezvoltator ului să
aleagă ce alte functionalităti trebuie implementate și modul în care acestea sunt construite.
Proiect de diplomă
26
Acest framework este mult mai util în cazul în care dezvoltatorul dorește să învețe mai multe
sau în cazul în care dorește mai mult control asupra compone ntelor de pe server .
4.3.3 Librăria ChatterBot
Pentru implementarea unui chatbot am folosit librăria Python ChatterBot. ChatterBot
este o librărie Python care facilitează generarea de răspunsuri automate la întrebările trimise
de către un utilizator. ChatterBot utilizează o selecție de algoritmi de machine learning pentru
a genera diferite tipuri de răspunsuri .
Unul dintre avantajele acestei librării este faptul că poate fi independent de limba în
care sunt transmise și utilizate seturile de date astfe l oferind posibilitatea de a fi utilizat în
orice limbă. De asemenea prin intermediul algoritmului de machine learning un agent
conversațional poate să își îmbunătățească propria bază de cunostiinte și implicit răspunsurile
pe care le poate genera prin int ermediul conversațiilor purtate de acesta .
La început un agent conversațional nu deține nici o informație. De fiecare dată când
un utilizator introduce o întrebare sau o afirmație, agentul salvează în baza lui de date această
informație precum și răspunsu l sau afirmația următoare astfel acesta putând utiliza aceste
seturi de date în conversațiile viitoare pentru a da răspunsuri mai exacte. Pe măsură ce
agentul primește mai multe întrebări, numărul de răspunsuri pe care le poate da precum și
acuratețea aces tora crește .
În momentul în care agentul primește o afirmație la care trebuie să răspundă acesta
folosește unul sau mai mulți adaptori logici pentru a analiza afirmația și pentru a determina
un răspuns. Pentru fiecare adaptor logic pe care îl folosește ch atbot -ul, se generează un
răspuns care are un indice de acuratețe. La final se analizează toate răspunsurile posibile și se
returnează acela care are acuratețea cea mai mare, acesta fiind răspunsul cel mai probabil
raportat la baza de cunoștințe pe care o deține chatbot -ul.
Librăria ChatterBot include anumite instrumente care ajută la simplificarea procesului
de antrenare a unui agent conversațional. Acest proces implică încărcarea unui dialog(sub
forma unui fișier sau a unei liste de afirmații și răspunsu ri) în baza de date a acestuia. Acest
lucru creează sau dacă există se dezvoltă pe structura de date bazată pe grafuri care reprezintă
Proiect de diplomă
27
seturi de afirmații și răspunsuri. În momentul în care unui modul de antrenare al unui chatbot
îi este trimis un set de d ate, acesta creează intrările necesare în graficul de cunoștințe ale
chatbot -ului, astfel încât afirmațiile și răspunsurile să fie reprezentate corect .
4.3.4 Natural Language Processing
Pentru a interpreta întrebările și răspunsurile librăria Chatterbot utilizează diferite
concepte NLP(Natural Language Processing) care presupun atât înțelegerea cât și generarea
de mesaje în limbaj natural.[9] Unele capabilităti de procesare a limbajului n atural se
concentrează pe segmentarea și recunoașterea subiectului textelor. Aceasta implică un set de
date de intrare și unele modele de invătare automată care sunt capabile să clasifice textul în
mai multe subiecte.
Problema poate avea două abordări: i nvătarea nesupervizată și supervizată. Invătarea
supervizată utilizează datele care au fost etichetate cu clasele sau subiectele corecte, în timp
ce algoritmii nesupervizati folosesc date de intrare care nu au fost adnotate manual cu clasa
sau subiectul c orect. În general, invătarea nesupervizată este mai complexă și oferă rezultate
mai puțin precise decât invătarea supervizată. Cu toate acestea, volumul datelor care nu a fost
etichetat este mult mai mare decât cele care au clasele corecte atribuite și în unele situații, un
algoritm nesupervizat este singura opțiune.[10]
4.3.5 Algoritmi de calcul a similarit ății
Librăria Chatterbot utilizează diferite tehnici de machine learning pentru a determina
răspunsurile la întrebările utilizatorilor. Acesta utilize ază algoritmi de căutare și clasificare
care determină corectitudinea unui răspuns în funcție de similaritatea acestuia cu întrebarea
adresată, frecvența în care anumite răspunsuri apar precum și posibilitatea ca o întrebare să se
încadreze într -o anumită categorie la care se cunosc anumite declarații. Mai multe adaptoare
logice din Chatterbot utilizează algoritmi de clasificare Bayesian naivi pentru a determina
dacă o declarație de intrare îndeplinește un anumit set de criterii fapt ce va determina
generar ea unui răspuns prin intermediul adaptorului logic.
Proiect de diplomă
28
Unul dintre algortmi de comparare utilizați de librărie este Jaccard Similarity care
calculează similitudinea dintre două afirmații utilizând un index -ul Jaccard. Acest index este
compus dintr -un num ărător și un numitor. În numărător se calculează numărul de elemente
care sunt distribuite între seturi, iar în numitor se determină numărul total de elemente din
ambele seturi. Funcția de similitudine Jaccard calculează asemănarea a două liste de
numere[1 1]:
Un alt algoritm utilizat pentru compararea seturilor de date este Distanța Levenshtein.
Acesta este un șir metric utilizat pentru măsurarea diferențelor dintre două secvențe.
Informal, acesta distanță este numărul minim de editări realizate pe un s ingur
caracter(ștergere, substituție, inserare) necesare pentru a schimba un cuvânt în altul.[12]
Ultimul algoritm de comparare utilizat de Chatterbot este Distanța Synset. Acest
algoritm utilizează funcționalitatea wordnet al librăriei NLTK pentru a determina asemănarea
a două instrucțiuni bazate pe similitudinea căii dintre fiecare simbol al fiecărei instrucțiuni.
Acest lucru se realizează utilizând Wordnet care defapt este un dicționar semantic organizat
pe synsets. Fiecare synset este format dintr -un id, un sens și un grup de sinonime.
Proiect de diplomă
29
4.4 Fragmentarea bazei de date(Sharding)
În vederea gestionarii traficului ridicat precum și a nivelului foare mare de date de
care va dispune fiecare agent conversațional am ales să utilizez un model de arhitectură a
bazelor de date denumit fragmentare(Sharding).
Sharding este un model de arhitectură de bază de date legat de partiția
orizontală(practică separării rândurilor unui tabel în mai multe tabele diferite, cunoscute sub
denumirea de partiții). Fie care partiție are aceeași schemă și coloane, dar și rânduri complet
diferite. De asemenea, datele deținute în fiecare dintre acestea sunt unice și independente de
datele deținute în alte partiții.
Avantajul principal în fragmentarea unei baze de date est e că poate ajută la facilitarea
scalării orizontale, cunoscută și sub denumirea de scalare. Scalarea orizontală este practică de
a adăuga mai multe mașini la o stivă existentă pentru a imprăstia sarcina și pentru a permite
un trafic mai mare și o prelucrar e mai rapidă. Acest lucru este adesea în contrast cu scalarea
verticală, cunoscută și sub numele de scalare în sus, care implică modernizarea hardware -ului
unui server existent, de obicei prin adăugarea mai multor memorii RAM sau CPU .
Există numeroase av antaje pentru abordarea orizontală de partiționare. Deoarece
tabelele sunt impărtite și distribuite în mai multe servere, numărul total de rânduri din fiecare
tabel din fiecare bază de date este redus. Aceasta reduce dimensiunea indexului, care, în
genera l, imbunătăteste performanța căutării. Un shard de baze de date poate fi plasat pe
hardware separat, iar mai multe fragmente pot fi plasate pe mai multe mașini. Acest lucru
permite o distribuție a bazei de date pe un număr mare de mașini, imbunătătind foar te mult
performanța .[7]
Proiect de diplomă
30
Fig. 4.3 Fragmentarea bazei de date
4.5 Securitatea sistemului
4.5.1 JWT – JSON Web Token
Pentru a securiza și identifica fiecare rută din API am utilizat JSON Web Token .
JSON Web Token (JWT, adesea pronunțat "jot") este un instrument puternic pentru
transmiterea confidentială a datelor între două părti prin token -uri. Aceste părti pot fi
compuse din utilizatori, servere sau orice altă combinație de servicii. Pe bază unui standard
deschis (RFC -7519), JWT -urile sunt semnate digital cu un algoritm de criptare, astfel încât
partea care primește poate avea încredere în informațiile conținute în document. În securitatea
calculatoarelor, acest concept este cunoscut că Integritate a datelor.
Un avantaj principal al utilizării unui JWT este faptul că este foarte compact
(presupunând că emitentul utilizează JWS Compact Serialization, care este recomandat). Ele
sunt în general destul de mici pentru a fi trimise printr -o cerere POST, într-un antet HTTP sau
chiar ca un șir de interogări într -o adresă URL. Cu toate acestea, cu cât mai multe permisiuni
se adaugă la un JWT, cu atât devin mai incarcate . Este cea mai bună practică să adăugati doar
informațiile pe care partea de primire trebu ie să le aibă.
Proiect de diplomă
31
4.5.2 Modelul Double Submit Cookie
Pentru a asigura o securitate cât mai bună împotrivă atacurilor de tipul XSS(Cross -site
scripting – în care un posibil atacator poate injecta scripturi într -o pagină web, fapt care poate
afecta atât ceilalți utilizatori cât și bază de date) și CSRF(Cross -site request forgery – în care
un atacator are posibilitatea de a face solicitări către server în numele unui utilizator
autentificat și autorizat [8]) am decis să folosesc modelul de securitate Double Submit Cookie.
Acest model de securitate este unul fezabil atunci când dispunem de resurse server limitate și
nu putem urmării fiecare JWT pentru fiecare sesiune a utilizatorilor sau atunci când fiecare
utilizator poate dispune de mai multe sesiuni .
Când un utilizator se autentifică la un site, site -ul ar trebui să genereze un identificator
de sesiune și să stabilească un cookie în browser. Când vom crea un JWT, vom crea, de
asemenea, un șir aleatoriu și îl vom păstra în JWT. Acest jeton este salvat într -un modul
cookie cu setarea httponly la True, deci nu poate fi accesat prin javascript. Apoi vom crea un
cookie secundar care conține numai șirul aleator, dar în care a fost setat pe httponly False,
astfel încât să poată fi accesat prin Javascript care rule ază pe aplicația web. Astfel pentru a
accesa un endpoint protejat, va trebui adăugat un antet personalizat care să conțină acel șir
aleator. Cookie -ul cu setarea httponly va fi transmis automat la fiecare cerere care necesită
autentificare(setarea withCred entials este True). La fiecare cerere pentru un endpoint protejat
server -ul va verifica dacă șirul din antet corespunde cu valoarea regăsită în JWT. Dacă acesta
nu se potrivește atunci cererea va fi marcată ca neautorizată și va fi respinsă ulterior .
În acest caz dacă un atacator incearcă să efectueze un atac CSRF, acesta va trimite
JWT (prin cookie) la un endpoint protejat, dar fără șirul aleatoriu din antetul solicitărilor,
aceștia nu vor putea accesa punctul final. Ei nu pot accesa șirul aleatoriu, cu e xcepția cazului
în care pot rula javascript pe site (probabil printr -un atac XSS) și dacă pot efectua un atac
XSS, nu vor putea să acceseze cookie -ul httponly deoarece acesta nu este vizibil din client,
iar fara ambele componente accesarea endpoint -ului va fi imposibila.
Proiect de diplomă
32
4.6 Imagini și containere Docker
În vederea exportării unui chatbot pe un alt sistem am utilizat
imaginile și containerele Docker.
Docker este o platformă software de virtualizare bazată pe open source, concepută în
principal pentru Linux și Windows. Docker utilizează caracteristicile de izolare a resurselor
kernelului OS, cum ar fi cgroups în Linux, pentru a execută mai multe contain ere
independente pe același sistem de operare. Un container care se mută dintr -un mediu Docker
la altul cu același sistem de operare va funcționa fără modificări, deoarece imaginea include
toate dependențele necesare pentru a execută codul.
Proiect de diplomă
33
Capitolul 5. Proiectare de Detaliu și Implementare
În acest capitol va fi prezentat modul de proiectare a sistemului, fiecare componentă
fiind detaliată. Se vor prezenta principalele componente de React ale aplicației de
administrare, se vor detalia rutele care formează API -ul Rest precum și modul acestora de
funcționare și se va prezenta structura bazelor de date.
5.1 Proiectarea bazei de date
Sistemul utilizează o bază de date PostgreSQL pentru stocarea informatilor
utilizatorilor și a agenților conversaționali de care dispun. Această bază de date este dispusă
pe un server cloud utilizând platforma Heroku. Structura bazei de date este una relativ simplă,
această bază stocând doar o legătură dintre utilizatori, agenți conversaționali și o descriere a
cunoștințelor acestora.
Fig. 5.5 Diagrama bazei de date PostgreSQL
Proiect de diplomă
34
Tabela users deține informați le utilizatorilor care au fost completate în formularul de
înregistrare.
Tabela bots conține denumirea unui agent conversațional și ID -ul utilizatorului de
care aparține acesta. În tabela tags se regăsesc descrieri scurte ale cunoștințelor de care
dispun fiecare agent conversațional.
În tabela alembic_version se stochează numărul versiunii actuale a bazei de date, pe
server existând o versi onare a bazei de date, fiecare versiune fiind identificată printr -un
număr unic.
Pentru a stoca graful de cunoștințe pe care îl deține fiecare agent conversațional și
pentru a asigura independența fiecărui agent față de ceilalți se utilizează câte o bază de date
SQLite specifică fiecărui agent.
Fig. 5.6 Diagrama bazei de date SQLlite
Proiect de diplomă
35
În tabela tag se stochează o descriere a tipurilor de cunoștințe pe care le deține agentul
conversațional, iar în tabela tag_association se stochează legătură d intre o afi rmație și tipul de
cunoștință din care face parte.
În tabela statement se stochează graful de cunoștințe a agentului conversațional.
Această tabelă conține următoarea structură:
text : conține întrebarea sau afirmația care a fost adresată agentului conver sațional
search_text : conține cuvintele cheie din afirmație precum și dacă este cazul o analiză
gramaticala a afirmației, identificând valoarea morfologică a cuvintelor cheie
conversation : identifică conversația în care s -a utilizat aces t set de întrebare/răspuns,
marcând de asemenea datele provenite din setul de antrenare
created_at : stochează data și ora la care s -a adăugat setul de date în graf
in_response_to : conține răspunsul generat pentru întrebarea/afirmația stocată în
câmpul „ text”
search_in_response_to : conține cuvintele cheie și analiză gramaticală a răspunsului
persona : conține numele agentului conversațional la care îi este atribuit setul de date
5.2 Proiectarea backend
5.2.1 Modulul server Flask
Componenta backend a fost con struită utilizând framework -ul Flask, acest server fiind
dispus pe un server de cloud prin intermediul platformei Heroku. Toate resursele aplicației
sunt disponibile printr -un serviciu REST.
Pentru a abstractiza și automatiza transferul de date înt re server și bază de date am
ales să folosesc arhitectură ORM(Object -relațional mapping). Pentru această s -au creat trei
clase python pentru fiecare tabela din bază de date(Users, Tags, Bots). Aceste clase conțin că
și atribute fiecare coloană din tabele și implementează diferite funcții pentru a realiză
metodele de bază CRUD precum și alte operații de preluare și prelucrare a datelor din bază.
De exemplu pentru clasă Users există funcții care caută în bază de date utilizatorul după
nume sau email precum ș i o funcție care transformă un obiect de tipul user într -un json care
să poate fi returnat de către server la un request AJAX.
Proiect de diplomă
36
În tabelul următor se vor identifica cele mai importante rute din serviciul REST
Denumirea rutei Metoda folosita Descriere
Register POST Crează un utilizator nou în baza de date
Login POST Autentifică un utilizator și returnează token –
urile de validare
Reset_password POST Modifică parola unui utilizator și returnează
token -urile de autentificare
Bot PUT Actualizează baza de date a unui agent
conversațional
Bot DELETE Șterge un agent conversațional din bază
Create_bot POST Crează un agent conversațional nou
Get_response GET Returnează un răspuns de la un agent
conversațional pentru întrebarea trimisă ca și
parametru
Get_user_bots GET Returnează o listă cu toți agenții
conversaționali ai utilizatorului
Get_bot_id GET Returnează un agent conversațional determinat
de ID -ul trimis ca și parametru
Most_asked_question GET Returnează o listă cu, cele mai frecvente
întrebări adresate unui agent conversațional
User_bots_usage GET Returnează o listă cu toți agenții
conversaționali și numărul de întrebări adresate
fiecăruia
Bot_usage GET Returnează numărul de întrebări adresate unui
agent conversațional în fiecare lună
Bot_questions GET Returnează o listă cu toate întrebările și
răspunsurile din baza de cunoștințe a unui
agent conversațional
Build_docker_img GET Generează un fișier care conține o imagine
Proiect de diplomă
37
virtuală al unui agent conversațional
Send_recovery_mail GET Trimite un email pentru recuperarea parolei
5.2.2 Serviciul REST
Ruta register realizează adăugarea unui utilizator nou în bază de date. Acest lucru se
realizează folosind componenta ORM, astfel se instanțiază un obiect de tipul Users la care se
transmit că și parametrii informațiile completate în formularul de adăugare și se salveaz ă
acest obiect în baza de date. După salvare se generează un JWT care permite accesarea retelor
protejate. Acest token se transmite înapoi că și un antet de tipul Set -Cookie care va realiză
stocarea unui cookie la client. Cookie -ul acesta va conține JWT -ul și va avea setarea httpOnly
că și „true” ceea ce va face accesarea lui din client imposibilă, el fiind transmis automat la
fiecare request cu setarea „withCredentials” egală cu „true”. De asemenea împreună cu accest
cookie se va seta un al doilea care va putea fi accesat de către client și va conține un șir de
caractere aleatoriu, acest șir fiind criptat și în JWT. Astfel pentru accesarea unei rute protejate
va fi nevoie de ambele cookie -uri care se vor valida reciproc. În cazul în care șirul de
caractere din al doilea cookie nu corespunde cu cel din JWT atunci se va bloca accesul la rută
și se va întoarce un răspuns cu un cod de eroare 401(Unauthorized).
Mecanismul de securitate este implementat cu ajutorul unei librării flask denumită
„flask_jwt_extende d” care oferă metode pentru crearea și validarea unui jwt, generarea
header -ului care setează un JWT în cookie precum și metodele de validare a unui JWT. De
asemenea toate rutele serviciului REST sunt protejate utilizând o funcție decoratoare a acestei
librării. Astfel rutele pentru care este necesară autentificare sunt precedate de o funcție
decoratoare „@jwt_required” care, în momentul accesării rutei, apelează metodele de
verificare și validare a JWT -ului și a cooki -ului de validare.
Ruta login realizeaz ă verificarea utilizatorului în baza de date, validarea parolei
acestuia precum și autentificarea lui. Dacă datele de autentificare ale utilizatorului sunt valide
atunci funcția va realiza autentificarea acestuia folosind același mecanism că și cel prezent at
în ruta „register”.
Proiect de diplomă
38
Ruta reset_password validează un token JWT primit că și parametru în POST și după
validarea acestuia și extragerea ID -ului utilizatorului din token, modifică parola utilizatorului
în baza de date și realizează autentificarea acestuia folosind același mecanism.
Fig. 5.7 Mecanismul de creare a token -ului și setarea acestuia în cookie
Ruta create_bot realizează crearea unui nou agent conversațional precum și
antrenarea acestuia. După identificarea utilizatorului folosind numele acestuia stocat în JWT –
ul din cookie, se crează o instanță a clasei Bots cu denumirea agentului și ID -ul utilizatorului
și se salvează în bază de date. După aceea se instanțiază agentul conversațional utilizând
clasă ChatBot din librăria Chatterbot. La instanțiere se transmit că și parametrii denumirea
noului agent, tipul bazei de date care se utilizează în stocarea cunoștințelor precum și url -ul
bazei de date. În cazul acestei aplicații, la instantierea unui nou agent se va crea o baza de
date SQLlite într -un folder de pe server. Baza de date va fi den umită după agentul
conversațional, iar folderol în care va fi stocată va avea că și denumire ID -ul utilizatorului.
Astefel bazele de date ale agenților conversaționali se vor stoca după următoarea structură:
./bots_db /ID_USER/DENUMIRE_AGENT .
După crearea a gentului se v -a realiza antrenarea acestuia. Mai întâi se vor pârșă
valorile din parametrul “knowledge” și se vor însera în graful de cunoștințe datele din setul
“corpus.english” corespunzătoare fiecărei valori din parametru. De exemplu dacă parametrul
“knowledge” conține două valori, AI și History, atunci se va instanția un obiect trainer de
tipul ChatterBotCorpusTrainer care va introduce în graful de cunoștințe seturile de date din
“corpus.english.ai” și “corpus.english.history”.
Proiect de diplomă
39
După aceea se verifică da că s-au transmis fișiere cu seturi de antrenare în requestul
POST. În cazul în care există, se vor împărții în două array -uri, unul cu fișierele de tipul
YML și unul cu cele CSV. Pentru fiecare fișier YML se va face o salvare temporară a
acestuia pe server și se va folosi un trainer(o instanță a clasei ChatterBotCorpusTrainer)
pentru salvarea seturilor de date în baza. Pentru fiecare fișier CSV se va face o salvare a
acestuia pe server și se va pârșă fiecare linie. Ultimul caracter de pe fiecare linie va fi
considerat delimitator, prima afirmație de pe fiecare linie va fi întrebarea, iar a două afirmație
răspunsul. Pentru fiecare linie se va crea un array care va conține întrebarea și răspunsul și se
va trimite că și parametru unei instanțe a clasei ListTrai ner care va realiza adăugarea acestui
set nou în graful de cunoștințe a agentului conversațional. În final se adaugă obiectul
chatbot(agentul conversațional creat) într -un array care va conține toți agenții activi, astfel la
transmiterea unei întrebări să se poată accesă agentul direct din memorie fără a fi nevoie o
nouă instanță a acestuia.
Fig. 5.8 Mecanismul de parsare a fișierului CSV și antrenare a agentului cu datele din fișier
Ruta bot, care utilizează metoda PUT, realizează actualizarea bazei de cunoștințe a
unui agent conversațional utilizând aceleași mecanisme că și cele de la crearea unui agent
nou. Funcția verifică dacă agentul conversațional este activ, adică dacă se regăsește o
referință către acesta în arra y-ul care conține agenții activi. Dacă există referință atunci
antrenarea se va face utilizând -o, iar dacă nu există se va instanția agentul .
Proiect de diplomă
40
Ruta bot, care utilizează metoda DELETE, realizează ștergerea unei agent
conversațional din baza de date. Funcția primește că și parametru ID -ul agentului
conversațional precum și ID -ul utilizatorului și prin intermediul unei instanțe a clasei Bots
realizează ștergerea acestuia din baza, apelând funcția delete .
Ruta get_user_bots utilizează clasa Bots și mecanismul O RM pentru a genera un
array cu toți agenții conversaționali din tabela bots care au ID -ul utilizatorului transmis că și
parametru în GET.
Similar rutei anterioare, get_bot_id utilizează același mecanism pentru a identifica un
agent conversațional în funcț ie de numele acestuia și ID -ul utilizatorului,
Ruta most_asked_questions identifică baza de date a agentului conversațional,
aceasta fiind stocată în folder -ul utilizatorului și sub denumirea agentului, și realizează o
conexiune utilizând librăria sqlite3 la care îi este transmisă ca și parametru un path către
fișierul SQLlite. După conectarea la baza de date se execută un query care returnează cele
mai frecvente întrebări adresate agentului conversațional precum și de câte ori au fost
adresate.
Fig. 5. 9 Mecanismul de preluare a celor mai frecvente intrebari din baza
Ruta user_bots_usage generează un array cu fiecare agent conversațional precum și
numărul de întrebări care i -au fost adresate. Funcția generează o list cu toți agenții
conversaționali ai ut ilizatorului folosind clasa Bots și mecanismul ORM și pentru fiecare
agent realizează o conexiune la baza de date SQLite a acestuia și execută o interogare care
Proiect de diplomă
41
returnează numărul de întrebări adresate. În final generează un array de obiecte cu toți agenți i
și numărul de întrebări și îl returnează sub forma unui JSON către client.
Rutele bot_usage si bot_questions realizează o conexiune la baza de date SQLite a
agentului conversațional și execută o interogare pentru a determina numărul de întrebări
adresate în fiecare lună, respectiv setul de întrebări și răspunsuri care se află în baza de
cunoștințe a agentului. În final ambele rute returnează un JSON care conțin câte un array cu
aceste informații.
Ruta send_recovery_mail identifica un utilizator prin intermediul adresei de email
trimisă ca și parametru în request -ul GET și trimite un email către acesta prin care utilizatorul
are posibilitatea de a modifica parola contului. În funcție se generează un JWT care va
conține numele utilizato rului și folosind librăria flask_mail și un template HTML se trimite
un mail care v -a conține un buton prin care utilizatorul poate accesa macheta de modificare
parolă. În momentul accesării machetei se va transmite și JWT -ul care va fi utilizat ulterior d e
către server la accesarea rutei “reset_password” pentru a valida accesul utilizatorului.
5.2.3 Generarea imaginilor Docker
Prin intermediul rutei build_docker_img se vor genera două imagini docker care vor
conține un singur agent conversațional. Prima i magine va fi formată dintr -un server Flask
care va permite accesarea agentului conversațional prin intermediul unui REST API, iar a
două va fi o aplicație care va permite interogarea agentului prin intermediul liniei de
comandă. Pentru generarea imaginilor s-a utilizat librăria “docker” din Python care permite
executarea comenzilor docker prin intermediul unei aplicații Python. Aceste două imagini vor
fi stocate într -un repository de pe Docker Hub(chatterbotadmin/bots_list) ceea ce v -a permite
accesarea ace stora utilizând comenzile docker.
Din pricina faptului că pentru a utiliza librăria “docker” din Python este necesară
instalarea serviciului Docker pe sistem -ul pe care rulează aplicația nu s -a putut realiza
generarea imaginilor pe platforma Heroku deoarec e instalarea serviciului nu este posibilă
decât prin intermediul unor dependințe care nu sunt accesibile în situația de față, în final
generarea imaginilor realizându -se doar pe mediul local.
Proiect de diplomă
42
5.3 Proiectarea frontend
Componenta frontend a fost implementată utilizând biblioteca ReactJS. Astfel fiecare
componenta din pagina web este o componentă de react care îndeplinește o anumită funcție
specifică.
Pentru această aplicație am ales să folosesc un model de arhitectură denumit Single –
Page Application. Acesta constă în creearea unei aplicații care rulează într -un browser și nu
necesită reîncărcarea paginii. Toate componentele necesare, atât fișiere Javascript și CSS,
sunt încărcate în momentul accesări. În momentul în car e un utilizator interacționează cu
aplicația, conținutul paginii web se modifică în mod dinamic. Acest lucru se realizează
utilizând funcționalitățile din ReactJs precum și API -ul de HTML5 și CSS3, iar pentru a
încărca diferite date de pe server sau altă p agina web se utilizează AJAX. Am decis să
folosesc această arhitectură deoarece este perfectă pentru crearea aplicațiilor dinamice care
nu utilizează un volum mare de date și pentru că oferă o performanță mult mai ridicată ca și
viteză de răspuns datorită faptului că toate componentele sunt încărcate la accesarea inițială.
Pentru a implementa arhitectura Single Web Page am utilizant o componentă React
denumită React Router. Această componentă permite înregistrarea tuturor rutelor și
dispunearea acestora căt re restul componentelor. Astfel la inițializarea aplicației se definesc
toate rutele disponibile precum și componenta care trebuie încărcată în momentul în care se
accesează ruta.
Un alt avantaj al acestei abordări îl constituie posibilitatea integrării unui istoric al
accesării rutelor. Astfel la fiecare accesare al unei rute definite în component a Route, se va
stoca în istoricul browser -ului această acțiune ceea ce va permite atât u tilizarea butoanelor de
Back și Forward ale browser -ului pentru a naviga în aplicație precum și stocarea în cache a
fiecărei rute împreună cu starea acesteia.
Proiect de diplomă
43
5.1.1 Inregistrare și autentificare
Aceasta este componenta care se afișează când se accesează aplicația precum și în
momentul în care utilizatorul nu are acces la aplicație deoarece token -ul acestuia a expirat sau
nu este valid. În această componentă se afișează un logo al aplicației precum și alte 3
componente diferite: LoginForm, LostForm și Regi sterForm. La un moment dat o singură
componentă din cele 3 este vizibilă, în mod implicit fiind LoginForm, celelalte fiind
accesibile prin intermediul butoanelor din partea de jos a paginii.
Fig. 5.1 Macheta de autentificare
Componenta LoginForm este cea care realizează autentificarea utilizatorului. Această
componentă trimite datele de autentificare către server printr -un request AJAX și în
momentul în care se primește un răspuns salvează ID -ul utilizatorului, token -ul de validare
csrf și redirecționează utilizatorul către pagina principală a aplicație.
Componenta RegisterForm afișează un formular care permite adăugarea unui
utilizator nou. După completarea datelor utilizatorului și acționarea butonului de înregistrare,
se trimite un re quest AJAX către server cu datele completate. Dacă se primește un răspuns de
Proiect de diplomă
44
confirmare a înregistrării utilizatorului de la server atunci se va autentifica automat acest
utilizator în aplicație și se v-a redirecționa către pagina principală.
Componenta L ostForm afișează un formular care permite recuperarea parolei. După
completarea adresei de email a utilizatorului se trimite către server această informație. Dacă
server -ul v-a găsi un utilizator în baza de date cu aceași adresă de email atunci va trimite un
mail către acesta cu un link care va permite accesarea unui formular de modificare a parolei.
Componenta ChangePassword afișează un formular care permite modificarea parolei.
Accesarea acestei componente se realizează prin link -ul trimis pe email în momentul resetarii
parolei. După completarea noii parole s e va trimite către server parola completată împreună
cu un JWT care este înglobat în url -ul prin care se accesează această component ă. Pe server
se v-a valida JWT -ul și se va extrage ID -ul utilizato rului din acesta, iar în final se va modifica
în baza de date parola utilizatorului cu cea introdusă în formular.
5.1.2 Accesare resurse
Aceasta este componenta principală a aplicației. Din această componentă se pot
accesa toate resursele aplicației pre cum crearea unui agent conversațional, vizualizarea
statisticilor, administrarea unui agent conversațional și utilizarea unui agent prin interfața
conversațională. Această componentă este formată din 3 componente principale:
NavigationBar, Bot, Chatbot.
Componenta NavigationBar permite navigarea prin aplicație, dispunând de butoane
pentru accesarea paginii principal e, paginii de creare a unui agent conversațional precum și
paginilor de administrare a utilizatorului.
În componenta Main este afișată lista de agenți conversaționali care au fost creați de
către utilizatorul curent. Aceștia sunt afișați sub forma unor componente Bot. Această
componența este reprezentarea unui agent conversațional și permite apelarea și accesarea
unor funcții și caracteristici ale acestora precum ștergerea unui agent, accesarea listei de
cunoștințe, exportul că și container Docker, vizualizarea statisticilor agentului conversațional
și activarea acestuia pentru comunicare.
Proiect de diplomă
45
Fig. 5.2 Reprezentarea unui agent conversational
Com ponenta Chatbot reprezintă o interfață conversațională care permite comunicarea
cu un agent conversațional. În momentul în care se activează un agent conversațional din
listă, prin apăsarea butonului Toggle Bot On, se va transmite ID -ul agentului către ace astă
componentă, astfel făcând posibilă comunicarea prin intermediul interfeței cu agentul. În
momentul în care se deschide interfața conversaționala, se transmite prin AJAX un request
care conține ID -ul agentului și mesajul „Hello”, ulterior răspunsul fii nd afișat în interfață ca
și mesaj provenit de la agent. Atunci când un utilizator introduce o întrebare sau o afirmație
în interfață, aceasta este transmisă către server printr -un request AJAX împreună cu ID -ul
agentului conversațional, iar la primirea ră spunsului de pe server se va afișa în lista de mesaje
răspunsul. Fiecare mesaj din lista este o componentă de React cu două proprietăți: mesajul și
clasa css pentru aliniere. Mesajul este textul care se afișează în listă, iar clasa css pentru
aliniere indi că de la cine provine mesajul, mesajele de la agentul conversațional fiind afișat
diferit față de cel de la utilizator. De asemenea în momentul în care utilizatorul introduce
mesajul precum și timpul în care se așteaptă răspunsul de la server pentru întreb area introdusă
se afișează o animație CSS realizată prin scalarea de la 0% la 100% a trei elemente div în
mod progresiv.
Proiect de diplomă
46
Fig. 5.3 Interfata convers ațională
5.1.3 Creare agenti
În această componentă se afișează formularul pentru adăugarea unui agent
conversațional nou. Prin intermediul acestui formular se pot defin ii denumirea agentului
conversaational, un set de cunoștințe predefinite din setul de date corpus.english precum și
diferite seturi de întrebări și răspunsuri, acestea fiind încărcate sub formă de fișiere CSV și
YML. După ce s -au introdus toate datele neces are pentru crearea agentului, se va face un
request AJAX de tipul post care va conține aceste informații. Requestul va trebui să includă
un antet suplimentar denumit „X -CSRF -TOKEN” care va conține token -ul pentru validarea
identității utilizatorului. De as emenea parametrul withCredentials va fi obligatoriu pentru că
request -ul să includă și cookie -ul care conține JWT -ul. Dacă se crează agentul conversațional
cu succes, la primirea răspunsului de pe server se v-a face o redirecționare către pagina
principală unde se va afișa în listă și noul agent.
5.1.4 Statistica agent
Această componentă realizează afișarea statisticilor de utilizarea ale unui singur agent
conversațional. Componenta primește că și parametru ID -ul unui agent conversațional și
trimite trei request -uri AJAX de tipul GET către server pentru a încărca detalii de utilizare ale
Proiect de diplomă
47
agentului precum cele mai frecvente întrebări, cele mai frecvente subiecte și numărul de
accesări ale agentului în fiecare luna a anului curent. Afișarea acestor statisti ci se realizează
utilizând componente din bibliotecă react -chartjs -2. Aceasta afișează diferite diagrame
utilizând componente canvas și API -ul Javascript și HTML5.
Fig. 5.4 Statistica unui agent conversational
5.1.5 Administrare agent
În această componentă se afișează o lista cu toate întrebările și răspunsurile din bază
de cunoștințe ale agentului conversațional. Acest lucru se realizează prin transmiterea unui
request AJAX către server care va returna un array de întrebări și răspunsuri. Acest array se
va seta ca și o proprietate a component ei, astfel în momentul în care se adaugă o întrebare și
un răspuns nou în array, DOM -ul prin intermediul React -ului se va reafisa. De asemenea se
afișează o componenta care permite introducerea de noi întrebă ri și răspunsuri în bază de
conostinte ale agentului prin intermediul unei interfețe conversaționale. În momentul în care
se deschide interfață, se va afișa un mesaj care va indica introducerea unei afirmații sau
întrebări. După ce utilizatorul introduce a firmația se va afișa un alt mesaj pentru a introduce
răspunsul. În final după introducerea răspunsului se va trimite către server întrebarea și
răspunsul introdus de către utilizator, precum și ID -ul utilizatorului și a chatbot -ului, și se va
salvă în bază de date a agentului conversațional setul nou de date. La primirea răspunsului de
Proiect de diplomă
48
pe server se va adaugă în listă de întrebări și răspunsuri de pe pagină noul set și se va reluă
procesul de adăugare din interfața conversațională prin afișarea mesajului de introducere a
unei întrebări noi.
5.1.6 Statistic ă utilizator
Această componentă realizează afișarea statisticilor de utilizare ale tuturor agenților
conversaționali pe care i -a creat utilizatorul. În momentul în care se montează componentă, se
va trimite un request AJAX către server care va returna un array cu toți agenții
conversaționali ai utilizatorului curent precum și numărul de accesări ai fiecăruia. După
primirea răspunsului se va defini un set de proprietăți care se vor transmite unei compo nente
pentru afișarea diagramei de utilizare.
5.4 Deployment
Pentru a realiza deployment -ul pe platforma Heroku, atât aplicația React cât și server –
ul Flask au fost găzduite pe platforma Github. Pentru fiecare aplicație s -a creat o aplicație pe
platforma Heroku și s -au conectat aceste aplicații cu repository -urile de pe Github.
Pentru aplicația Flask au fost generate două fișiere suplimentare. Primul fișier,
requirements.txt, conține toate dependințele aplicației precum și versiunile acestora. Acest
fișier a fost generat automat utilizând comandă “pip freeze>requirements.txt” din terminal -ul
python. Această comandă execută un process care citește versiunite tuturor dependințelor din
mediul virtual al aplicației și generează un fișier cu fiecare dependință din acest mediu .
Al doilea fișier este un fișier txt denumit Procfile. Acesta este fișierul care se execută
de către sistemul de pe platforma Heroku în momentul în care se pornește aplicația Flask.
Acest fișier conține trei comenzi, două dintre acestea fi ind executate înainte ca aplicația să
pornească. Comenzile “python app.py db init” și “python app.py db upgrade” se execută în
etapa de release a aplicației. Aceste două comenzi verifică dacă în fișierul “app.py” există
clase ORM și sincronizează baza de d ate PostgreSQL cu aceste clase. Astfel în cazul în care
se modifică structura bazei de date, trebuie doar modificate clasele aferente tabelelor, iar
Proiect de diplomă
49
sincronizarea efectivă a bazei se va realiza în momentul executării acestor două comenzi.
Ultima comandă “g unicorn app:app” indică aplicația și fișierul care se vor executa pentru a
porni aplicația, utilizând server -ul HTTP Gunicorn pentru aplicații WSGI .
Proiect de diplomă
50
Proiect de diplomă
51
Capitolul 6. Testare și Validare
În acest capitol se vor prezenta modalitățile de testare și de validare care s -au utilizat
pe parcursul dezvoltării aplicației. Testarea aplicației a fost realizată în paralel cu
implementarea acesteia astfel asigurând funcționalitatea corectă a fiecărei c omponente înainte
de a începe dezvoltarea altor componente.
Testarea rutelor din serviciul REST s -a realizat manual pentru fiecare dintre ele.
Pentru aceasta am utilizat un program utilitar denumit Postman care oferă posibilitatea
transmiterii de requ esturi utilizând toate metodele HTTP (GET, POST, PUT, DELETE,
OPTIONS) împreună cu parametrii necesari.
6.1 Black box testing
Testarea de tipul black box se realizează atunci când tester -ul nu dispune de acces la
codul sursă al aplicației, astfel el testând aplicația în funcție de specificațiile și documentațiile
acesteia. În cazul aplicației curente testarea black box s -a realizat prin utilizarea și validarea
aplicației de administrare. Prin această metodă s -au testat mecanismele de autentificare,
înregistrare, resetarea parolei precum și funcționalitățile agenților conversaționali cum ar fi
adăugarea unui nou agent cu unul sau mai multe seturi de date, interactionarea cu acesta prin
intermediul interfeței conversaționale, vizualizarea statisticilor ș i actualizarea bazei de
cunoștințe a unui agent utilizând interfața conversațională. Aceste teste s -au realizat utilizând
mai multe scenarii și seturi de date, de exemplu pentru adăugarea unui nou agent
conversatinal s -au utilizat mai multe seturi de date de dimensiuni diferite. În final s -au
verificat și mecanismele de validare din interfață, cum ar fi validarea completării parolei,
email -ului și a numelui utilizatorului în formularul de adăugare, completarea numelui
agentului conversatinal la adăugare pre cum și accesarea interfeței conversaționale în
momentul în care nici un agent nu este activ.
Proiect de diplomă
52
6.2 White box testing
Testarea de tipul white box se realizează atunci când tester -ul are acces la codul sursă
al aplicației și poate crea diferite scenarii de testare în funcție de ramificațiile din cod.
Această testare s -a realizat în momentul în care s -au trimis request -uri utilizat utilitara
Postman. Pentru fiecare rută s -au generat mai multe request -uri cu diferite seturi de
parametrii astfel validându -se câ t mai multe scenarii de utilizare posibile.
Proiect de diplomă
53
Capitolul 7. Manual de Instalare și Utilizare
În acest capitol sunt prezentați pașii necesari pentru instalarea și utilizarea aplicației
dezvoltate precum și a resurselor necesare pentru a realiza acest lucru .
7.1 Resurse necesare
Datorită faptului că pentru dezolvatarea acestei aplicații s -a utilizat un serviciu cloud
atât pentru server cât și pentru aplicația de administrare și baza de date, aceste resurse sunt
disponibile pentru utilizare în orice moment. Dacă se dorește utilizar ea interfeței
conversaționale create pentru aplicația de administrare atunci în aplicația web este nevoie de
descărcarea și includerea unui kit de integrare care conține un fișier Javascript și un fișier
CSS, acestea fiind disponibile pe Github.
În ca zul în care se dorește instantierea acestor aplicații pe mașini locale, acest lucru
este posibil utilizând sursele disponibile în repository -ul de pe Github. Pentru a utiliza
aplicația Flask este necesară instalarea unei versiuni de Python, de preferat ver siunea 3.7.1
sau mai nouă, împreună cu o bază de date PostgreSQL, iar pentru utilizarea aplicației de
administrare este necesară instalarea unei versiuni de NodeJs pe mașină.
7.2 Instalare aplica ție
Pentru a instala aplicația server pe o mașină locală est e necesar în primul rând
descărcarea fișierelor de pe Github. După descărcare se va deschide un command line în
radacina proiectului. Aici se va executa comanda „pip install –r requirements.txt”, care va
instala dependințele necesare pentru a rulă aplicația. După instalare se va executa comânda
„python.exe –m flask run” pentru a porni server -ul Flask, acesta fiind disponibil pe portul
5000 al mașinii. De asemenea înainte de a rula aplicația este necesară crearea unei baze de
Proiect de diplomă
54
date PostgreSQL și modificarea parametriilor de conectare din fișierul app.py (app.config
["SQLALCHEMY_DATABASE_URI"] ) .
Pentru instalarea aplicației de administrare local, este nevoie de descărcarea fișierelor
de pe Github și salvarea acest ora într -o locație pe disc. După descărcare se deschide un
command line în folder -ul proiectului și se apelează comanda „npm install” care va instala
toate dependințele necesare pentru a porni aplicația. După instalarea dependințelor se poate
rula comanda „npm start” care va porni aplicație pe portul 3000 al mașinii.
Pentru a integra interfața conversațională într -o aplicație sau pagină web este
necesară includerea unor librării Javascript și fisere CSS în pagină HTML în care se dorește
afișarea.
<head >
<link rel="stylesheet"href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1 /js/bootstrap.min.js"></script>
<link rel=" stylesheet" type="text/css" hre= "main.css ">
</head>
<body>
<span>Html page</span>
<div id='chatbot_room'>
</div>
<!– Load React. –>
<!– Note: when deploying, replace "development.js" with "production.min.js". –>
<script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>
<script src="https://unpkg.com/react -dom@16/umd/react -dom.development.js" crossorigin></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.min.js"></script>
<!– Load our React component. –>
<script src="chatroom. js"></script>
</body>
Fișierele „main.css” și „chatroom.js” sunt disponibile pe Github împreună cu sursele
aplicației de administrare. Pentru autentificarea în serviciul rest precum și apelarea unui agent
Proiect de diplomă
55
conversațional este necesară executarea unui requ est către ruta „login”, ceea ce va seta
cookie -urile cu token -urile de autentificare, iar apoi executarea diferitelor request -uri către
serviciul REST pentru a utiliza agentul conversațional. Aceste request -uri pot fi apelate atât
dintr -o simplă aplicație web prin intermediul apelurilor AJAX cât și utilizând diferite utilitare
precum Postman.
7.3 Utilizare
După realizarea autentificării prin intermediul serviciului REST, se pot accesa agenții
conversaționali utilizând interfața conversațională sau prin intermediul apelurilor AJAX
realizate către serviciu.
Pentru utilizarea aplicației de administrare est e necesară crearea unui utilizator. Acest
lucru se poate realiză folosind macheta Register de pe pagina principală a aplicației. După
autentificare utilizatorul poate crea un set de agenți conversaționali utilizând machetă „Create
new bot” disponibilă în p artea de sus a aplicației. În această machetă utilizatorul trebuie să
introducă un nume agentului conversațional și unul sau mai multe seturi de date prin
intermediul fișierelor CSV și YML sau prin intermediul selectorului „Knowledge” care
conține mai mult e seturi de date predefinite. După crearea agentului se poate interacționa cu
acesta utilizând butonul „Toggle Bot On” din dreptul numelui și folosind interfață
conversaționala din partea de jos a paginii. Utilizatorul poate de asemenea să vizualizeze
setul de date al agentului conversațional precum și să adauge seturi noi de întrebări și
răspunsuri utilizând interfața conversațională din macheta „Questions List” accesibilă din
dreptul agentului.
Proiect de diplomă
56
Proiect de diplomă
57
Capitolul 8. Concluzii
În acest capitol sunt prezentate realizările proiectului precum și posibilele dezvoltări
și îmbunătățiri ulterioare .
8.1 Obiective realizate
Sistemul implementat a atis scopurile propuse inițial, acesta fiind un framework care
permite crearea, administrarea și dispunerea de agenți conversaționali prin intermediul unui
serviciu REST.
Atât obiectivele principale cât și cele secundare au fost realizate, deoarece s -a reușit
implementarea unei interfețe de administrare care permite gestionarea utilizatorilor și a
agenților conversaționali, toate resursele aplicației precum și agenții conversaționali sunt
disponibili printr -un API REST care este protejat folosind un mecanism de securitate bazat pe
JWT și cookie -uri, agenții conversaționali pot fi antrenați ulterior prin intermediul serviciului
și interfața conversațională poate fi integrată în diferite aplicații și site -uri web prin
intermediul un ui kit javascript .
8.2 Dezvolt ări ulterioare
Anumite dezvoltări ulterioare pot fi realizate pentru a îmbunătății atât experiența
utilizatorilor în momentul utilizării unui agent conversațional cât și pentru a optimiza
interfața de administrare și serviciul REST precum:
Realizarea unei interfețe conv ersaționale compatibilă cu aplicațiile mobile
Implementarea unui engine de chatbot mai avansat utilizând algoritmi de machine
learning mai complcsi
Posibilitatea antrenării agenților cu mai multe tipuri de seturi de date(JSON -uri,
fișiere de alte formate etc.)
Proiect de diplomă
58
Proiect de diplomă
59
Bibliografie
[1] C. Grosan, A. Abraham Intelligent Systems – A modern approach, Library of
Congress 2011 Springer -Verlag Berlin Heidelberg
[2] Brian Cantor, Special report: The state of chatbots , 22 Martie . 201 9. Online :
https://www.customercontactweekdigital.com
[3] Yahya Al -Dhuraibi, Fawaz Paraiso, Nabil Djarallah, Philippe Merle – Elasticity in
Cloud Computing: State of the Art and Research Challenges
[4] Future of cloud computing, 24 Aprilie. 2019 . Online :
https://www. futureofeverything.io/
[5] Future of machine learning , 22 Aprilie. 2019 . Online :
[6] RestApi for Cloud Computing, 5 Mai 2019 Online :
https://developer.ibm.com/
[7]Understanding database sharding, 5 Mai 2019 Online:
https://www.digitalocean.com
[8] Cross Site Request Forgery, VULNERABILITY OVERVIEW – WHITE PAPER,
Acadion Security, 2013
[9] Mihaela Colhon: Computational Linguistic Introduction, 11 Iunie 2019 Online :
http://inf.ucv.ro/documents/ghindeanu/Curs%2014.pdf
[10] Adela Muresan: Clasificarea automata a textelor folosind tehnici de procesare a
limbajului natural, 11 Iunie 2019 Online:
https://www.todaysoftmag.ro/article/2463/clasificarea -automata -a-textelor -folosind -tehnici –
de-procesare -a-limbajului -natural
[11] The Jaccard Similarity algorithm, 15 Iunie 2019 Online:
https://neo4j.com/docs/graph -algorithms/current/algorithms/similarity -jaccard/
[12] Nikhil Babar: The Levenshtein Distance Algorithm, 20 Iunie 2019 Online :
https://dzone.com/articles/the -levenshtein -algorithm -1
[13] Anthony Accomazzo , Murray Nathaniel , Nate Murray , Ari Lerner , Clay
Allsopp , David Guttman (Computer software developer) , Tyler McGinnis : Fullstack React:
The Complete Guide to ReactJS and Fri ends, ISBN 0991344626, 9780991344628
[14] Christopher Pitt: React Components, 2016, ISBN 1785883720, 9781785883729
[15] Bradley Efron , R.J. Tibshirani : An Introduction to the Bootstrap, Springer, 1995
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Programul de studii: Calculatoare [617241] (ID: 617241)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
