- Es gibt bereits Erfahrungen mit Siri und Google Assistant. Sie können Geräte steuern, lassen sich aber nicht anpassen und sind von Cloud-Diensten abhängig.
- Es besteht der Wunsch, etwas Neues zu lernen und etwas Cooles zu haben, das sich im Alltag nutzen lässt. Der neue Assistent soll eine schnippische, sarkastische Persönlichkeit haben.
- Alles soll lokal laufen. Ausnahmslos. Es gibt keinen Grund, warum eine Kaffeemaschine mit einem Server am anderen Ende des Landes sprechen sollte.
- Gewünscht wird mehr als die grundlegende Funktion „Licht an“. In Zukunft sollen neue Funktionen ergänzt werden können.
Architektur
- Für Firewall, NIPS und VLAN-Routing wird ein Protectli Vault VP2420 verwendet.
- HomeAssistant wird ins Internet exponiert, damit es ohne VPN aus der Ferne nutzbar ist. Dafür werden extreme Sicherheitsmaßnahmen ergriffen.
- Ein verwalteter Switch TRENDnet TEG-3102WS wurde gewählt, um günstig 2,5 Gigabit zu bekommen.
- Es werden zwei RTX 4060Ti in einem möglichst günstig zusammengestellten Rechner verwendet, dessen Teile größtenteils bei eBay gekauft wurden. Für das LLM ist VRAM wichtig, um große Mengen Kontext bereitstellen zu können.
- Für HomeAssistant (und WAF) wird ein Minisforum UM690 verwendet. Ein Raspberry Pi 4 wäre ebenfalls möglich, aber es laufen viele Dienste und Whisper stellt erhebliche Anforderungen an die CPU.
- Ein riesiges Chaos aus Ethernet-Kabeln.
Inferenz-Engine
- Da ein allgemeines LLM gewünscht ist, das auch außerhalb von HomeAssistant genutzt werden kann, fiel die Wahl auf vLLM. Es ist sehr schnell und die einzige Engine, die gleichzeitig mehrere Clients bedienen kann.
- Es unterstützt einen OpenAI-kompatiblen API-Server, was vieles deutlich einfacher macht.
- Gewählt wurde das Mixtral-Modell von Mistral AI, weil der Trade-off zwischen VRAM und Leistung perfekt passt.
Modellquantisierung
- Da das vollständige fp32-Modell nicht ausgeführt werden kann, wurde eine quantisierte Version gewählt.
- Quantisierung verschlechtert die Qualität leicht – ähnlich wie MP3 – verbessert aber den Ressourcenbedarf massiv.
- Es musste zwischen GPTQ und AWQ gewählt werden; da der gesamte Smart-Home-Status an das Modell übergeben werden muss, fiel die Wahl auf GPTQ.
HomeAssistant-Integration
- Es wurden die standardmäßigen Whisper- und Piper-Add-ons von HomeAssistant OS genutzt, aber zusätzlich ein benutzerdefiniertes GlaDOS-Sprachmodell von HuggingFace heruntergeladen.
- Es gibt bereits eine OpenAI-Integration in HomeAssistant, aber sie kann keine Geräte steuern, und da es keine
base_url-Einstellung gibt, um statt mit OpenAI-Servern mit einem gefälschten OpenAI-Server zu sprechen, wird die vollständige Erweiterung nicht verwendet.
- Eine benutzerdefinierte Integration wurde gefunden, aber dabei wurde erkannt, dass Software so nicht funktioniert. Nach der Installation traten noch zwei weitere Probleme auf.
Problemlösung
- Mixtral verwendet ein ungewöhnliches Chat-Template. Es erlaubt keine System-Prompts und wirft eine Ausnahme, wenn es welche entdeckt.
- vLLM unterstützt nicht die Function-Calling-API von OpenAI. Selbst wenn es das täte, müsste ein speziell auf Function Calling trainiertes Modell laufen.
- Um Mixtral anzupassen, wurde das Chat-Template so geändert, dass es „System-Prompts“ akzeptiert. Librechat wird als UI verwendet, damit System-Prompts korrekt funktionieren.
JSON-Ausgabe
- Auch wenn das Modell keine Funktionen aufrufen kann, lässt es sich anweisen, JSON auszugeben, das anschließend ausgeführt werden kann.
- Die benutzerdefinierte Integration wurde geforkt und um eine Funktion ergänzt, die HomeAssistant-Dienste per JSON ausführt.
GlaDOS-Prompt
- Der GlaDOS-Prompt wurde angepasst und für den eigenen Assistenten verwendet.
- Dabei trat das Problem auf, dass das Modell JSON zu sehr bevorzugt. Selbst bei einfachen Fragen gibt es JSON aus, das versucht, Service-Aufrufe auszuführen.
Lösung
- Es wurde festgelegt, dass bekannter Text eingefügt werden soll, wenn der Nutzer eine Aufgabe anfordert. Gewählt wurde
"$ActionRequired".
- Im Fork wird dies herausgefiltert, wodurch das Problem gelöst wird.
Finaler Prompt
- Der anfängliche Prompt wurde mit mehr Geräten und weniger unnötigen Entitäten aktualisiert.
- Er soll dazu anhalten, keine Aktionen auszuführen, wenn diese nicht angefordert wurden.
- Nach mehreren Versuchen wurde ein Ergebnis erreicht, das fast perfekt funktioniert (wenn auch wegen der Speicherbus-Beschränkung der 4060Ti etwas langsam).
Meinung von GN⁺
- Dieses Projekt könnte für Menschen sehr interessant sein, die Wert auf Datenschutz und ein individuell anpassbares Nutzererlebnis legen.
- Die Steuerung eines Smart Homes mit einem lokal laufenden LLM bietet große Vorteile bei Datensicherheit und Reaktionsgeschwindigkeit.
- Dass Nutzer das System selbst aufbauen und anpassen, ist ein gutes Beispiel dafür, wie technische Bildung und DIY-Kultur gefördert werden können.
2 Kommentare
Das war gut aufbereitet, deshalb hat es Spaß gemacht, es zu lesen.
Da Home Assistant offenbar plant, LLM-Funktionen hinzuzufügen, dürfte sich das künftig noch einfacher nutzen lassen.
Auch auf dem YouTube-Kanal für Interior-Design-Shows, den ich verfolge, hieß es, dass dort IoT-Produkte entwickelt werden. Wenn man schon von Anfang an mitdenkt, solche Dinge auch dort nutzbar zu machen, wäre das noch spannender.
Hacker-News-Kommentare
Meinung des Home-Assistant-Gründers:
Erfahrung eines anderen Nutzers:
Nutzer, der lokale LLMs getestet hat:
llava-v1.5-7b-q4für Home-Automation-Aufgaben effektiv ist.Feedback eines Home-Assistant-Nutzers:
Frage zum Mikrofon-Array:
Fragen zu Hardware und Setup:
Bitte um weitere Informationen zur Mikrofonauswahl und zur Implementierung der Spracherkennung:
Erfahrung eines Nutzers mit der OpenAI-API:
Frage zur Netzwerkkonfiguration: