
Vor einem Jahr wandte sich unsere geliebte HR-Abteilung mit der Bitte an uns: einen Chatbot zu entwickeln, der neuen Mitarbeitern bei der Einarbeitung in das Unternehmen hilft.
Um MissverstĂ€ndnissen vorzubeugen: Wir entwickeln keine eigenen Produkte, sondern bieten unseren Kunden ein komplettes Spektrum an Dienstleistungen im Bereich der Softwareentwicklung an. Der folgende Bericht handelt von unserem internen Projekt, bei dem der Auftraggeber nicht ein externes Unternehmen ist, sondern unsere eigene HR-Abteilung. Die Hauptaufgabe besteht darin, das Projekt innerhalb der begrenzten VerfĂŒgbarkeit von Menschen, Ressourcen und Zeit fristgerecht abzuschlieĂen und ein Produkt zu veröffentlichen.
ZunÀchst wollen wir die Aufgaben beschreiben, die es zu lösen galt.
Entwickler sind meistens eher introvertierte Menschen und reden nicht gerne; es ist viel einfacher, seine Frage im elektronischen Chat zu stellen. Mit dem Bot muss man nicht darĂŒber nachdenken, wen man fragen, wen man anrufen, wo man hingehen oder wo man Informationen suchen kann und ob diese aktuell sind.
Das zweite Problem ist die Information selbst â es gibt davon viel, sie stammt aus verschiedenen Quellen, ist nicht immer vorhanden und benötigt stĂ€ndige ErgĂ€nzung und Aktualisierung.
Im Unternehmen arbeiten fast 500 Mitarbeiter, die sich in verschiedenen BĂŒros, Zeitzonen, StĂ€dten Russlands und sogar im Ausland befinden. Es gibt normalerweise sehr viele Fragen, daher besteht eine weitere Aufgabe darin, die Belastung des HR-Personals, die mit den hĂ€ufigsten von den Mitarbeitern gestellten Fragen verbunden ist, zu reduzieren.
Es war auch notwendig, Prozesse zu automatisieren: den Eintritt neuer Mitarbeiter in das Unternehmen, das Versenden von Nachrichten an die Manager und Mentoren der neuen Mitarbeiter sowie das Verschicken automatischer Erinnerungen an Kurse und Tests, die der neue Mitarbeiter zur erfolgreichen Einarbeitung absolvieren muss.
Auf Basis der GeschÀftsanforderungen wurden technische Anforderungen formuliert.
Der Bot soll auf Skype basieren (historisch betrachtet wird dies im Unternehmen genutzt), daher wurde der Dienst auf Azure ausgewÀhlt.
FĂŒr den ZugangsbeschrĂ€nkungen haben wir ein Autorisierungsmechanismus ĂŒber Skype eingesetzt.
FĂŒr die Texterkennung wurde die Bibliothek ParlAI verwendet.
Es wird auch ein administratives Webportal benötigt, um Einstellungen vorzunehmen, Schulungen durchzufĂŒhren, Debugging zu betreiben, Versandaktionen zu konfigurieren und andere Aufgaben zu erledigen.

