Telegram Bot – Hirn ist aus

In einem früheren Post hatte ich ja schon über den Telegram Bot als Interface für die Heimautomatisierung geschrieben und die Idee, nicht-Kommandos über einen ChatBot zu bearbeiten. Die Idee ist inzwischen etwas weiter gedacht und erheblich komplexer geworden.

Projekt: Telegram Bot

Kontakt: Boris Dirnfeldner

Link: – eigenes Projekt –

Grundsätzlich wäre es (auch für andere Projektideen) schön, wenn man sich mit dem Gerätenetzwerk unterhalten könnte ohne eine Reihe von Kommandos lernen zu müssen. Die aktuellen Assistenten von Google und Amazon sind da schon recht weit, aber aus einer Reihe von Gründen uninteressant:

  • Die Dinger sind Datenkraken. Ich lege überhaupt keinen Wert darauf das diese Firmen in diesem Bereich Daten sammeln, auch wenn die Lösungen wirklich gut sind und weitestgehend (für Private) kostenlos
  • Der Lerneffekt ist nahe Null. Die Arbeit reduziert sich auf Integration und geringe Anpassungen. Damit kann ich dann zwar genau das was die Umgebung liefert, habe aber darüber hinaus keinerlei Hintergrundwissen aufgebaut
  • Die Optionen zur Anpassung sind gering. Der Kern ist bereits erheblich zu komplex und in vielen Teilen auch nicht zugänglich. Sich da reinzufuchsen und zu lernen ist praktisch nicht möglich. Das Argument gilt natürlich auch bei anderen Frameworks, aber dort ist häufig die Architektur viel klarer dokumentiert, man kommt an alles ran und kann sich in die interessanten Aspekte einarbeiten
  • Erhebliche Teile der Lösungen sind auf die Server der Betreiber ausgelagert. Eine lokale Lösung ohne Internet-Verbindung ist faktisch unmöglich zu realisieren (versucht mal Alexa ohne Internet zu betreiben!).
  • Wenn man sich etwas mit den Assistenten beschäftigt hat, stellt man fest das die Dinger zwar inzwischen recht viele Funktionen haben (gerade mit den zusätzlichen Skills von Dritten), aber letztendlich recht eingeschränkt im Verständnis sind. Eigentlich lernt man als Benutzer die erforderliche Sprachstruktur der Assistenten. Natürliche Sprache ohne Schlagworte oder fehlende Disziplin beim Aufbau der Kommandos führen zu unterhaltsamen, aber nicht richtigen Reaktionen.
    Allerdings sind Aufweckwörter bei Assistenten, die alles auf Drittserver übertragen, eigentlich eine sehr gute Idee.

Damit sind diese Assistenten für mich uninteressant und werden auch weitestgehend vermieden (zumindest als Plattform). In einzelnen Geräten sind die Dinger auch bei mir drin, einfach weil in der Konsequenz manche Gerätegattungen (z.B. Smart TV) einfach zu begrenzt sind. In den Eigenbauten aber nicht.

Als einen ersten Versuch habe ich einen einfachen ChatBot aufgesetzt (ChatterBot). Das Teil ist in Python implementiert und recht intuitiv einzurichten. Die Anbindung an Telegram wie vermutet kein echtes Problem und schnell erledigt.
Trainiert wird das System über Konversation (online oder aufgezeichnet), das von System auf Frage-Antwort Szenarien umgesetzt wird und nach Wahrscheinlichkeit dann ausgegeben wird.
Die Lösung erlaubt auch sehr komfortabel die Einrichtung von einfacher, programmierter Logik (über Logikadaptern).

Man kann damit in relativ kurzer Zeit schon Gespräche mit dem System führen und mit entsprechendem Trainingsmaterial sicher auch relativ plausibel kommunizieren. Allerdings ist es auch offensichtlich das dieses System keine Ahnung vom Inhalt der Texte hat und einfach nur plappert was passt (oder auch nicht). Ebenso fehlt eine Merkfähigkeit und Kontext ist praktisch nicht existent. Damit kann kein Gespräch über das Niveau von billigsten Smalltalk durchgehalten werden. Auch ist die Basislogik für englische Sprache aufgebaut und ohne Überarbeitung mit deutschen Texten deutlich schwächer.

Also braucht das System Hirn, und damit wird das alles sehr komplex und in weiten Teilen erst mal theoretisch.

