Unter der Haube des Chat-Bot: Was kann und wie funktioniert RocketBot?

    RocketBot ist ein programmierbarer Chat-Bot, der mit VK, Telegram und Bitrix24 integriert werden kann. Heute werden wir über die Infrastruktur und andere Technologien sprechen, auf denen sie aufgebaut ist.


    / Foto Darryl Braaten CC BY-SA

    Toolkit


    Bei der Entwicklung von RocketBot haben wir uns auf die Geschwindigkeit der Entwicklung und des Prototyping konzentriert. Aus diesem Grund wurde das System in Python geschrieben und MySQL als Datenbank ausgewählt.

    Heute steht Python auf Rang drei der Beliebtheit von TIOBE. Dies bedeutet, dass die Sprache eine große Community und eine unendliche Menge an Nachschlagewerken hat: Bücher, Websites, Kurse und Quellcodes. Auf GitHub finden Sie beispielsweise Best Practices für die Entwicklung in Python . In StackOverflow sind eine große Anzahl von Threads geöffnet . Viele Bücher sind dieser Sprache von O'Reilly gewidmet. Sie können " Anhalter durch Python " und " Maschinelles Lernen mit Python " hervorheben .

    Neben einer großen Anzahl von Quellen ist einer der Hauptvorteile von Python eine Vielzahl von Bibliotheken und funktionalen ML-Frameworks. Beispiele hierfür sind PyTorch und SciKit-learn. Hierbei handelt es sich um leistungsstarke Tools, die die Verarbeitung natürlicher Sprache, Dialoge und Skripts vereinfachen.

    Insbesondere haben wir PyTorch verwendet, um Lernmodelle zu entwickeln, da es viele Möglichkeiten für das Prototyping bietet. Darüber hinaus haben wir scikit-learn implementiert, das die vorläufige Datenverarbeitung sowie pymorth2 und gensim (für die Arbeit mit Morphologie bzw. Vektorisierung von Texten) ausführt. Wir erleben auch DeepPavlov - wir bewerten seine Fähigkeiten.

    Bei der Datenbank haben wir sie aus Gründen der "Nichtkomplikation" gewählt. MySQL ist auch weiterhin die beliebteste der leistungsfähigen Server-Datenbanken. Aus diesem Grund kann eine große Menge an Informationen im Internet gefunden werden (z. B. gibt es ein ausführliches Handbuch der Entwickler ), und eine umfangreiche Community wird immer eine Lösung für das Problem bereitstellen, falls vorhanden. Außerdem bietet MySQL umfangreiche Funktionen, obwohl es nicht allen SQL-Standards entspricht.

    Was kann unser Chat-Bot?


    Mit unserem Chat-Bot können Sie automatische Antworten auf Benutzerfragen konfigurieren (z. B. zur Implementierung der häufig gestellten Fragen) sowie Routinen (z. B. Abfragen) mithilfe von Skripts automatisieren.

    Das System kann mit zwei Arten von Fragen arbeiten: Benutzerdefiniert und Standard. Im ersten Fall registriert der Administrator unabhängig das Wesen der Frage und die Schlüsselwörter, auf die der Bot antworten wird. Alle Schlüsselwörter auflisten ist optional. RocketBot-Algorithmen erkennen die Bedeutung des Ausdrucks und finden die Antwort durch semantische Nähe.

    Um die semantische Nähe zu beurteilen, wird eine Vektordarstellung der Abfrage verwendet. Es hebt die Hauptkomponenten ( PCA ) hervor und sucht nach der nächsten Option in der Datenbank. In unserem Fall hat sich die Metrik cosine_similarity (sciki-learn) am besten gezeigt.

    Im zweiten Fall muss der Bot-Besitzer nichts konfigurieren. Er wählt einfach eine Standardfrage aus der Liste aus - dann versteht der Bot selbst, worum er gefragt wird. Um nun die Standardthemen hervorzuheben, verwenden wir den Dialogflow-Dienst. Wir werden ihn jedoch auf unsere eigene Implementierung umstellen. Wir sind mit der Abhängigkeit vom Google-Dienst nicht zufrieden, was zu einer Verzögerung der Datensynchronisation führt. Beachten Sie, dass der Benutzer die Standardvorlage jederzeit ändern kann, indem er eine eigene Variante von Phrasen erstellt und eine entsprechende Aktion zuweist.

    In beiden Fällen kann der Chat-Bot entweder mit einer Textnachricht oder mit einem Skript antworten. Eine SMS ist nur eine Standardantwort auf eine Situation. Das Skript impliziert eine baumartige Struktur des Dialogs. In der Tat handelt es sich um umfassende Kommunikationsszenarien, in denen ein Chat-Bot die programmierten Aktionen abhängig von den Antworten des Benutzers ausführt. Diese Funktion kann beispielsweise zum Durchführen von Umfragen oder zum Sammeln von Feedback verwendet werden.

    Drei Arten von Blöcken werden verwendet, um das Skript zu kompilieren:

    1. Fragenblock - fragt den Benutzer nach einer Frage und schreibt eine Antwort auf die Variable in der Variablen.
    2. Bedingungsblock - implementiert die Skriptverzweigung.
    3. Blockieren von Prüfvariablen - Verwaltet die Route des Benutzers gemäß dem Skript.

    Der Bot-Besitzer füllt alle Blöcke selbständig im Skript-Editor. Bisher hat der Editor keine Visualisierungswerkzeuge (aber sie werden in naher Zukunft erscheinen). Nach unserer Erfahrung hilft die Anwesenheit eines visuellen Designers in der Chat-Bot-Anwendung nicht bei der Erstellung eines Schemas seiner Arbeit. Die meisten Benutzer überdenken die Algorithmen nicht im Voraus, so dass einfach nichts an den Editor zu übertragen ist.


    Ein Beispiel für Einstellungen mit dem Beenden des Skripts, wenn Sie die Frage „Sind Sie 18 Jahre alt?“

    Mit „Nein“ beantworten. Wir können dem Kunden jedoch dabei helfen, seine Skripts gemäß dem Flussdiagramm anzupassen, das er in einem grafischen Editor wie xmind oder draw.io erstellt. Wir werden die Überprüfung des Algorithmus selbstständig durchführen und die Ersteinrichtung vornehmen - dies dauert in der Regel mehrere Stunden.

    Neben der Beantwortung von Fragen und der Implementierung von Skripts kann ein Bot mit Systemen für die Verarbeitung natürlicher Sprache arbeiten. Sie führen jedoch einen sehr engen Aufgabenbereich aus: Sie suchen nach einer Antwort auf eine Frage in der Wissensdatenbank und bestimmen die Absichten des Benutzers (derselbe Dialogflow wird dafür verwendet).

    Wir haben die Bandbreite der intellektuellen Entscheidungsaufgaben aufgrund möglicher Schwierigkeiten mit unvorhersehbarem Verhalten begrenzt. Moderne KI-Systeme unterliegen immer noch Fehlern. Bei der Erstellung von Business-Services ist es einem Bot unmöglich, 80% der Fragen auf eine Art und die restlichen 20% zu beantworten - an andere.

    Um das natürliche Sprachverarbeitungssystem zu implementieren, wird ein sehr einfacher Suchalgorithmus verwendet. Im Laufe der Zeit möchten wir eine neue Version implementieren, die auf LSTM-Netzwerken basiert und verstärktes Lernen nutzt. Höchstwahrscheinlich basiert die neue Implementierung auf dem bereits erwähnten DeepPavlov-Framework.

    Ein weiteres Feature unseres Bots ist die Integration mit CRM-Systemen. RocketBot kann nach dem Ausführen von Skripts automatisch einen Lead und eine Aufgabe in CRM (Bitrix24) erstellen. Der Bot sendet alles, was der Benutzer geschrieben hat, sowie Informationen über ihn aus dem Messenger oder dem sozialen Netzwerk. Alles funktioniert nach Standardprotokollen und über die Haupt-API von CRM-Systemen in Form von HTTP-Anforderungen und Daten in JSON.

    In zukünftigen Versionen planen wir, dem Bot die Möglichkeit zur Erstellung von Autostoppern hinzuzufügen. Dadurch kann das Unternehmen den potenziellen Kunden mit dem Produkt vertraut machen und die Transaktion direkt im Chat abschließen. Das System fügt die erforderlichen Entitäten automatisch zu CRM hinzu - Leads, Transaktionen, Aufgaben - basierend auf den eingegebenen Antworten und Fragen.


    / photo spencer cooper CC BY-ND

    Die Infrastruktur, auf der der Chat-Bot aufgebaut ist


    Alle unsere Services arbeiten in der IT-GRAD-Cloud - Frontend-Server, Datenbanken und Anwendungsserver befinden sich dort. Im Allgemeinen hilft uns die Cloud-Infrastruktur dabei, unsere Services schnell zu skalieren, um mit der zunehmenden Last und plötzlichen Verkehrsspitzen fertig zu werden. Aus diesem Grund planen wir in Zukunft nur, unsere Präsenz in der Cloud auszubauen.

    Der Bot selbst besteht aus fünf Mikrodiensten, die über HTTP-JSON miteinander interagieren (die gesamte interne Kommunikation zwischen den Diensten wird in einem geschützten Segment ausgeführt). Obwohl dies zu Verzögerungen bei der Beantwortung einer Frage in ein bis zwei Sekunden führt, bietet diese Architektur ein großes Skalierungspotenzial und ermöglicht es uns, einzelne Blöcke zu ändern, ohne andere zu beeinflussen. Die Aktualisierung der Microservice-Suche in den häufig gestellten Fragen wirkt sich beispielsweise nicht auf die Integration der Microservice mit CRM aus.

    Wir verwenden das Nvidia Tesla M40 16GB zum Testen und Erstellen von Machine Learning-Modellen und neuronalen Netzwerken. Aber auch ihr Lernen ist nicht sehr schnell. Die Datensätze, die wir für Verarbeitungsaufgaben in natürlicher Sprache verwenden, sind mehrere zehn Gigabyte. Aus diesem Grund haben wir in einigen Fällen (z. B. zur Vektorisierung von Datensätzen) virtuelle Maschinen mit 64 CPUs verwendet.



    Zusätzliche Lektüre - Beiträge aus dem First Corporate IaaS-Blog:


    Aus unserem Telegrammkanal:


    Jetzt auch beliebt: