Unter der Haube des Chatbots: Was RocketBot kann und wie es funktioniert

RocketBot ist ein programmierbarer Chat-Bot, der in VK, Telegram und Bitrix24 integriert ist. 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 ist das System in Python geschrieben und MySQL wird als Datenbank ausgewählt.

Bis heute belegt Python im TIOBE-Ranking den dritten Platz. Dies bedeutet, dass die Sprache eine große Community und eine endlose Menge an Referenzliteratur hat: Bücher, Websites, Kurse und Quellcodes. Auf GitHub finden Sie beispielsweise Sammlungen von Best Practices für die Entwicklung in Python , und auf StackOverflow ist eine große Anzahl von Threads geöffnet . Der O'Reilly-Verlag hat dieser Sprache viele Bücher gewidmet. Man kann sie mit „ Trampen in Python “ und „ Maschinelles Lernen mit Python “ unterscheiden.

Neben einer Vielzahl von Quellen ist einer der Hauptvorteile von Python die Vielzahl von Bibliotheken und funktionalen ML-Frameworks. Beispiele sind PyTorch und SciKit-learn - leistungsstarke Tools, die die Verarbeitung natürlicher Sprache, Dialoge und Skripte vereinfachen.

Insbesondere für die Entwicklung von Trainingsmodellen haben wir PyTorch verwendet, da es über umfangreiche Funktionen für das Prototyping verfügt. Darüber hinaus haben wir scikit-learn implementiert, das die Datenvorverarbeitung durchführt, sowie pymorth2 und gensim (für die Arbeit mit Morphologie bzw. Textvektorisierung). Wir erleben auch DeepPavlov - wir bewerten seine Fähigkeiten.

Die Datenbank wurde aus Gründen ausgewählt, um sie nicht zu komplizieren. MySQL bleibt auch die beliebteste der leistungsstarken Serverdatenbanken. Aus diesem Grund finden Sie im Internet viele Informationen dazu (zum Beispiel gibt es ein detailliertes Handbuch der Entwickler ), und eine umfangreiche Community wird Ihnen immer eine Lösung für das Problem mitteilen, falls vorhanden. Außerdem bietet MySQL eine breite Funktionalität, obwohl es nicht allen SQL-Standards entspricht.

Was unser Chat-Bot kann


Mit unserem Chatbot können Sie automatische Antworten auf Benutzerfragen konfigurieren (z. B. zum Implementieren der FAQ) sowie Routinevorgänge (z. B. Umfragen) mithilfe von Skripten automatisieren.

Das System kann mit zwei Arten von Fragen arbeiten: benutzerdefiniert und Standard. Im ersten Fall schreibt der Administrator das Wesentliche des Problems und die Schlüsselwörter, auf die der Bot reagiert, unabhängig vor. Das Auflisten aller Schlüsselwörter ist optional. RocketBot-Algorithmen bewerten die Bedeutung der Phrase und finden die Antwort basierend auf der semantischen Nähe.

Zur Bewertung der semantischen Nähe wird eine Vektordarstellung der Abfrage verwendet. Es identifiziert die Hauptkomponenten ( PCA ) und sucht nach der Option für die nächstgelegene Entfernung in der Datenbank. In unserem Fall schnitt die Metrik cosine_similarity (sciki-learn) am besten ab.

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

In beiden Fällen kann der Chatbot entweder mit einer Textnachricht oder mit einem Skript antworten. Eine Textnachricht ist nur eine Standardantwort auf eine Situation. Das Skript impliziert eine Baumstruktur des Dialogs. Tatsächlich handelt es sich hierbei um vollwertige Kommunikationsszenarien, in denen der Chatbot abhängig von den Antworten des Benutzers programmierte Aktionen ausführt. Mit dieser Funktion können Sie beispielsweise Umfragen durchführen oder Feedback sammeln.

Zum Kompilieren eines Skripts werden drei Arten von Blöcken verwendet:

  1. Fragenblock - stellt dem Benutzer eine Frage und schreibt die Antwort darauf in eine Variable.
  2. Block von Bedingungen - implementiert die Verzweigung des Skripts.
  3. Variablenprüfblock - Steuert die Route des Benutzers gemäß dem Skript.

