11 Punkte von GN⁺ 2024-01-14 | 2 Kommentare | Auf WhatsApp teilen
  • 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

 
xguru 2024-01-15

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.

 
GN⁺ 2024-01-14
Hacker-News-Kommentare
  • Meinung des Home-Assistant-Gründers:

    • Home Assistant plant, im Laufe dieses Jahres standardmäßig ähnliche Funktionen zu integrieren.
    • Er betont die Notwendigkeit einer standardisierten lokalen LLM-API und wünscht sich eine Funktion, mit der sich abfragen lässt, was ein Modell leisten kann.
    • Er würde gern lokale LLMs sehen, die ähnliche Funktionen wie die von OpenAI unterstützen, damit LLMs nützlich arbeiten können.
    • Bei der JSON-Erzeugung wünscht er sich Ergebnisse, die ohne Fehler direkt ausführbar sind.
  • Erfahrung eines anderen Nutzers:

    • Er weist darauf hin, dass nach der Installation eine klare Erklärung der Ergebnisse fehlt.
    • Im Vergleich zu GPT-4 erwähnt er Grenzen kleiner Modelle bei der Ausführung komplexer Aufgaben.
    • Er würde gern konkrete Beispiele für die tatsächliche Ausgabe sehen.
  • Nutzer, der lokale LLMs getestet hat:

    • Er erklärt, dass das Modell llava-v1.5-7b-q4 für Home-Automation-Aufgaben effektiv ist.
    • Er sagt, dass er Ergebnisse auf einem ähnlichen Niveau wie mit GPT-4 erzielt hat.
  • Feedback eines Home-Assistant-Nutzers:

    • Er räumt ein, dass ihm das Verständnis für KI fehlt, und bedankt sich für die Vorlage zum Einstieg.
    • Er erwähnt, dass er Home Assistant an mehreren Orten eingesetzt hat und es nützlich verwendet.
  • Frage zum Mikrofon-Array:

    • Er fragt sich, wie weit fortgeschritten Mikrofon-Arrays für den Hobbyeinsatz inzwischen sind.
    • Er stellt die Mikrofonleistung im Vergleich zu Echo-Geräten infrage.
  • Fragen zu Hardware und Setup:

    • Er fragt nach dem verwendeten GPU-Modell und nach Preisvergleichen.
    • Er bittet um konkrete Informationen zur Wahl der Quantisierung.
    • Wegen VRAM-Beschränkungen erwartet er, dass die Genauigkeit auch bei niedrigerem Quantisierungsniveau erhalten bleibt.
  • Bitte um weitere Informationen zur Mikrofonauswahl und zur Implementierung der Spracherkennung:

    • Er hofft künftig auf detailliertere Informationen zur Mikrofonauswahl und zur Implementierung der Spracherkennung.
  • Erfahrung eines Nutzers mit der OpenAI-API:

    • Er hat mithilfe der OpenAI-API einen einfachen Python-Wrapper geschrieben.
    • Für lokale Spracherkennung und -generierung verwendet er ESP32-Box und das Willow-Projekt.
  • Frage zur Netzwerkkonfiguration:

    • Er fragt sich, warum statt einer komplexen Netzwerkkonfiguration nicht tailscale verwendet wurde.
    • Er bittet um eine Erklärung der Flexibilität, die diese Infrastruktur bietet.