We're sorry but this page doesn't work properly without JavaScript enabled. Please enable it to continue.
Feedback

Matrix - Bots

00:00

Formale Metadaten

Titel
Matrix - Bots
Untertitel
Bots entwickeln ist einfacher als man glaubt
Serientitel
Anzahl der Teile
47
Autor
Mitwirkende
Lizenz
CC-Namensnennung 4.0 International:
Sie dürfen das Werk bzw. den Inhalt zu jedem legalen Zweck nutzen, verändern und in unveränderter oder veränderter Form vervielfältigen, verbreiten und öffentlich zugänglich machen, sofern Sie den Namen des Autors/Rechteinhabers in der von ihm festgelegten Weise nennen.
Identifikatoren
Herausgeber
Erscheinungsjahr
Sprache

Inhaltliche Metadaten

Fachgebiet
Genre
Abstract
Matrix ist ein offenes Chatnetzwerk für sichere, dezentrale Kommunikation. Keine Lust mehrere Chat-Clients zu installieren um alle Freunde zu erreichen? Kein Problem, denn Matrix vereint verschiedene Chat-Netze und bringt zusätzlich noch sehr coole Features mit.
25
Vorschaubild
06:06
29
MatrizenringBootenDickeMagnetbandlaufwerkUnified CommunicationsRechenschieberComputeranimation
MatrizenringMatrizenringRechenschieberNetzwerk <Graphentheorie>Bridge <Kommunikationstechnik>ClientRandDiagramm
MatrizenringWorld Wide WebRoboterInformationKonnektorStreckeNetzwerk <Graphentheorie>Content <Internet>JavaScriptMatrizenringFRAMEWORK <Programm>Determiniertheit <Informatik>PasswortComputeranimation
ClientChatten <Kommunikation>ParserInformationCodeChannel <Internet>KonnektorVersion <Informatik>Netzwerk <Graphentheorie>DatensatzRechenschieberProzentzahlComputeranimation
MatrizenringKonfigurationsraumYAML <Framework, Informatik>SchwebungDEBUG <Programm>EIBMagnetblasenspeicherWorld Wide WebFahne <Mathematik>Lesezeichen <Internet>DateiDemoszene <Programmierung>WhiteboardNabel <Mathematik>MatrizenringACCESS <Programm>PasswortDEBUG <Programm>KonfigurationsraumVersion <Informatik>Konnektor
CDMARoboterComputeranimation
KonnektorMatrizenringProcessing <Programmiersprache>Syntaktische AnalyseGravitationsgesetzBenutzeroberflächeChatten <Kommunikation>DEBUG <Programm>VerschlingungProgramm/QuellcodeComputeranimation
KonnektorMatrizenringKonfigurationsraumYAML <Framework, Informatik>EIBDEBUG <Programm>MinimalgradVererbungshierarchieRoboterApp <Programm>VariableURLCodeMAPParametersystemKonfigurationsraumComputeranimationProgramm/Quellcode
VererbungshierarchieKonfigurationsraumMinimalgradMatrizenringDEBUG <Programm>GRADERoboterProgramm/QuellcodeJSON
MinimalgradMatrizenringMethode der kleinsten QuadrateWEBAtomarität <Informatik>SpieltheorieVererbungshierarchieWorld Wide WebDebuggingInterpretiererICONKonfigurationsraumFahne <Mathematik>ProviderKomponente <Software>ZählenVerschlingungVariableDateiVersion <Informatik>Netzwerk <Graphentheorie>PasswortKonfigurationsraumRoboterCodeInternetProgramm/QuellcodeComputeranimation
ProviderKomponente <Software>Information RetrievalParametersystemSelektorBlu-Ray-DiscDatenmodellECCE <Programm>LEXISProgramm/Quellcode
WEBUniformer RaumMatrizenringNeunMatrizenringProgramm/Quellcode
MatrizenringProcessing <Programmiersprache>KonnektorInformation RetrievalStatisches RAMMessage sequence chartSyntaktische AnalyseProgramm/Quellcode
BenutzeroberflächeBlu-Ray-DiscGeometrieWorld Wide WebMatrizenringKonfigurationsraumProgramm/QuellcodeComputeranimation
MatrizenringProcessing <Programmiersprache>KonnektorYAML <Framework, Informatik>KonfigurationsraumLogdateiVersion <Informatik>CachingStellenringCodeMatchingZeichenketteRemote AccessSpeicher <Informatik>ModulProgramm/Quellcode
World Wide WebStochastische MatrixProgrammierungÄquivalenzprinzip <Physik>Programm/Quellcode
SpieltheorieMEGAExakte SequenzWorld Wide WebEnhanced IDEMatrizenringSpeicher <Informatik>RoboterProgramm/Quellcode
CodeWorld Wide WebBEEPLaderProviderKomponente <Software>MeterDatenmodellLift <Framework, Informatik>SelektorInformation RetrievalMatrizenringKonnektorSyntaktische AnalyseProcessing <Programmiersprache>Supremum <Mathematik>AlgorithmusWort <Informatik>MinimumDefaultProgramm/QuellcodeComputeranimation
DEBUG <Programm>RAMMinimumMatrizenringDemoszene <Programmierung>Programm/Quellcode
MatrizenringSelektorProcessing <Programmiersprache>Programm/Quellcode
Programm/QuellcodeJSONXMLUML
Transkript: Deutsch(automatisch erzeugt)
Hallo und herzlich willkommen zum nächsten Vortrag. Das ist Matrix Boots von Oleg Fiske. Viel Spaß damit. Dankeschön. Hallo, ich bin Oleg Fiske und ein bisschen Details über mich. Mit Matrix bin ich schon länger, ich weiß nicht mehr sogar wie lange.
Und vor kurzem habe ich mir die Boots angeguckt und bei Obstroid einiges gemacht. Daher schauen wir uns mal gleich, was da mit Obstroid möglich ist.
Also, wer noch nicht weiß, was ist Matrix? Matrix ist ein offenes Netzwerk für sichere, dezentrale Echtzeitkommunikation. Hört sich ein bisschen abstrakt. Die meiste Zeit wird es als Chat-Netzwerk benutzt.
Ich sehe, dass im Stream mein Video sehr groß ist und meine Slides sehr klein sind. Deshalb mache ich das Video aus.
So, jetzt müssten die Slides größer sein. Also, Matrix wird großteils als Chat-Netzwerk benutzt.
Und in Matrix gibt es ein tolles Konzept wie Bridges. Und Bridges ist eigentlich das, was Matrix von allen anderen Netzwerken unterscheidet. So sieht es ungefähr aus. Das Bild hat man vielleicht schon mal
gesehen. In der Mitte das Matrix-Netzwerk mit ihren Servern, die gegenseitig kommunizieren. Da verbinden sich die Clients und die Bridges sind am Rande dieses Netzwerk und leiten die Nachrichten in die anderen Netzwerke. Also, ein perfektes Beispiel ist zum Beispiel Gitter, was teilweise schon Teil der Matrix ist.
Da kann man mit Gitter-Usern einfach kommunizieren, sodass sie fast gar nicht merken, dass man aus Matrix kommt. Es gibt auch Telegram-Bridges und IRC-Bridges auch ganz gut. Im Inneren des Matrix sieht das so aus. Wir haben Home-Server, die in dunkelblau und wir haben die Clients, die sich auf diese Home-Server verbinden.
Und die Home-Server federieren zwischen einander und tauschen, synchronisieren die Chat-Räume. Es gibt noch Application-Server und Identity-Server. Wenn ihr dazu mehr Informationen haben möchtet, schaut mein Vortrag vom letzten Jahr.
Da gehe ich ein bisschen mehr ins Detail. In diesem Vortrag werden wir uns auf die Home-Server konzentrieren und auf die Clients, nämlich weil wir Bots bauen. Also Bots in Matrix. In vielen anderen Netzwerken werden Bots als separate User behandelt.
Oder man sieht es explizit, dass es ein Bot ist, dass da noch Bot drauf steht oder man muss die extra registrieren. Nicht bei Matrix. Bei Matrix gibt es keinen Unterschied zum Bot oder normalen User.
Daher schon mal eine gute Basis für den Touring-Test. Manchmal weiß man nicht, es gibt Witze. Man weiß ja nicht, wer ist eigentlich der Bot und wer ist eigentlich kein Bot. Aber es macht auch keinen Unterschied. Also wie geht man vor? Man erstellt einen User, man bekommt einen Access-Token oder benutzt username und Passwort.
Das verbindet man dann zu einem Home-Server und somit kann man diese Daten dann an einen Bot füttern und dann ist der Bot online. Wir werden uns die meiste Zeit mit der Demo verbringen. Ich werde zeigen, wie wirklich das geht. Daher hier ein bisschen Theorie.
Also wir wissen, dass in Matrix Ende-zu-Ende-Verschlüsselung da ist. Das ist ein großer Vorteil von Matrix auch. Wenn man einen Bot in einem verschlüsselten Raum haben möchte, dann muss
natürlich das Bot-Framework oder der Bot diese Ende-zu-Ende-Verschlüsselung unterstützen. Obstroy zum Beispiel unterstützt das. Man muss immer schauen, dass das Framework oder die Library, die da benutzt wird, unterstützt. Wenn es nicht unterstützt wird, man trotzdem möchte in einem verschlüsselten Raum einen Bot benutzen.
Dann kann man zum Beispiel einen Pantaleimen nutzen. Der fungiert dann als guter Man in the Middle. Der Determiniert dann die Ende-zu-Ende-Verschlüsselung und dann geht dann unverschlüsselnd zum Bot. Das heißt, man sollte ihn dann so nah wie möglich an den Bot dran haben, sodass diese unverschlüsselte Strecke so klein wie möglich ist.
Es gibt viele Bot-Frameworks schon mittlerweile. Das ist die nicht komplette Liste von Bots und Bot-Frameworks. Wir werden uns heute Obstroy anschauen, wobei man muss sagen, dass der Obstroy nicht unbedingt auf Matrix extra ausgelegt ist.
Der hat verschiedene Konnektoren. Schauen wir uns gleich an. Mowbot ist auch gut beliebt und wenn man JavaScript oder Go oder Rust nutzen möchte, gibt es auch andere Bot-Frameworks.
Wir werden uns heute mit dem Obstroy beschäftigen, also Obstroy. Im Einfachen nimmt der Obstroy die Nachrichten entgegen und führt sie aus mit unserem eigenen Python-Code. Die nennt man Skills und abhängig von dem Content von diesem Nachricht kann er entsprechend in dem Python-Code reagieren oder irgendwas machen.
Also sehr abstrakt. Eigentlich sieht das so aus. Wir haben ganz rechts die Skills und das sind wirklich unsere custom Python-Code,
den wir heute schreiben werden. Ganz links gibt es einen Konnektor. Man sieht, es gibt verschiedene Konnektoren. Es gibt einen Matrix-Konnektor, Slack und Telegram. Wir werden einen Matrix-Konnektor nutzen. Der Konnektor verbindet sich zum Homeserver und lauscht in bestimmten Channels oder in mehreren Channels.
Und dann, sobald eine Nachricht reinkommt, wird dieser Flow getriggert. Zuerst kommt der Paser, ein Matcher und dann kommt es zum Skill. Also der Paser ist eine Möglichkeit, aus der Nachricht irgendeinen Kontext zu geben.
Wir werden uns heute den Rasa-Paser anschauen. Der war vorher im Obstroy nur mit Version 1 kompatibel und die Version 1 wird nicht mehr gewartet.
Daher habe ich das mal auf die Version 2 gebracht. Und was Rasa macht, ist ein NLU-Framework, Natural Language Understanding. Das heißt, man gibt da Beispiele an, an Sätzen. Das erstellt ein Modell, ich glaube mittels neuronalen Netzwerken.
Und was Obstroyt macht, der lässt die Texte gegen das Modell schießen und bekommt zurück die Wahrscheinlichkeit, zum welchen Kontext diese Nachricht jetzt gerade passen würde, in Prozentzahl.
Und das passiert alles automagisch. Das macht der Obstroyt für uns. Und wir werden uns das als letztes Beispiel anschauen. Das läuft dann über den Paser, läuft wieder zurück zum Obstroyt und wir bekommen diesen Kontext,
welchen Kontext diese Nachricht haben könnte. Und dann durch den Matcher können wir in unserem Skill entsprechend darauf reagieren und dann entweder eine Antwort schreiben oder irgendwas machen in unserem Skill. Also, dann schauen wir uns das mal an.
So, also die Slides und den Code tue ich alles auf den GitHub oder auf irgendwo auf dem GitHub wahrscheinlich. Also, was wir hier haben ist, ich habe es mal so aufgebaut, ich werde es gleich erklären,
dass es gibt viele Möglichkeiten, wie man das laufen lässt. Also wichtig ist das, dass wir hier Secrets in einer Datei haben, dass die Example, die wird nicht committed.
Hier trägt man eigentlich so die ganzen Sachen ein. Was haben wir hier im Matrix Server, MXID, den Access Token oder man kann benutzen einmal Passwort. Und dann Main Room und wir haben Debug Room. Also, der Board wird in zwei Räumen drin sein.
Und wir können dann aus dem Debug Room den testen und in Main Room kann man den auch benutzen. Dann wir schauen uns das einfache, einfache Beispiel. Was haben wir hier? Wir werden Docker nutzen, um den Obstroid zu starten.
Wir werden die Version nutzen. Die Secrets werden wir uns als Umgebungsvariablen einfach in Docker injecten. Und wir werden die zwei Dateien einfach an dieser Stelle im Docker Container mounten.
Was sind das für zwei Dateien? Die erste ist die Obstroid Konfiguration, die zweite ist unser Skill. Lasst uns mal anschauen die Konfiguration. Man kann es auch mit Docker Compose, wir werden einfach mit Shell ausführen, man kann es mit Docker Compose, mit Kubernetes, mit alles möglichen laufen lassen.
Die Konfiguration, also Logging, das kann man erstmal skippen, Connector, Matrix. Wir sehen, dass wir hier Umgebungsvariablen nutzen, Access Token, die Räume, Main Room, Debug Room. Das ist eine Sache, wo wir dann sagen, die Nachricht kommt als vom Board, die ist ein bisschen anders.
Man wird gleich sehen, dass die Nachricht doch ein bisschen anders aussieht. Und man wird nicht benachrichtigt, wenn diese Nachricht kommt. Man kann es aber auch ausschalten. Das ist der Connector, wir erinnern uns an das Diagramm, die Connectoren verbinden sich zum Netzwerk.
Und jetzt definieren wir unser Skill, ein Hello Skill, und wir sagen, dass er in diesem Pass liegt. Es gibt andere Möglichkeiten, wie man Skills lädt, man kann es ja auch als Python Module packagen. Also gibt es jede Möglichkeit. Und dann, das Wichtigste, unser Skill.
Ich habe ein Hello Skill genommen, das ist der Standard Skill vom Obstroid. Ich habe ihn runtergeladen vom GitHub und wir werden uns ihn anschauen, ein bisschen ändern. Und darauf werden wir aufbauen.
So sieht er aus. Random brauchen wir um halt ein bisschen Random Choice. Also wir werden dann antworten mit Hi, Hello oder Hey. Einfach zufällig. Was haben wir hier sonst? Wir nutzen den Regex Matcher.
Das heißt, die Nachricht wird über Regex gejagt. Case in sensitive. Und dann, abhängig davon, wenn es matcht, dann wird diese Funktion ausgeführt. Skill brauchen wir halt, um diesen Class zu nutzen. So, was passiert hier? Mit dieser Annotation sagen wir, wenn die Nachricht zu diesem Regex matcht,
dann bitte das ausführen, Text generieren und dann Message respond. Das war's. Das gleiche bei dem Tschüss. Und dann haben wir auch eine Nachricht. Ziemlich simpel.
Was wir machen werden, wir werden das Ding, ich mach's ein bisschen kleiner hier. Ich werde das Ding, ich hab das Ding eigentlich in Deutsch übersetzt. Und nicht viel anders.
Nur die Regex geändert. Ich mach das jetzt zu, damit man sieht. Ein bisschen die Regex geändert und den Text geändert. Also jetzt nicht die Welt. Und wir lassen das jetzt laufen. Wenn ihr in dem FrostCon Matrix Channel seid, könnt ihr das jetzt nutzen.
Nummer eins. Starten Obstroid. Erst jetzt, der hat über die Nacht die Images gelöscht.
Ja, Live Demo. Was kann denn schief gehen? Und das ging ziemlich flott. Was ich aber schon mal machen kann, ist schon mal das Razor Image runterladen. Damit wir das nicht noch mal warten, weil das dauert ein bisschen länger.
Jawohl. Pool complete. Obstroid gestartet. Ein Skill geladen. Hello Skill. Jetzt gehen wir mal in das Dings.
Na komm. Und sagen hier, hallo. Da antwortet der Bot. Auf Hi antwortet der nicht.
Oder ist der jetzt überlastet? Und ich kann ja auch Tschüss sagen. Also nicht Tschüss. Okay, man sieht jetzt auch, der sagt auch bis später. Ja, bis demnächst. Tschüss, bis später.
Also der wählt das random. Okay, dann stoppe ich das. Der zeigt das, weil wir im Debug Modus sind.
Oleb, hast du mitbekommen, dass die Menschen im Chat gefragt haben, wo der Link zu dieser Forstcoin Matrix Raum ist? Ah ja, okay. Ja, ja, ja, mhm. Der Link zu dem Forstcoin Matrix Raum ist hier.
Kann man das gerade sehen? Oder soll ich den in den Chat pasten? Ich paste den in den Chat. Okay. So, das ist relativ einfach. Basiert sich auf dem Standard Simple Hello Bot.
So, jetzt habe ich den gestoppt. Jetzt machen wir weiter. Also wir können ja ein bisschen mehr als einfach mal Hello sagen. Es wird kompletter Python Code ausgeführt. Daher wir können auch ein bisschen mehr machen. Schauen wir mal den Weather Bot.
Das gleiche. Obstroid, Container, Secrets, Skill, Config-Datei. Die Config-Datei ist komplett gleich. Bis auf, ja, denn Skill heißt jetzt Weather. Der liegt jetzt im anderen Pass ein bisschen. Und jetzt haben wir eine Struktur, die heißt Config.
Da haben wir einige Variablen. Wait, cities, eine Liste. Dann haben wir Open Weather Map URL und die App ID und die Units. Kann man schon verstehen, was der Bot machen wird. Wir machen mal den Skill mal auf.
Ja, hier haben wir auch den Regex Matcher. Skill Assink HTTP. Um halt HTTP Request zu machen. Das ist ein bisschen zu groß, glaube ich. Ich versuche mal ein bisschen kleiner zu machen. So, dann wir schauen uns das mal an.
Hier laden wir einfach die Config, die wir in der Konfiguration als dieses Struktur geben. Dann haben wir eine Funktion, die uns eine Wettervorhersage für ein bestimmtes Ort holt.
Aus dem Open Weather Maps. Und dann haben wir einen Regex Matcher, der schaut, wenn in der Nachricht kommt Weather oder Wetter. Und zwar Search. Also wenn es irgendwo in der Mitte kommt, das muss nicht die ganze Nachricht sein.
Das könnte in der Mitte sein. Dann sagt er, ich schaue mal aus dem Fenster oder ich schaue nach dem Wetter. Dann schickt er das. Dann haben wir Config. Parameter Wait. Wartet drei Sekunden. Er muss jetzt zum Fenster.
Und dann sagt er, in der Stadt. Und die Stadt wählt er zufällig. Ist das so viel Grad? Oh, genau. Und schickt das ab. Lass uns das mal anschauen.
Loaded once killed. Und gestartet. So, dann schauen wir mal.
So. Genau. Also in Siegburg ist es 21 Grad. In St. Augustin ist es 21. Ein bisschen mehr als 21,5. So. Somit kann der Bot dann entsprechend auch Aktionen aufrufen.
Irgendwelche Webhooks triggern. Pipelines starten. Siegburg. Also der Welt ist dann zufällig. Ich hoffe, mein freier Account jetzt bei OpenWeatherMap nicht gleich nicht voll sein wird.
Ich weiß nicht, wie viele Requests ich machen darf. Man hat jetzt gesehen, mit dem Regex Matcher kann man relativ gut arbeiten. Man kann Regex definieren.
Man kann das entsprechend kompletter Satz matchen. Man kann so ein Search machen. Also Substring Search machen. Dann auf ein Wort in dem Satz. Aber das ist dann, wie kann man es besser machen?
Was unterscheidet das als mit einer normalen Person, wenn man mit einer normalen Person was schreibt? Der Kontext, das sind nicht einfach die Wörter, sondern der Kontext der Nachricht. Und hier kann man wirklich dann RASA nutzen, um den Bot noch ein bisschen klüger zu machen.
Noch ein bisschen besser zu verstehen, was man denn meint. Hängt natürlich alle von den Trainingsdata. Wie ihr gesehen habt, vielleicht vor ein paar Tagen, dass der Bot nicht perfekt ist.
Der Unterschied aber, wenn man sich verzippt, wenn man die Wörter hin und her wechselt oder Klein-Großschreibung macht, wird er trotzdem antworten. Wir werden das jetzt gleich schauen. So, im nächsten Beispiel. Ich stoppe den jetzt.
Ich schaue mal, ob RASA jetzt runtergeladen wurde. Ja, wurde runtergeladen. Perfekt. Also die Basis haben wir. Und wir schauen uns das nächste Beispiel. Das ist jetzt ein bisschen komplizierter, aber nicht allzu kompliziert.
Weil wir werden jetzt, um halt mit Buzzwords rumzuschlagen, wir werden jetzt neuronale Netzwerke nutzen, um unsere Bots zu bauen. So sieht es denn nämlich aus. Sieht genauso aus. Wir werden die Container linken, weil wir werden RASA im Container starten.
Secrets genauso. Init, also der Scale genauso. Konfiguration genauso. Es kommt hinzu der RASA-Konfig. Der macht den, der nimmt den, der obstreut und schickt dann RASA und trainiert damit das Modell. Wir werden uns gleich schauen, wie man das macht.
So, natürlich brauchen wir auch RASA. Und RASA startet man so. Ja, wir nehmen und dann sagen wir, dass das API enablen soll. Und ein sehr secures Token. Weil es sowieso im lokalen Netzwerk läuft. Also wenn es im Internet läuft, sollte man vielleicht ein komplizierteres Passwort oder gar nicht laufen lassen.
Dann braucht man Konfiguration für Obstroid. Bis jetzt sieht das alles genauso aus, weil das ist ja Matrix-Connector.
Und dann konfigurieren wir den Panzer, der heißt RASA-NLU. Wir gehen in die URL, wo RASA Rest-API lauscht. Und wir gehen in den sehr securen Token. Und was Obstroid macht, Obstroid schickt, also trainiert das Modell, lädt das Modell in RASA.
Dann schickt er die Nachricht, die er bekommen hat, zum RASA. Und RASA sagt ihm, okay, ich habe diese Intents, heißen die. Und zu jedem Intent sagt er, wie viel Prozent er glaubt, das wäre diese Bedeutung zu dieser Nachricht.
Und wir sagen, wir nehmen diesen Intent, der mindestens 99,99 Prozent zuschlägt. Wir können hier noch einen neuen hinzufügen. Das hängt aber von den Trainingsdaten. Je mehr Daten, je mehr Überschneidungen zwischen den Beispielen werden wir gleich sehen.
So, danach haben wir den Skill. Dann nähen wir jetzt an das Conference Assistant. Der liegt jetzt im anderen Verzeichnis. Und da ist die Custom-Config. Das habe ich einfach gemacht, um zu zeigen, dass wir hier auch Variablen aus der Config nutzen können,
damit wir die nicht fest verraten in dem Code. Hier gibt es Link und eine Antwort. So, jetzt schauen wir uns die RASA-Konfiguration, dieses Intents YAML. Den Syntax kann man auf der RASA-Webseite sich anschauen.
Versions 2, language.de. Dann eine Liste von Intents. Intent ist sozusagen eine Bedeutung. Das heißt Question Program. Also diese Intents werden wir bei uns im Skill nutzen, um darauf zu reagieren.
Jetzt das NLU-Modell, was eigentlich dann trainiert wird. Wir sagen Intent und dann geben wir Examples. Sehr einfache Beispiele. RASA ist viel, viel mächtiger als das. Aber um einen Überblick zu schaffen, was RASA kann.
Hier sind die Beispiele. Anhand dieser Beispiele wird RASA-Modell trainiert. Und wenn ich mich hier irgendwo vertippe, dann wird es trotzdem übereinstimmen zum gewissen Prozent. Je weniger der Satz, je mehr der Satz sich diesem Satz nicht ähnelt,
die gehen die Prozente runter. Dann gibt es andere Beispiele. Zu jedem Beispiel gibt es dann einen Intent, den wir hier auflisten.
Damit wird RASA-Modell trainiert. Das macht auch der Obstroid komplett automatisch für uns. Dann müssen wir nur die Datei da in den Container mounten. Jetzt schauen wir uns den Skill an. Der ist ein bisschen größer, weil hier einfach mehr Antworten da sind. Wir sehen, wir nutzen hier den Regex-Matcher und den RASA-Matcher.
Random, alles bleibt gleich. Das ist die Config-Datei. Laden. Dann nutzen wir, wir können mischen. Wir nutzen den Regex-Matcher, um auf Hallo zu reagieren.
Aber für alles andere, das ist genauso wie im Hello-Bot. Nur wir fügen hier nochmal, ich bin ein Konferenz-Bot, frag mich etwas. Und jetzt kommt der RASA-Matcher mit einem Intent. Und dann die Antwort auf dieses Intent. Das heißt, das Heavy-Lifting macht für uns das RASA zum Matchen die Nachricht.
Und wir sagen uns einfach, wenn das Intent ist, dann das ist die Antwort. Und jetzt probieren wir es. Zuerst müssen wir RASA starten.
Die Datei habt ihr schon gesehen. Ein Container. RASA braucht ungefähr 4 GB RAM, weil es ist ressourcenkundig. Zumindest beim Trainieren der Modelle, beim Laden der Modelle, braucht es auch ein bisschen Speicher.
Aber da wir beides gleichzeitig machen, weil der Obstroid das für uns macht, braucht man ein bisschen RAM dafür. Ok, RASA-Server ist gestartet. Jetzt starten wir den Obstroid.
Da, da, da. So. Der schaut, welche Version von RASA ist. Und dann startet das Modell-Training. Wir werden sehen hier, das ist RASA. Der trainiert das Modell.
Oh, ich hoffe, das Speicher reicht. Ja, 4 GB reicht. Ok. Der trainiert dann das Modell.
Fertig. Und jetzt lädt er das Modell. Jetzt wird das Modell geladen. Und sobald es geladen ist, macht der Obstroid einen einfachen Test, schickt eine leere Nachricht, kriegt eine leere Antwort. Oder eine Standard-Antwort. Und dann sagt er, ok, Received Message with Intent, Confidence.
Das ist die Confidence. Das ist die Prozent-Anzahl. Wir können es ja gleich debuggen. Und damit ist der Obstroid auch gestartet. Und jetzt kann man es auch tatsächlich testen.
Was hatten wir hier für Intents? Wo finde ich das Programm? Wo ist das Vortragsprogramm? Wird jemand über Matrix erzählen? Jetzt warte ich einfach. Jetzt kann man die Nachricht nehmen.
Ich habe das vielleicht vergessen. Man sieht, dass es trotzdem zuschlägt. Obwohl, das schlägt trotzdem zu.
Weil, wenn wir jetzt hier schauen, in dem Debug-Log, Text, wo finde ich das Programm? Die AD-Programm. Confidence 1.0. Da ich da die Sprache Deutsch eingestellt habe, beachtet er das überhaupt nicht.
Weil, der sagt wahrscheinlich, Artikel hin und her, ist jetzt egal. Deshalb sagt er, Complete Match. Wo Programm? Confidence 1.0.
Vielleicht etwas anderes. Vielleicht mal ein anderes. Wird jemand über Matrix erzählen? Wer wird über Matrix erzählen?
Also, man könnte noch, wenn man sieht, dass er zum Beispiel darauf reagiert und man möchte nicht, dass er das so interpretiert,
weil hier ist das wirklich nur das Programm, das Wort. Hier könnte man die Confidence eigentlich hochstellen. Man könnte hingehen in die Konfiguration und sagen, hier noch eine 9 kommt dazu.
Und dann wird er ein bisschen strenger sein. Wenn man hier eine 1.1.0 stellt, dann muss das 100% zustimmen. Dann braucht man natürlich kein Raser, dann kann man auch gleich String Matching machen. Aber trotzdem, ich mache das mal. Speichern.
Stoppen. Neustarten. Jetzt werden wir wahrscheinlich an. Der trainiert das neue Modell. Also Raser ist auch sehr mächtig. Und als ich dieses Modul refactored habe, gefixt habe für die Raser 2 Version, habe ich gesehen, oh, da können wir aber viel mehr machen.
Und ich muss das noch machen. Da hängt noch ein Merge Request, ich muss das noch ein bisschen überarbeiten. Da kann man noch einiges aus Raser durch Obstroid holen.
So, 30 Sekunden hat es gedauert, bis das Modell trainiert wurde. Der sagt jetzt allerdings nicht, wie lange es dauert, das zu laden. Aber der Code dafür ist schon da. Ich muss nur kommitten. So, jetzt ist er wieder zurück.
Genau, also das haben wir auch. Mit Neko und Matrix Clients. Also wie man sieht, ist das auch ein bisschen näher an das, was eine Person interpretieren würde.
Jetzt mal einmal Folgendes. Jetzt schauen wir uns, wie können wir das noch erweitern?
Wenn man sieht, was ist Matrix, kommt nichts. Aber das wollen wir ändern. Wir wollen ja, dass der Bot sagt, was ist Matrix. So, und ich mache das so wie in den Kochsendungen.
Ich habe schon alles vorbereitet, alles schon vorgekocht. Wir mischen das einfach mal. Wir machen mal Folgendes so. Zuerst müssen wir ein neues Intent hinzufügen. Das habe ich hier glücklicherweise schon hinzugefügt. Aber dazu habe ich keine Beispiele.
Jetzt fügen wir hier hinzu. Ein neues Intent, der sagt, was ist Matrix. Und dann die Beispiele dafür. Bam, Speichern. Und auf dieses Intent, der ist hier aufgelistet.
Und dazu haben wir Beispiele. Und auf dieses Intent müssen wir uns dann in unserem Skill beziehen. Jetzt nehmen wir unser Skill und fügen hier ein. Ich werde gleich erzählen, was ich hier mache. Fügen hier einfach hinzu.
Fügen hier einfach hinzu. Was passiert hier? Question, Rasa NLU, Intent. Und die Message heißt, Matrix ist ein offenes Unterricht. Wenn du mehr Infos brauchst, schau dahin. Übrigens bei den Antworten haben wir auch die Konfig hier benutzt.
Hier haben wir zum Beispiel die Sachen aus der Konfig benutzt. Kann man auch, wenn man so einen generellen Bot baut. Wenn man so viel wie möglich Hardcoding dann in die Konfig auslagert.
Jetzt stoppen wir. Schauen wir mal, was passiert. Stoppen wir und starten das nochmal. Starte Obstroid, schickt ihr das Modell an Rasa. Rasa trainiert das Modell.
Wir nutzen hier Default für Rasa. Das kann man beliebig twicken. Wenn man in die NLU, also in die Algorithmen sich reinschaut. Dann kann man auch die entsprechenden, da gibt es Featureisers, Tokenisers und so weiter.
Die schneiden den Satz in Wörtern. Dann für diese Wörter verschiedene Varianten. Super kompliziert, aber es funktioniert wunderbar. Jetzt wird das Modell geladen in dem neuen Merge Request.
Wenn das Modell sich nicht ändert, dann wird er auch die nicht neu trainieren.
Dann wird er einfach schneller geladen. Zum Beispiel wenn hier LOL kommt, dann matcht das gar nicht. Dann sagt er Minimum Score reicht nicht. Ich weiß nicht, was das für Nachricht ist. Darauf können wir auch reagieren.
Aber zur Zeit machen wir das nicht. Und diese Score ist die Minimum Score. Die haben wir hoch gedreht. Jetzt ist er gestartet. Jetzt sagen wir nochmal, was ist Matrix. Matrix so klein.
Und jetzt reagiert er darauf. Weil wir jetzt ein neues Skill angeeignet haben. So und das war es eigentlich für die Demo. Also Case ist eigentlich Matrix so klein.
Ich glaube sogar das würde matchen. Jetzt weiß man nicht worauf er jetzt reagiert. Aber ich kann es schauen. Er hat darauf reagiert. Und nicht auf meine Nachricht.
Meine Nachricht hat nämlich eine 9 gefällt. Man sieht es gerade so hat es noch fast gepasst. Wenn ich das nicht angepasst hätte, hätte er auch darauf reagiert.
Das war es.