Zum Hauptinhalt Zur Navigation

Sprachassistent Leon: Basteln am virtuellen Hirn des eigenen KI-Assistenten

10.000 Stars bei Github und vollmundige Versprechungen der Entwickler: Der quelloffene virtuelle Sprachassistent Leon scheint besonders attraktiv. Zwar ist er es (noch) nicht, einen Blick ist er trotzdem wert.
/ Thorsten Müller
4 Kommentare News folgen (öffnet im neuen Fenster)
Die Erwartungungen an Leons virtuelles Gehirn sollte nicht zu hoch sein. (Bild: Bild: KI-generiert mit Stable Diffusion / Golem.de)
Die Erwartungungen an Leons virtuelles Gehirn sollte nicht zu hoch sein. Bild: Bild: KI-generiert mit Stable Diffusion / Golem.de

"Du kannst dir Leon als dein virtuelles Gehirn vorstellen" : Die Projektseite des persönlichen virtuellen Assistenten auf Github(öffnet im neuen Fenster) stapelt nicht gerade tief und weckt hohe Erwartungen. Hoch ist daher auch das Frustpotenzial.

Leons Fähigkeiten - oder neudeutsch: Skills - sollen Anwender unter anderem dabei unterstützen, tägliche Routineaufgaben zu automatisieren. Der Assistent steht als Open Source zur Verfügung, die Interaktion zwischen ihm und seinen Anwendern kann entweder, wie bei anderen persönlichen Assistenzsystemen, sprachbasiert oder auch textuell sein. Wichtig ist der Hinweis des Entwicklers: "can live on your server" - kann also auf der heimischen Infrastruktur betrieben werden. Das dezente "can" wird gleich noch wichtig.

Offline oder nicht

Wer sich nach offenen (Sprach-)Assistenten jenseits der cloudbasierten Produkte großer Technologieunternehmen umschaut, den beschäftigt nicht selten die folgende Frage: Kann dieser Sprachassistent offline betrieben werden? Sei es aus Gründen des Datenschutzes oder vielleicht, weil keine durchgehende oder stabile Internetverbindung gewährleistet werden kann.

Für Leon lautet die klare Antwort: jein. Und so ist auch das "can live on your server" zu verstehen. Möchte man mit seinem persönlichen Assistenten ausschließlich in Textform kommunizieren, so kann Leon ohne internetabhängige Dienste betrieben werden. Wer aus einem persönlichen Assistenten einen persönlichen Sprach-Assistenten machen möchte, der muss etwas ins Kleingedruckte schauen.

Wenig überraschend ist, dass dafür Komponenten für Spracherkennung (STT) und Sprachausgabe (TTS) benötigt werden. Hier bietet Leon eine breite Auswahl an möglichen Optionen. Im Bereich der Spracherkennung (STT) werden aktuell drei Möglichkeiten angeboten: Google Cloud, IBM Watson, Coqui STT. Die Unterstützung von zwei weiteren Diensten (Alibaba Cloud und Microsoft Azure) zur Spracherkennung ist laut Entwickler geplant. Davon ist Coqui STT die einzige Option, die lokal betrieben werden kann.

Vergleichbar sieht es im Bereich der Sprachausgabe (TTS) aus. Derzeit werden die vier Dienste Google Cloud, AWS, IBM Watson und CMU Flite unterstützt. Geplant ist, analog zu STT, noch die Alibaba-Cloud- und Microsoft-Azure-Unterstützung. Hier bildet CMU Flite die einzige offline lauffähige TTS-Komponente.

Natürlich ist jeweils eine lokal lauffähige Option für STT und TTS ausreichend, wenn man nicht beim weiteren Lesen der Dokumentation folgenden Hinweis sehen würde: "The offline STT and offline TTS only work for the en-US language. More languages will come later." Derzeit scheint der Offline-Sprachbetrieb nur in englischer Sprache zu funktionieren. Wobei zumindest Coqui STT prinzipiell auch die deutsche Sprache unterstützt.

Zusammengefasst bedeutet dies: Leon als Sprachassistent kann derzeit im englischsprachigen Betrieb lokal oder im deutschsprachigen Einsatz mit Cloudsprachdiensten betrieben werden.

Auf die Registrierung bei Clouddiensten und der Beantragung von API-Schlüsseln wurde im Rahmen dieses Artikels verzichtet und Leon stattdessen für den lokalen und englischsprachigen Betrieb konfiguriert. Genutzt wurde die Version 1.0.0-beta.7.

