
Aasta tagasi pöördus meie armast HR osakond palvega: kirjutada vestlusrobot, mis aitab uutel töötajatel ettevõttesse sisse elada.
Mainime, et me ei arenda oma tooteid, kuid pakume klientidele täiustatud arenduste teenuseid. Jutt käib meie sisemisest projektist, mille tellijaks ei ole kolmas osapool, vaid meie oma HR. Peamine ülesanne oli piiratud inimressursside, aegade ja vahenditega projekt õigeaegselt lõpetada ja toode väljastada.
Alustame ülesannete kirjeldamisest, mille lahendamine oli vajalik.
Arendajad on enamasti introverdid ja ei armasta vestelda; palju lihtsam on kirjutada oma küsimus elektroonilisse vestlusesse. Robotiga ei pea mõtlema, kellelt küsida, kellele helistada, kuhu minna ja kus teavet otsida, ning kas see on ikka asjakohane.
Teine probleem on teave - seda on palju, see on erinevates allikates, mitte alati kergesti kättesaadav ning vajab pidevat täiustamist ja värskendamist.
Ettevõttes on peaaegu 500 töötajat, kes asuvad erinevates kantseleides, ajavööndites, Venemaa linnades ja isegi välismaal. Küsimusi on tavaliselt palju, seetõttu on veel üks ülesanne — vähendada HR personali koormust, mis on seotud töötajate kõige sagedamini esitatud küsimustega.
Samuti oli vajalik automatiseerida protsessid: uute töötajate saabumine ettevõttesse, sõnumite saatmine juhtidele ja uute töötajate mentoritele, automaatsete meenutuste saatmine kursustest ja testidest, mis tuleb uuel töötajal läbida edukaks kohanemiseks.
Ärivajaduste põhjal koostati tehnilised nõuded.
Robot peab töötama Skype'i baasil (ajalooliselt kasutavad nad seda ettevõttes), seetõttu valiti Azure'i teenus.
Sellele juurdepääsu piiramiseks hakkasime kasutama Skype'i kaudu autoriseerimise mehhanismi.
Teksti tuvastamiseks kasutasime raamatukogu ParlAI.
Samuti on vajalik administratiivne veebipool, et seadistada, koolitada, siluda, seadistada ja muid ülesandeid täita.

Projekti käigus kohtasime mitmeid probleeme ja keerukusi.
Näiteks oli tehnilisi probleeme - Azure'i kontoga. Microsoft ei soovinud kuidagi meie tellimust aktiveerida mingi tehnilise keerukuse tõttu nende teenuses. Peaaegu kaks kuud ei saanud me sellega midagi teha, Microsofti tugi pani lõpuks käed üles ja saatis meid partnerite juurde, kes kõik edukalt seadistasid ja meile konto väljastasid.
Projekti alustamine oli kõige keerulisem etapp, kui tuli valida, mida me kasutame, milline arhitektuur on, kuidas ja kus andmeid hoida ning kuidas süsteemi komponendid ja moodulid omavahel suhtlevad.
Meie puhul raskendasid tavalised probleemid mis tahes projekti alguses töötajate oskuste puudumine. Meie äri eripära seisneb selles, et erinevalt kommertstegevusest, töötavad sisuprojektide kallal sageli arendajad, kellel ei ole piisavalt teadmisi vajalikest valdkondadest – nad on lihtsalt müütilise saatuse tõttu sattunud pingile ootama järgmist suurt ägedat kommertshanket. On loomulik, et motivatsioon selles olukorras oli samuti keeruline. Tootlikkus langes madalale, meeskonnas toimusid sagedased seisakud, mistõttu tuli inimesi veenda (motiveerida) või vahetada. Arendaja vahetamisel tuleb läbi viia koolitus, edastada teadmisi ja sisuliselt alustada projekti uuesti. Iga uus arendaja nägi arhitektuuri oma vaatenurgast ja kritiseeris eelnevaid tehtud otsuseid ja välise koodi. Algas kirjutamine nullist.
See kestis umbes kuus kuud. Me lihtsalt keksisime paigal, refaktoreerisime koodi ja ei kirjutanud midagi uut.
Sisekeskkonnas on tavaliselt peaaegu mitte mingit dokumentatsiooni ja on keeruline mõista, mida igas hetkes teha, ning millised on praegused prioriteedid. Oluline oli luua püsiv meeskond, korraldada protsessid ning planeerida ja hinnata vähemalt kolmeks kuuks. Kuid kuidas seda teha, kui projekt ei ole äriline, mis tähendab, et tööaega tuleb investeerida minimaalselt ning samal ajal tulemus peab olema parem kui välismaiste klientide jaoks?
Oleme määratlenud ressursside komplekti, kes osalesid projekti arendamises, tunnevad seda ja soovivad sellega töötada. Koostasime inimeste ajakava projektides. Viisime läbi tööde hindamise ja kooskõlastamise ning kirjutasime need tööd peamiste projektide vahepealsetesse "aukudesse". Nelja kuu pärast saime töötava rakenduse prototüübi.
Nüüd räägime bot'i funktsionaalsusest, arhitektuurist ja tehnilistest lahendustest.
Üheks põhiliseks nõudmiseks HR-ilt oli teksti tuvastamine, mille kasutaja on kirjutanud, et anda õige vastus küsimusele. Kasutaja võib kirjutada — "ma tahan minna puhkusele", "tahan puhkusele" või "minna puhkusele", ja bot mõistab ning vastab vastavalt. Või kui töötaja tahab öelda, et tool on katki, ja kirjutada — "tool on katki" või "minu tool on pragunenud" või "toolilt on seljatugi ära tulnud", siis korralikult koolitatud bot suudab selliseid päringuid tuvastada. Teksti tuvastamise kvaliteet sõltub loomulikult boti koolitusest, millest me räägime hiljem.
Järgmine nõue ja funktsionaalsuse osa on boti dialoogisüsteem. Arendatud on süsteem, mille kohaselt bot suudab dialogi pidada ja mõista praeguse küsimuse konteksti. Ta võib vastuseks teie küsimusele esitada täiendavaid küsimusi ja jätkata vestlust, kui oleme boti selleks koolitanud. Skype toetab lihtsaid menüüpunkte, et juhendada kasutajaid võimalike dialooge jätkama. Kui oleme vestluse käigus järginud teemat, kuid otsustame esitada küsimuse, mis pole seotud, siis mõistab bot ka seda.
Bot võimaldab saata kasutajale erinevaid artefakte, tuginedes tema isiklikele andmetele, nagu tema asukoht. Näiteks, kui inimene soovib leida tualetti, siis näidatakse talle kontori kaarti, mis juhatab teda tualetti. Ja kaart valitakse sõltuvalt sellest, millis kontor on töötajal.
Üks olulisemaid ülesandeid on kaitsta kasutajate isikuandmeid. Me ei saa lubada, et igaühel oleks juurdepääs konfidentsiaalsetele andmetele, millega meie bot tegeleb. Autoriseerimine on selle boti tuntud osa. Bot palub kasutajal läbida autoriseerimise enne, kui ta saab temaga mingit dialogi pidada. See toimub, kui töötaja pöördub esmakordselt boti poole. Autoriseerimine suunab kasutaja vastavale lehele, kus kasutaja saab tokeni, mille ta seejärel paigutab Skype'i sõnumisse. Kui autoriseerimine läheb edukalt läbi, saab alustada suhtlemist botiga.