Im Verlauf der Arbeit an dem Projekt sind wir auf eine Reihe von Problemen und Schwierigkeiten gestoĂen.
Zum Beispiel gab es technische Probleme mit dem Azure-Konto. Microsoft wollte unser Abonnement aufgrund technischer Schwierigkeiten innerhalb ihres Dienstes nicht aktivieren. Fast zwei Monate konnten wir nichts dagegen unternehmen, und die Microsoft-Support-Abteilung zuckte letztendlich mit den Schultern und schickte uns zu Partnern, die alles erfolgreich eingerichtet und uns ein Konto bereitgestellt haben.
Der komplizierteste Teil war der Projektstart, als es darum ging, zu entscheiden, was wir verwenden, welche Architektur wir wÀhlen, wo und wie wir die Daten speichern und wie die Komponenten und Module des Systems miteinander interagieren werden.
In unserem Fall wurden die ĂŒblichen Probleme beim Start eines Projekts zusĂ€tzlich durch die Besetzung des Personals erschwert. Die Besonderheit unseres GeschĂ€fts liegt darin, dass im Gegensatz zu kommerziellen Projekten oft Entwickler an internen Projekten arbeiten, die nicht ĂŒber ausreichendes Wissen in den erforderlichen Bereichen verfĂŒgen â sie sind einfach durch Zufall auf der Bank gelandet und warten auf das nĂ€chste groĂe kommerzielle Projekt. Es ist logisch, dass die Motivation in einer solchen Situation auch nicht so einfach war. Die ProduktivitĂ€t sank, es gab oft Leerlauf innerhalb des Teams, und letztendlich musste man Leute ĂŒberzeugen (motivieren) oder ersetzen. Bei einem Wechsel des Entwicklers muss Schulung stattfinden, Wissen ĂŒbertragen werden und das Projekt eigentlich von Neuem gestartet werden. Jeder neue Entwickler sah die Architektur auf seine Weise und kritisierte die vorherigen Entscheidungen und den Code der anderen. Es begann ein Neuanfang.
So ging es fast sechs Monate lang weiter. Wir standen einfach auf der Stelle, refaktorierten den Code und schrieben nichts Neues.
AuĂerdem fehlt es an internen Projekten in der Regel fast an jeglicher Dokumentation, was es schwierig machte zu verstehen, was in jedem Moment zu tun ist und welche PrioritĂ€ten aktuell sind. Es war notwendig, ein festes Team zu bilden, Prozesse einzurichten, Planung und Bewertung zumindest fĂŒr drei Monate durchzufĂŒhren. Aber wie kann man das machen, wenn das Projekt nicht kommerziell ist, was bedeutet, dass man die Arbeitsstunden minimal investieren sollte, und dabei ein Ergebnis erzielen muss, das nicht schlechter ist als fĂŒr einen externen Auftraggeber?
Wir haben einen Pool von Ressourcen festgelegt, die an der Entwicklung des Projekts beteiligt waren, sich damit auskennen und daran arbeiten möchten. Wir haben einen Zeitplan fĂŒr die VerfĂŒgbarkeit der Personen an den Projekten erstellt. Wir haben die Arbeiten bewertet und abgestimmt und diese Arbeiten in die "LĂŒcken" zwischen den Hauptprojekten eingefĂŒgt. Nach 4 Monaten hatten wir einen funktionierenden Prototyp der Anwendung.
Lassen Sie uns nun genauer ĂŒber die Funktionen des Bots, die Architektur und technische Lösungen sprechen.
Eine der Hauptanforderungen von HR war die Erkennung von Texten, die vom Benutzer geschrieben wurden, um korrekt auf Fragen zu antworten. Man kann ihm schreiben â ich möchte Urlaub nehmen, ich will Urlaub oder ich wĂŒrde gerne Urlaub nehmen, und er wird es verstehen und entsprechend antworten. Oder wenn ein Mitarbeiter beispielsweise seinen Stuhl kaputt gemacht hat und schreiben möchte â "Mein Stuhl ist kaputt" oder "Mein Stuhl hat einen Riss" oder "Die RĂŒckenlehne ist abgebrochen", wird der Bot solche Anfragen bei entsprechender Schulung verstehen. Die QualitĂ€t der Texterkennung hĂ€ngt selbstverstĂ€ndlich von der Schulung des Bots ab, ĂŒber die wir spĂ€ter sprechen werden.
Eine weitere Anforderung und Teil der FunktionalitĂ€t ist das Dialogsystem des Bots. Es wurde ein System entwickelt, bei dem der Bot in der Lage ist, einen Dialog zu fĂŒhren und den Kontext der aktuellen Frage zu verstehen. Er kann als Antwort auf Ihre Frage weitere klĂ€rende Fragen stellen und das GesprĂ€ch fortsetzen, wenn wir den Bot entsprechend geschult haben. Skype unterstĂŒtzt einfache MenĂŒeintrĂ€ge, um den Benutzern mögliche Optionen fĂŒr die Fortsetzung der Dialoge vorzuschlagen. Auch wenn wir einen Dialog gefĂŒhrt haben, aber plötzlich eine Frage abseits des Themas stellen wollen, wird der Bot dies ebenfalls verstehen.
Der Bot ermöglicht es, verschiedene Artefakte basierend auf den persönlichen Daten des Benutzers zu senden. Zum Beispiel basierend auf seinem Standort. Angenommen, wenn jemand ein WC finden möchte, wird eine Karte des BĂŒros angezeigt, die ihn zum WC fĂŒhrt. Und die Karte wird je nach dem BĂŒro, in dem sich der Mitarbeiter befindet, ausgewĂ€hlt.
Eine der wichtigsten Aufgaben ist der Schutz der persönlichen Informationen der Benutzer. Wir können nicht zulassen, dass jeder Zugang zu den vertraulichen Daten erhĂ€lt, mit denen unser Bot arbeitet. Die Notwendigkeit einer Autorisierung fĂŒr einen solchen Bot ist ein wesentlicher Bestandteil. Der Bot fordert den Benutzer auf, sich zu autorisieren, bevor er mit ihm einen Dialog beginnen kann. Dies geschieht beim ersten Kontakt eines Mitarbeiters mit dem Bot. Die Autorisierung leitet den Benutzer auf die entsprechende Seite weiter, wo der Benutzer ein Token erhĂ€lt, das er dann in die Skype-Nachricht einfĂŒgt. Wenn die Autorisierung erfolgreich ist, kann die Kommunikation mit dem Bot beginnen.

Die Autorisierung erfolgt ĂŒber Skype â das Portal-authorization service, das Unternehmensnetzwerk und LDAP. Somit hĂ€ngt die Autorisierung von den aktuellen Daten des Benutzers im Unternehmensnetzwerk ab.
Im Verlauf der Entwicklung des Bots haben wir erkannt, dass ein gewisses System, das in die FunktionalitÀt des Portals integriert ist, notwendig ist, um den HR-Abteilungen eine schnelle Anpassung des Bots zu ermöglichen. Wir haben eine solche Seite ins Portal aufgenommen, auf der die HR-Mitarbeiter die Fehler sehen können, die von den Benutzern wÀhrend der Arbeit mit dem Bot gemeldet wurden, und diese durch Neu-Training beheben oder an die Entwickler weitergeben können.
Die Möglichkeit, den Bot direkt im Portal zu trainieren, war von Anfang an nicht vorgesehen. Im Verlauf der Entwicklung haben wir festgestellt, dass das Training des Bots die hĂ€ufigste Aufgabe ist, die die Mitarbeiter der HR-Abteilung bei der Arbeit mit ihm erfĂŒllen werden, und Dateien mit Texten zur weiteren Schulung an die Entwickler zu senden, ist absolut unpraktisch. Das kostet zu viel Zeit und fĂŒhrt zu zu vielen Fehlern und Problemen.

Wir haben eine BenutzeroberflĂ€che im Portal fĂŒr eine benutzerfreundliche Schulung des Bots erstellt. Sie ermöglicht es den HR-Mitarbeitern, das aktuelle Training des Bots zu sehen, ihn weiter zu trainieren und Anpassungen am laufenden Training vorzunehmen. Das Training ist in einer baumartigen Struktur dargestellt, in der Knoten, also Zweige, Fortsetzungen des Dialogs mit dem Bot sind. Man kann einfache Frage-Antwort-Paare erstellen, aber auch umfangreiche Dialoge, alles hĂ€ngt von den BedĂŒrfnissen der HR-Mitarbeiter ab.
Ein paar Worte zur Architektur der Lösung.

Die Architektur der Lösung ist modular. Sie umfasst Dienste, die fĂŒr verschiedene Aufgaben verantwortlich sind, nĂ€mlich:
âą Der Skype-Bot-Service auf Azure â empfĂ€ngt und verarbeitet Benutzeranfragen. Dies ist ein relativ einfacher Service, der als erster die Anfrage entgegennimmt und eine erste Verarbeitung durchfĂŒhrt.
âą Admin-Portal â ein Dienst, der eine WeboberflĂ€che zur Konfiguration des Portals und des Bots bereitstellt. Der Bot wendet sich immer zuerst an das Portal, und das Portal entscheidet dann, was mit der Anfrage weiter zu tun ist.
âą Authentifizierungsservice â bietet Authentifizierungsmechanismen fĂŒr den Bot und das Admin-Portal. Die Authentifizierung erfolgt nach dem Oauth2-Protokoll. Bei erfolgreicher Authentifizierung fĂŒhrt der Dienst die Autorisierung im Unternehmensnetzwerk gemÀà den gĂŒltigen Benutzerdaten durch, sodass das System Fehler im Zusammenhang mit der Desynchronisation der Daten kontrollieren kann.
âą AI-Modul zur Texterkennung, geschrieben in Python und verwendet das Framework ParlAI fĂŒr die Texterkennung. Dies ist ein neuronales Netzwerk, zumindest in der aktuellen Umsetzung. Wir verwenden den tfDiff-Algorithmus, um Fragen zu verstehen. Das Modul bietet eine API fĂŒr die Kommunikation und das Training.
AbschlieĂend möchte ich sagen, dass dies unsere erste Erfahrung in der Erstellung eines Chatbots ist. Wir haben versucht, das System so einfach wie möglich zu gestalten, dabei aber funktional und mit minimalen Arbeitsaufwand zu sein. Ich denke, wir haben ein sehr interessantes Produkt geschaffen, mit einem eigenen Lernsystem, Fehlerprotokollierung und Benachrichtigungen; es lĂ€sst sich auch mit jedem anderen Messenger integrieren.
Quelle: habr.com