Nach einiger Recherche im Netz bin ich auf den Begriff NLP (Natural Language Processing) gestoßen. Mit dieser Technik kann das System eine Art von Verständnis über den eingegeben Text erhalten und mit den Strukturinformationen dann z.B. den Kontext erkennen. Das ganze Gebiet ist mit Sicherheit umfangreich genug für jahrzehntelanges Studium und rumprobieren.

In der Praxis gibt es hier schon eine ganze Reihe von Frameworks die viel der Theorie in Code umgesetzt haben (und es weiter tun). Ein interessanter Vertreter hier ist spaCy. Auch hier kann man sich lange spielen, aber auch das soll erstmal nicht Ziel sein.
Eigentlich will ich ja ein transparentes System, das diese Theorien bereits implementiert hat und mir die Option gibt daraus Nutzen zu ziehen und anhand von praktischer Anwendung zu lernen (oder zu versagen beim Versuch).

Weitere Recherche zeigte mir, das auch hier bereits Lösungen geschaffen wurden, die den Ansatz bereits recht weit getrieben haben. Ein für mich sehr interessanter Kandidat hierzu ist sicher Rasa. Die Firma dahinter baut intelligente Chatbots, hat aber erhebliche Teile des Frameworks als Open Source im Netz zur Verfügung gestellt.

Es beinhaltet als Logik neben spaCy auch andere Ansätze und Strategien, die je nach Bedarf und Implementierungsstrategie eingesetzt werden können (oder auch nicht). Das System besteht aus mehreren Komponenten und bietet ein umfassendes Framework für genau diese Problemstellung. Leider ist es auch entsprechend Komplex und damit auch nicht mehr in einem Abend zusammengebastelt. Für das Thema ist das aber auch unmöglich, und die Dokumentation ist schon recht ordentlich.

Fazit:

Mit einer einfachen Lösung wird hier gar nichts erreicht werden. Auch sehr gutes Training auf einen Bot ohne Intelligenz wird letztendlich ein “Eliza” erzeugen ohne Sachverstand. Und das hat dann auch keinen Mehrwert zum jetzigen Kommando-Bot.

Obgleich geringe Prio, wird das Thema weiter verfolgt und wahrscheinlich mal ein Prototyp mit Rasa aufgebaut. Je nach Aufwand kann das System ja dann weiter über die Zeit trainiert und verbessert werden, aber das ist erstmal noch Zukunftsgeschichte.

 “Es kann keinen Flug geben ohne vorangegangene Träume vom Fliegen” (Stanislaw Lem).

Telegram Bot – Hirn ist aus

In einem früheren Post hatte ich ja schon über den Telegram Bot als Interface für die Heimautomatisierung geschrieben und die Idee, nicht-Kommandos über einen ChatBot zu bearbeiten. Die Idee ist inzwischen etwas weiter gedacht und erheblich komplexer geworden.Projekt: Telegram Bot ...
Weiterlesen …

Telegram Bot – Chat mit Raspberry

Mittelfristiges Ziel ist, die ganzen Projekte zusammen zu schließen und auch von außen sicher zu nutzen. Dazu ist ein kleiner Versuch zur Anbindung von Telegram an einen Raspberry gestartet worden. Am Ende ist ein funktionierender Telegram Bot in Python auf ...
Weiterlesen …

Telegram Bot – Chat mit Raspberry

Mittelfristiges Ziel ist, die ganzen Projekte zusammen zu schließen und auch von außen sicher zu nutzen. Dazu ist ein kleiner Versuch zur Anbindung von Telegram an einen Raspberry gestartet worden. Am Ende ist ein funktionierender Telegram Bot in Python auf einem Raspberry rausgekommen, mit dem vom Handy aus gequatscht wird.

Projekt: Telegram Bot

Kontakt: Boris Dirnfeldner

Link: – eigenes Projekt –

Nach einiger Suche zu Lösungen zur benutzerfreundlichen Anbindung an die eigenen Lösungen bin ich über die API von Telegram gestolpert und die wirklich mächtige Funktionalität der Bots.

Als Einstieg zu dem Thema hat Telegram selbst eine recht ordentliche Seite.

Grob gilt es folgende Schritte zu tun:

  • Erzeuge einen neuen Telegram-Bot über einige Messages mit dem Telegram-Bot “Botfather”. Nach erfolgreicher Erzeugung ist der Bot aktiv und man hat einen exklusiven Schlüssel für den Zugriff
  • Danach geht es daran, den Bot an sich zu entwickeln. Die Telegram-Server funktionieren als Vermittler zwischen den Clients (der App auf den Smartphone) und dem Server (der Python Anwendung auf dem Raspberry). Alle Seiten müssen sich auf den Servern anmelden, damit die Kette funktioniert. Der Bot ist immer aktiv, wenn also nur der Client angemeldet ist antwortet halt keiner. Ohne Client hört halt keiner zu.
    Die Bot-Applikation autorisiert sich gegenüber Telegram über den Schlüssel.

Für Python gibt es einen sehr guten Wrapper um die Telegram-API, zu finden hier.
Da sind auch die erforderlichen Dokumentationen und ein Tutorial zu finden.

Ich habe für meinen Bot ein Paar Kommandos eingerichtet und eine Sicherheitsschicht über User IDs. Die muss ich einmal rausfinden (durch eine Nachricht an meinen Bot). Da ich einen Bot nicht privat schalten kann, muss ich zwischen “autorisierten” Benutzern und Besuchern unterscheiden. Ebenso kann ich Nachrichten auch nur an bestimmte Benutzer “privat” schicken und so die Benutzer komplett von der Infrastruktur isolieren.

Wenn keine Kommandos kommen, könnte ich mich z.B. auch mit einer Instanz von ChatterBot unterhalten. Das habe ich mir dann aber gespart, zumal es keinen zusätzlichen Nutzen für mich hat. Aktuell liefet ein Standard-Handler einfach einen Satz zurück. Der Spieltrieb ist manchmal schon übel.
Die Unterhaltungen der einzelnen Clients mit dem Bot sind getrennt voneinander. Wenn also zwei verschiedene Personen verbunden sind, können diese sich nicht untereinander belauschen. Eine Gruppe ist mit Bots nicht möglich.

Die Telegram-Infrastruktur ist in Bezug auf die Nachrichten sehr mächtig und erlaubt eigentlich alle relevanten Medien zu empfangen und zu übertragen.
Ich werde später damit auf Anforderung z.B. Grafiken mit Temperaturverläufen vom Pool anfordern können oder auch nur Alarme von Geräten aufs Handy geschickt bekommen.

Probleme:

Primär mit der API, um nach dem supereinfachen Einstieg das Thema Security voran zu bekommen. Nach etwas rumprobieren und Recherche der Dokumentation ist aber alles lösbar gewesen und eigentlich ohne echte “Klippen”.

Fazit:

Die vorhandene Lösung ist bereits gut einsetzbar und leicht zu erweitern. Sobald das Thema Home Automation weiter getrieben wird und die entsprechenden Projekte eine ausreichende Reife erhalten, wird der Bot auch (zumindest für Teile der Funktion) eingebunden.

“Dif-tor heh smusma”

Komponenten:
Rechner: Raspberry PI 3B+
Language: Python
Runtime: Raspbian
Smartphone mit Telegram App

Überlegungen:
Telegram: Ein recht sicherer Messaging-Dienst, kostenlos und nicht der Google Datenkrake zugehörig. Außerdem eine sehr mächtige API zur Anbindung von Applikationen.

Schäden:
– mal zur Abwechslung keine –

Telegram Bot – Hirn ist aus

In einem früheren Post hatte ich ja schon über den Telegram Bot als Interface für die Heimautomatisierung geschrieben und die Idee, nicht-Kommandos über einen ChatBot zu bearbeiten. Die Idee ist inzwischen etwas weiter gedacht und erheblich komplexer geworden.Projekt: Telegram Bot ...
Weiterlesen …

Telegram Bot – Chat mit Raspberry

Mittelfristiges Ziel ist, die ganzen Projekte zusammen zu schließen und auch von außen sicher zu nutzen. Dazu ist ein kleiner Versuch zur Anbindung von Telegram an einen Raspberry gestartet worden. Am Ende ist ein funktionierender Telegram Bot in Python auf ...
Weiterlesen …
Wir benutzen Cookies und Logs mit personenbezogenen Daten ausschließlich für essentielle Funktionen wie z.B. bei der Benutzeranmeldung oder der Fehlersuche. Für Videos werden weitere Cookies von Drittanbietern benötigt. Details finden sie unter dem Link "Weitere Informationen".