
Aasta tagasi pöördus meie kallis HR-osakond palvega: kirjutada vestlusrobot, mis aitaks uustulnukate kohanemisel ettevõttes.
Kinnitame, et me ei arenda oma tooteid, kuid pakume klientidele täielikku teenuste spektrit arenduse osas. Jutt käib meie sisemisest projektist, mille tellijaks ei ole kolmas ettevõte, vaid meie enda HR. Peamine ülesanne on piiratud inimeste, ressursside ja aja puhul projekt õigeaegselt lõpule viia ja toode välja anda.
Alustuseks kirjeldame ülesandeid, mida tuli lahendada.
Arendajad on enamasti introverdid ja ei armasta rääkida, neid on oluliselt lihtsam kirjutada oma küsimus elektroonilisse vestlusesse. Vestlusrobotiga ei pea mõtlema, kellelt küsida, kellele helistada, kuhu minna ja üldiselt, kust teavet otsida ning kas see on asjakohane.
Teine probleem on teave — seda on palju, see on erinevates allikates, mitte alati saadaval ning vajab pidevat täiendamist ja ajakohastamist.
Ettevõttes on peaaegu 500 töötajat, nad asuvad erinevates kontorites, ajavööndites, Venemaa linnades ja isegi välismaal, küsimusi on tavaliselt väga palju, seega on veel üks ülesanne — vähendada HR personali koormust seoses töötajatelt esitatavate sagedaste küsimustega.
Oli vajalik automatiseerida protsessid: uustulnukate sisenemine ettevõttesse, sõnumite edastamine uustulnukate juhtidele ja mentoritele, automaatsete meeldetuletuste saatmine kursustest ja testidest, mis uustulnuk peab edukaks kohandumiseks läbima.
Ärivajadustest lähtudes on välja töötatud tehnilised nõuded.
Robot peab töötama Skype'i põhjal (ajalooliselt on see ettevõttes kasutusel), seega valiti teenus Azure'is.
Juurdepääsu piiramiseks hakkasime kasutama Skype'i kaudu autentimise mehhanismi.
Teksti tuvastamiseks kasutasime raamatukogu ParlAI.
Samuti oli vajalik administraatori veebipood nende seadistamiseks, koolitamiseks, tõrkeotsimiseks, sõnumite seadistamiseks ja muude ülesannete täitmiseks.

Projekti käigus kokku puutunud mitmete probleemide ja raskustega.
Näiteks, oli tehnilisi probleeme Azure'i kontoga. Microsoft ei soovinud meie tellimust aktiveerida mingite tehniliste raskuste tõttu nende teenuses. Peaaegu kaks kuud ei saanud me sellega midagi ette võtta, Microsofti tugi viskas lõpuks käed üles ja saatis meid partnerite juurde, kes kõik edukalt seadistavad ja andsid meile konto.
Kõige keerulisem etapp oli projekti käivitamine, kui tuli valida, mida kasutada, milline saab olema arhitektuur, kuidas ja kus andmeid hoida ning kuidas süsteemi komponendid ja moodulid omavahel suhtlevad.
Meie puhul raskendasid oma algsete probleemide tõttu, millega iga projekti käivitamisel silmitsi seisame, staažide puudumine. Meie äri spetsiifika on selline, et erinevalt kommertsprojektidest töötavad sisuprojektide kallal sageli arendajad, kellel puuduvad vajalikud teadmised vajalikes valdkondades – nad sattusid lihtsalt saatuse tahtel ootama järgmist suurt ja ägedat kommertsprojekti. On loogiline, et motivatsiooniga seoses on asjad sellistes olukordades üsna rasked. Tootlikkus langeb madalaks, tiimis on sageli seisak, ja lõpuks tuleb inimesi veenda (motiveerida) või vahetada. Arendaja vahetamisel tuleb läbi viia koolitus, edastada teadmisi ja põhimõtteliselt uuesti projekti alustada. Iga uus arendaja nägi arhitektuuri oma moodi ja kritiseeris eelnevaid nende tehtud otsuste ja kellegi teise koodi tõttu. Kätketi nullist ümberkirjutamist.
Nii kestis see umbes kuus kuud. Me lihtsalt liiklesime kohapeal, refaktoreerisime koodi ja ei kirjutanud midagi uut.
Samuti ei ole sisuprojektides, reeglina, peaaegu mingit dokumentatsiooni, ja oli raske mõista, mida iga hetk teha, ja millised on hetked prioriteedid. Oli vajalik luua stabiilne meeskond, korraldada protsessid, planeerida ja hinnata vähemalt kolme kuu jooksul. Kuid kuidas seda teha, kui projekt ei ole kommertsialiseeritud, ja see tähendab, et inimtöötunde tuleb investeerida minimaalselt ja samal ajal saada tulemus, mis pole halvem kui välisosakonnale?
Me oleme määratlenud ressursikogumi, kes osalesid projekti arendamises, tunnevad seda ning soovivad selle kallal töötada. Koostasime inimeste tööde ajakava projektides. Teostasime tööde hindamise ja kooskõlastamise ning sisestasime need tööd peamiste projektide vahele. Nelja kuu pärast saime töötava rakenduse prototüübi.
Nüüd räägime põhjalikumalt boti funktsionaalsusest, arhitektuurist ja tehnilisest lahendustest.
Üks HRi peamisi nõudeid oli kasutaja kirjutatud teksti äratundmine, et anda õige vastus küsimusele. Temale võib kirjutada — tahan minna puhkusele, tahaks puhkusele või läheks puhkusele, ja ta mõistab ning vastab vastavalt. Või kui töötaja tool on katki ja ta soovib kirjutada — "tool on katki" või "Minu tool krõbiseb" või "Tooli seljatugi kukkus alla", siis õigesti koolitades tunneb bot selliseid päringuid ära. Teksti äratundmise kvaliteet sõltub loomulikult boti koolitusest, millest räägime hiljem.
Järgmiseks nõudmiseks ja osaks funktsionaalsusest on boti dialoogide süsteem. Koostati süsteem, kus bot suudab dialooge pidada ja mõista praeguse küsimuse konteksti. Ta võib teie küsimusele vastates esitada täiendavaid küsimusi ja vestlust jätkata, kui oleme botile seda õpetanud. Skype toetab lihtsaid menüüpunkte, et suunata kasutajaid dialooge jätkama. Samuti, kui oleme dialooge pidanud, kuid otsustame esitada küsimuse teema kõrvalt, mõistab bot ka seda.
Bot võimaldab saata kasutajale erinevaid artefakte, lähtudes tema isiklikest andmetest. Näiteks tema asukohast. Oletame, et kui inimene soovib leida tualetti, siis kuvatakse talle kontori kaart, mis juhatab teda tualetti. Ja kaart valitakse sõltuvalt sellest, millises ettevõtte kontoris töötaja viibib.
Üks olulisemaid ülesandeid on kasutajate isikuandmete kaitsmine. Me ei saa lubada, et igaüks pääseb ligi meie boti käsutuses olevatele konfidentsiaalsetele andmetele. Sellise boti autoriseerimise vajadus on selle lahutamatu osa. Bot palub kasutajal autoriseerida end enne, kui ta saab temaga mingit dialooge alustada. See juhtub esmakordsel töötaja pöördumisel boti poole. Autoriseerimine suunab kasutaja vastavale leheküljele, kus kasutaja saab pääsukoodi, mille ta seejärel kleepib Skype'i sõnumisse. Kui autoriseerimine on edukas, saab alustada suhtlemist botiga.