Der Bot-Besitzer füllt alle Blöcke unabhängig voneinander im Skript-Editor. Bisher verfügt der Editor nicht über Visualisierungstools (diese werden jedoch in naher Zukunft angezeigt). Nach unserer Erfahrung hilft die Anwesenheit eines visuellen Designers in der Chat-Bot-Anwendung nicht bei der Erstellung eines Schemas für seine Arbeit. Die meisten Benutzer denken nicht im Voraus über die Algorithmen nach, sodass einfach nichts an den Editor übertragen werden kann.


Ein Beispiel für Einstellungen beim Beenden des Skripts mit der Antwort "Nein" auf die Frage "Sind Sie 18 Jahre alt?"

Mit all dem können wir dem Kunden helfen, seine Skripte gemäß dem Flussdiagramm anzupassen, das er in einem grafischen Editor wie xmind oder draw.io zeichnet. Wir werden den Algorithmus unabhängig überprüfen und die Ersteinrichtung durchführen - normalerweise dauert es mehrere Stunden.

Neben der Beantwortung von Fragen und der Implementierung von Skripten kann der Bot auch mit Verarbeitungssystemen in natürlicher Sprache arbeiten. Während sie jedoch einen sehr engen Aufgabenbereich ausführen: Sie suchen in der Wissensdatenbank nach der Antwort auf die Frage und bestimmen die Absichten des Benutzers (hierfür wird derselbe Dialogfluss verwendet).

Wir haben den Aufgabenbereich für intelligente Lösungen aufgrund möglicher Schwierigkeiten mit unvorhersehbarem Verhalten begrenzt. Moderne KI-Systeme sind immer noch fehleranfällig, und beim Erstellen von Geschäftsdiensten kann der Bot 80% der Fragen nicht auf die eine und die anderen 20% auf die andere Weise beantworten.

Zur Implementierung des natürlichen Sprachverarbeitungssystems wird bisher 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 verwendet. Die neue Implementierung wird höchstwahrscheinlich auf dem bereits erwähnten DeepPavlov-Framework basieren.

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

In zukünftigen Versionen planen wir, dem Bot die Möglichkeit hinzuzufügen, automatische Trichter zu erstellen. Auf diese Weise kann das Unternehmen den potenziellen Kunden mit der Ware vertraut machen und das Geschäft direkt im Chat abschließen. Das System fügt CRM unabhängig die erforderlichen Entitäten hinzu - Leads, Deals, Aufgaben - basierend auf den eingegebenen Antworten und Fragen.


/ Foto Spencer Cooper CC BY-ND

Die Infrastruktur, auf der der Chatbot basiert


Alle unsere Services arbeiten in der IT-GRAD-Cloud - dort werden Frontend-Server, Datenbanken und Anwendungsserver gehostet. Im Allgemeinen hilft uns die Cloud-Infrastruktur, unsere Services schnell zu skalieren, um der wachsenden Last und den plötzlichen Verkehrsstößen gerecht zu werden. Aus diesem Grund planen wir in Zukunft nur noch, 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 Diensten erfolgt in einem sicheren Segment). Obwohl dies zu Verzögerungen bei der Beantwortung der Frage in ein bis zwei Sekunden führt, bietet diese Architektur ein großes Skalierungspotential und ermöglicht es uns, einzelne Blöcke zu ändern, ohne die anderen zu beeinflussen. Das Aktualisieren des Suchmikroservices in den FAQ hat beispielsweise keine Auswirkungen auf die Mikroservice-Integration in CRM.

Zum Testen und Erstellen von Modellen für maschinelles Lernen und neuronalen Netzen verwenden wir den Nvidia Tesla M40 16GB. Aber auch darauf ist das Training nicht sehr schnell. Die Datensätze, die wir für die Verarbeitung natürlicher Sprache verwenden, sind mehrere zehn Gigabyte groß. Aus diesem Grund haben wir in einigen Fällen (z. B. zum Vektorisieren von Datasets) virtuelle Maschinen mit 64 CPUs verwendet.



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


Von unserem Telegrammkanal:

Source: https://habr.com/ru/post/de438536/


All Articles