Leon: Voraussetzungen & Installation

Die notwendigen systemischen Voraussetzungen sind: Python 3 (getestet mit Version 3.9), pip, pipenv, NodeJS mindestens in Version 16 und npm in Version 8 oder höher. Als unterstützte Betriebssysteme nennt die Dokumentation Linux, MacOS und Windows.

Für Ubuntu kann eine aktuelle Version von NodeJS gemäß der Anleitung von Nodesource(öffnet im neuen Fenster) heruntergeladen und installiert werden. Eventuell sind Buildwerkzeuge wie gcc, g++ und make für die Installation notwendig.

    # curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
# sudo apt-get install -y nodejs

Sollte die Installation nicht funktionieren, könnten eventuell ältere und bereits installierte NodeJS-Versionen die Ursache sein und sollten vorher deinstalliert werden.

Für die Einrichtung und Verwendung von Leon ist es essenziell, dass der Befehl pipenv ausführbar ist. Sofern er noch nicht auf dem System verfügbar ist, kann die Installation entweder per pip install pipenv oder per sudo apt-get install pipenv durchgeführt werden. Im Falle der "pip"-Installation muss der Pfad zur ausführbaren pipenv -Datei in die PATH-Umgebungsvariable des Systems aufgenommen werden (zum Beispiel: /home/

ᐸbenutzernameᐳ/.local/bin/

).

Für die eigentliche Leon-Installation (öffnet im neuen Fenster) stehen mehrere Möglichkeiten bereit. Für diesen Artikel wurde die manuelle Installation der stable -Version von Github verwendet.

    # git clone -b master https://github.com/leon-ai/leon.git leon
# cd leon
# npm install

Sofern der Schritt mit "Leon is installed and ready to go" quittiert wird, kann der aktuelle Stand noch mit npm run check überprüft werden. Die Warnungen rund um Sprachverarbeitung wie STT und TTS können ignoriert werden, da diese Teile bisher noch nicht konfiguriert wurden.

Nach einem npm run build und npm start wird die Leon-Instanz gestartet und steht per Browser unter http://localhost:1337 zur Verfügung. Hier können erste englischsprachige textuelle Versuche unternommen werden.

Herausforderungen während Installation und Start von Leon

Bei der Installation und dem Start von Leon sind wir einigen Herausforderungen begegnet, welche bei den eigentlich simplen Installationsschritten unerwartet kamen und leichtes Frustpotenzial mit sich brachten.

So ist in der Datei Pipfile im Unterverzeichnis /bridges/python eine Python-Version 3.9.10 fest hinterlegt. Dies ist verwirrend, da Leon auch mit anderen Python-3-Versionen gestartet werden kann, aber möglicherweise Folgeprobleme mit sich bringt. Eventuell ist es hilfreich, die tatsächlich installierte Python-Version in der Datei einzutragen.

Eine nicht im PATH befindliche pipenv -Anwendung führte ebenfalls zu frustrierenden Fehlermeldungen, deren Inhalt nicht direkt pipenv als Ursache vermuten lässt. Unter anderem konnte das Python-Paket tinydb, welches von Leon Skills zum permanenten Speichern von Daten verwendet wird, nicht installiert werden, was zum Abbruch der Installation führte.

Wird beim Start von Leon auf der Kommandozeile in Endlosschleife die Meldung "Trying to connect to the TCP server ..." ausgegeben, lohnt sich ein Blick in die Logfiles des lokalen Systems. Eventuell wird eine eingehende Leon-Localhost-Verbindung von Sicherheitsmechanismen des Betriebssystems unterbunden.

In Summe führt die Kombination aus mangelnder Erfahrung mit Leon, aktuellem Umbau an der Software sowie derzeit nicht gepflegter Dokumentation zu einigen frustrierenden Momenten. Dank Hartnäckigkeit, Internetrecherche und etwas Kreativität können die Probleme aber beseitigt und Leon installiert und verwendet werden.

Leon-Funktionen alias Skills

Nachdem unser - noch unkonfigurierter - persönlicher Assistent läuft, stellt sich die Frage nach dessen Fähigkeiten. Diese werden als Skills bezeichnet und teilen sich in die Kategorien Spiele, Nachrichten, Produktivität, Wetter und viele mehr auf. Eine Liste aller Kategorien und ihrer zugehörigen Skills findet sich entweder im Github Repository des Projektes (öffnet im neuen Fenster) oder auf der lokalen Installation im Unterverzeichnis skills .