Autoriseerimine toimub Skype'i — autoriseerimisteenuse, ettevõtte võrgustiku ja LDAP kaudu. Seega sõltub autoriseerimine praegustest kasutajaandmetest ettevõtte võrgustikus.
Boti arendamise protsessis mõistsime, et on vajalik teatud süsteem, mis oleks integreeritud portaali funktsionaalsusesse, et aidata värbamistöötajatel boti kiiret tõrgete avastamist. Lisame sellele portaali lehe, kus värbajad saavad näha kasutajate registreeritud vigu boti kasutamise käigus ja lahendada need kas uuendades boti või edastades arendajatele.
Boti väljaõpe otse portaali läbi ei olnud algselt planeeritud. Arendamise käigus mõistsime, et boti õpetamine on kõige sagedasem ülesanne, mida HR osakonna töötajad selle kasutamisel teevad, ning arendajatele tekstifailide saatmine täiendusõppe jaoks on absoluutselt vastuvõetamatu. See võtab liiga palju aega ja toob liiga palju vigu ja probleeme.

Oleme loonud portaalis kasutajasoovide järgi kohandatud boti õpetamise kasutajaliidese. See võimaldab personaliosakonnal näha botiga seotud koolitusi, täiendama seda ja teha kohandusi jooksva koolituse osas. Koolitus on esitatud puu-struktuuri kujul, kus sõlmed, st oksad, on dialooge botiga. Saate luua lihtsaid küsimusi ja vastuseid või ulatuslikke dialooge, kõik sõltub personaliosakonnast ja nende vajadustest.
Veidi lahenduse arhitektuurist.

Lahenduse arhitektuur on modulaarne. See sisaldab teenuseid, mis vastutavad erinevate ülesannete eest, nimelt:
• Azure'i Skype'i boti teenus — võtab vastu ja töötleb kasutajate päringuid. See on piisavalt lihtne teenus, mis esimesena võtab päringu vastu ja teostab selle esialgse töötlemise.
• Administraatori portaal — teenus, mis pakub veebiliidest portaali ja boti seadistamiseks. Bot pöördub alati kõigepealt portaali poole, ja portaal otsustab juba, kuidas päringuga edasi minna.
• Autentimisteenus — tagab autentimismehhanismid botile ja administreerimise portaalile. Autentimine toimub Oauth2 protokolli kaudu. Positiivse autentimise korral viib teenus läbi autentimise ettevõtte võrgus vastavalt kehtivatele kasutajaandmetele, et süsteem saaks kontrollida andmete desünkroonimisega seotud vigu.
• AI tekstituvastusmodul, kirjutatud Pythonis ja kasutab ParlAI raamistikku teksti tuvastamiseks. See on närvivõrk, vähemalt praeguses rakenduses. Kasutame küsimuste mõistmiseks algoritmi tfDiff. Modul pakub API-d suhtlemiseks ja õppimiseks.
Kokkuvõttes tahan öelda, et see on meie esimene kogemus chatbot’i loomisel ja püüdsime teha süsteemist võimalikult lihtsa, kuid samas funktsionaalse, minimaalsete tööjõukuludega. Arvan, et meil on õnnestunud luua üsna huvitav toode. Oma õppe-, vigade logimise süsteemiga ja teadete saatmise võimalustega on seda võimalik integreerida ka teistega messengereid.
Allikas: habr.com