Autoriseerimine toimub Skype'i kaudu - portaalautentimiseteenus, ettevõtte võrk ja LDAP. Seega sõltub autoriseerimine kehtivatest kasutajaandmetest ettevõtte võrgus.
Boti arendamise käigus mõistsime, et on vajalik mingi süsteem, mis on integreeritud portaali funktsionaalsusesse, et aidata HR-il boti kiiret tõrkeotsingut teostada. Me lisasime portaali lehe, kus HR-d saavad näha kasutajate poolt boti kasutamisel fikseeritud vigu ja lahendada need kas ümberõppe abil või jätta arendajatele.
Boti koolitamise võimalus otse portaali ei olnud algselt kavandatud. Arendamise käigus mõistsime, et boti õpetamine on kõige sagedasem ülesanne, mida HR-i töötajad selle kasutamisel teevad, ja edastada tekste arendajatele boti täiendavaks koolitamiseks on täiesti vastuvõetamatu. See võtab liiga palju aega ja tekitab liiga palju vigu ja probleeme.

Meie lõime portaali kasutajaliidese kasutajasõbralikuks boti õpetamiseks. See võimaldab HR-l näha boti praegust koolitust, seda täiendada ja praegust õpetust kohandada. Koolitus on esitatud puustruktuurina, kus sõlmed, st harud, on dialooge boti jätkamiseks. Võib luua lihtsaid küsimus-vastus vorme või mahukaid dialooge, kõik sõltub HR-ist ja nende vajadustest.
Mõned sõnad lahenduse arhitektuurist.

Lahenduse arhitektuur on moodulaarne. See koosneb teenustest, mis vastutavad erinevate ülesannete eest, nimelt:
• Azure'i Skype-botiteenus — aktsepteerib ja töötleb kasutajate päringuid. See on üsna lihtne teenus, mis esimesena aktsepteerib päringu ja viib läbi selle esmase töötlemise.
• Administraatori portaal — teenus, mis pakub veebiliidest portaali ja bot'i seadistamiseks. Bot pöördub alati esmalt portaali poole, ja portaal otsustab, mida edasi teha päringuga.
• Autentimise teenus — pakub autentimismehhanisme bot'ile ja administraatori portaalile. Autentimine toimub Oauth2 protokolli kaudu. Positiivse autendimise korral viib teenus autentimise läbi ettevõtte sisevõrgus vastavalt kehtivatele kasutajaandmetele, mis võimaldab süsteemil jälgida andmete desünkroniseerimisega seotud vigu.
• AI tekstituvastuse moodul, mis on kirjutatud Pythonis ja kasutab ParlAI raamistikku teksti tuvastamiseks. See on närvivõrk, vähemalt praeguses rakenduses. Kasutame küsimuste mõistmiseks tfDiff algoritmi. Moodul pakub API-d suhtlemiseks ja treenimiseks.
Kokkuvõtteks tahan öelda, et see on meie esimene kogemus chat-boti loomisel, ja oleme püüdnud süsteemi võimalikult lihtsaks teha, kuid samas funktsionaalseks, minimaalsete tööjõukuludega. Arvan, et meil on tulnud välja üsna huvitav toode. Sellel on oma õppimissüsteem, vigade logimine, teavituste saatmine, samuti saab seda integreerida mistahes teise sõnumiteenuse pakkujaga.
Allikas: habr.com