Unter den verfügbaren und modular aufgebauten Skills befinden sich ein Zahlen-Ratespiel, eine To-Do-Liste, die Möglichkeit einen Speedtest durchzuführen, ein obligatorisches Witze-Skill und einiges andere. Das gefühlte Niveau der verfügbaren Witze ist natürlich sehr subjektiv. Wobei der Autor dieses Artikels Witzen wie diesem durchaus etwas abgewinnen kann:

Human: What do we want?!
Computer: Natural language processing!
Human: When do we want it?!
Computer: When do we want what?

Die mitgelieferten Skills funktionieren ohne programmtechnische Anpassungen im Code. Kleinere Anpassungen wie Änderungen der Antworten eines Skills oder der Schlüsselwörter, auf die ein Skill reagiert, können in JSON-basierten Konfigurationsdateien vorgenommen werden. Durch eine einheitliche Struktur der Skills findet man sich in unterschiedlichen Skills schnell zurecht, sofern der grundsätzliche Aufbau einmal verstanden wurde. Dieser wird hier am Beispiel des To-Do-Listen-Skills beschrieben.

Im config -Unterverzeichnis eines Skills liegen, pro unterstützer Sprache, JSON-Konfigurationsdateien. Diese beinhalten Phrasen, die Leon mit diesem Skill verknüpft, sowie eine Liste möglicher Antworten auf Benutzeranfragen. Werden hier Anpassungen an den Triggerwörtern durchgeführt, also an den Wörtern, die ein Skill aktivieren, muss Leon durch Aufruf von npm run build darauf trainiert werden.

Simple Skills, die nur statische Antworten auf gewisse Schlüsselwörter geben, kommen bei Leon gänzlich ohne Programmierung von Javascript oder Python aus. Für diesen Zweck müssen lediglich JSON-Textdateien bearbeitet werden.

Für Skills, die mehr Geschäftslogik oder Dynamik beinhalten, ist die Erstellung von Python-Code notwendig. Aber hier bieten sowohl die Dokumentation als auch ein Blick in bestehende Skills einen guten Einstieg.

Skills können bedarfsweise auch Daten speichern, die nach einen Neustart von Leon erhalten bleiben. Dazu wird eine db.json im Skill-Unterverzeichnis memory angelegt, welche die aufbewahrungswürdigen Informationen beinhaltet. Ein Beispiel dafür ist das Einkaufslisten-Skill mit den jeweiligen Einträgen pro Einkaufsliste.

Eigene Skills

Wer ein simples Frage-und-Antwort-Skill erstellen möchte, benötigt keine Programmierkenntnisse, da hier keinerlei individuelle Anwendungslogik notwendig ist. Lediglich die Triggerwörter des Skills sowie eine Liste von passenden Antworten sind in einer JSON-Datei zu hinterlegen.

Werden mehrere mögliche Antworttexte im Skill hinterlegt, so entscheidet Leon per Zufallsprinzip, welche der Antworten Anwendern präsentiert wird. Das folgende Beispiel zeigt die englischsprachige JSON-Datei eines simplen Frage/Antwort -"Hello-World-Golem-Skills" und basiert auf der Vorlage des mitgelieferten "good_bye"-Skills.

Und so sieht das Ganze dann bei Nutzung über die Leon-Oberfläche aus:

Natürlich verdient ein solches Skill noch nicht unbedingt das Prädikat "smart". Jedoch zeigt es den prinzipiell simplen Aufbau eines eigenen Skills, den auch Anfänger ohne große Vorkenntnisse umsetzen können. Für die Umsetzung komplexerer Fähigkeiten benötigt man die Erstellung von Python basiertem Programmcode.

Konfiguration

Die Konfiguration von Leon ist anhand von Variablen aufgebaut, welche in der Datei .env im Leon-Basisverzeichnis hinterlegt sind. Eine vollständige Erklärung zu den verfügbaren Konfigurationsparametern findet sich auf der Konfigurationsseite der Projektdokumentation(öffnet im neuen Fenster) .

Einige Einstellungsmöglichkeiten sind die von Leon verwendete Sprache, die Zeitzone, die Netzwerkerreichbarkeit von Leon sowie STT- und TTS-Parameter.

Sprachfunktionalität hinzufügen

Da Leon im Textmodus bereits Antworten geben kann, ist es Zeit, die Sprachfunktionen hinzuzufügen. Da auf Cloudabhängigkeit verzichtet werden soll, wird der Parameter LEON_TTS auf true und LEON_TTS_PROVIDER auf flite (Standardwert) gesetzt, welches lokal verwendet werden kann.

Damit die Offline-TTS-Lösung funktioniert, muss nach Anpassung der Variablen npm run setup:offline-tts ausgeführt werden. Nachdem Leon mittels npm start wieder gestartet wurde, erfolgt auch eine englische Sprachausgabe. Die Erwartungshaltung an die Qualität dieser künstlichen Stimme sollte jedoch nicht zu hoch gesetzt werden, um unnötige Enttäuschungen zu vermeiden. So klingt die auf flite basierende Stimme wie ein Roboter aus einem schlechtgemachten Science-Fiction-Film der 1970er Jahre.

Um die Coqui-STT-basierte englische Offline-Spracherkennung nachzuziehen, sind ganz ähnliche Schritte notwendig.

In .env-Datei den Wert LEON_STT auf true setzen
LEON_STT_PROVIDER auf coqui-stt setzen

    # npm run setup:offline-stt
# npm start

Sobald die Spracherkennung eingerichtet ist, kann man auf der lokalen Weboberfläche von Leon durch Klicken auf das Mikrofonsymbol die Aufnahme starten und den Befehl sprechen, anstatt ihn über die Tastatur einzugeben. Das Ende der gesprochenen Anweisung erkennt Leon automatisch, beginnt mit der Spracherkennung und der Verarbeitung der Benutzeranfrage.

HTTP-API

Leon bietet auch eine HTTP-API-Schnittstelle an. Damit können die Leon-Funktionen per GET/POST-Aufruf durchgeführt werden. Zur Autorisierung der Anfrage dient der Parameter LEON_HTTP_API_KEY aus den konfigurierten Umgebungsvariablen (.env-Datei). Der initiale Wert kann durch Aufruf von npm run generate:http-api-key jederzeit neu erzeugt werden.

Per eigener Programmlogik oder unter Verwendung von Tools wie Postman kann die API dazu verwendet werden, Funktionen in Leon auszulösen oder abzufragen, ohne die Weboberfläche oder Stimme verwenden zu müssen. Dies ermöglicht die einfache Einbindung von Leon in weitere Anwendungen.

Die verfügbaren API-Endpunkte von Leon und seinen installierten Skills zeigt die automatisch generierte JSON-Datei unter /core/skills-endpoints.json an.

Auf Basis des aktuellen Master-Standes scheint die API derzeit aber nicht funktional zu sein. So werden zwar Aufrufe ohne gültigen Key von API korrekt abgelehnt, aber Aufrufe beliebiger API-Endpunkte mit gültiger Authentifizierung führen zum Absturz von Leon und können daher im Rahmen dieses Artikels nicht weiter gezeigt werden.

Fazit

Erfüllt Leon derzeit die großmundige Ankündigung "you can think of Leon as your virtual brain" ? Nein. Außerdem merkt man, dass aufgrund des Entwicklungsendspurtes auf die finale Version 1.0 einige Umbauten in Gange sind und sich daher einige Teile, wie beispielsweise die HTTP-API, anders verhalten als in der Dokumentation beschrieben.

Der Entwickler, Louis Grenard, weist aber auch ehrlicherweise darauf hin, dass beispielsweise die Dokumentation nicht aktualisiert wird, bis das finale Release veröffentlicht wurde. Außerdem merkt man, dass der primäre Fokus auf der Funktion in englischer Sprache liegt und Deutsch nicht die höchste Priorität hat.

Wer keine großen Vorerfahrungen mit Leon hat, kann während der derzeitigen Beta-Umbaumaßnahmen einige Frustmomente erleben. Diese können aber mit etwas Recherche und Trial-and-Error aufgelöst werden. Wer mit Leon einen (Sprach-)Assistenten verwenden möchte, der out-of-the-box funktioniert, der sollte noch abwarten, bis eine neue stabile Version veröffentlicht wird.

Wer vor herbstlichem Basteln und Fehleranalyse nicht zurückschreckt, dem kann auch die aktuelle Betaversion Anreize bieten, sofern die Erwartungshaltung an ein virtuelles Gehirn nicht zu hoch gehängt wird.

Thorsten Müller beschäftigt sich als IT-Enthusiast mit Smart-Home-Konzepten und Themen rund um offene Sprachtechnologien (Sprachassistenten, Spracherkennung und Sprachsynthese). Sein Wissen teilt er in Open-Voice-Communitys, auf Youtube und auf seinem Twitter-Account(öffnet im neuen Fenster) .


Relevante Themen