- SiriやGoogleアシスタントを使ったことがある。これらはデバイスを制御できるが、カスタマイズできず、クラウドサービスに依存している。
- 新しいことを学びたく、生活の中で使えるクールなものを求めている。新しいアシスタントには、皮肉っぽく嫌味な性格を持たせたい。
- すべてをローカルで動かしたい。例外はない。コーヒーマシンが国の反対側にあるサーバーと通信する理由はない。
- 基本的な「電気をつけて」機能以上のものを求めている。将来的に新機能を追加できるようにしたい。
アーキテクチャ
- ファイアウォール、NIPS、VLANルーティングのためにProtectli Vault VP2420を使用。
- HomeAssistantをインターネットに公開し、VPNなしでリモート利用できるようにしている。そのために極端なセキュリティ対策を講じている。
- 安価に2.5ギガを確保するため、TRENDnet TEG-3102WSマネージドスイッチを選択。
- eBayで大半の部品を購入し、できるだけ安く組んだコンピューターにRTX 4060Tiを2枚使用。LLMに大量のコンテキストを与えるのに必要なVRAMが重要。
- HomeAssistant(とWAF)を動かすためにMinisforum UM690を使用。Raspberry Pi 4でも可能だが、多くのサービスを動かし、WhisperがCPUにかなり負荷をかける。
- Ethernetケーブルがひどく入り乱れている。
推論エンジン
- HomeAssistantの外でも使える汎用LLMが欲しかったため、vLLMを選択。非常に高速で、複数クライアントに同時にサービス提供できる唯一のエンジン。
- OpenAI互換APIサーバーをサポートしており、構成がかなり楽になる。
- VRAMと性能のトレードオフがちょうどよかったため、Mistral AIのMixtralモデルを選択。
モデル量子化
- 完全なfp32モデルは動かせないため、量子化版を選択。
- 量子化はMP3のように品質を少し落とす一方、必要リソースを大幅に改善する。
- GPTQとAWQのどちらかを選ぶ必要があり、スマートホームの状態全体をモデルに渡す必要があるため、GPTQを選択。
HomeAssistant統合
- HomeAssistant OS標準のWhisperとPiperアドオンを使ったが、HuggingFaceからカスタムGlaDOS音声モデルをダウンロードした。
- HomeAssistantにはすでにOpenAI統合があるが、デバイスを制御できず、OpenAIサーバーの代わりに偽のOpenAIサーバーと通信させるための
base_url設定もないため、拡張機能全体は使わなかった。
- カスタム統合を見つけたが、ソフトウェアはそんなふうには動かないと分かっている。インストール後、さらに2つの問題が発生した。
問題解決
- Mixtralは独特なチャットテンプレートを使う。システムプロンプトを許可せず、見つけると例外を投げる。
- vLLMはOpenAIの関数呼び出しAPIをサポートしていない。仮に対応していても、関数呼び出し特化モデルを動かす必要がある。
- Mixtralを修正するため、チャットテンプレートをシステムプロンプトを受け入れられるよう変更。UIにはLibreChatを使い、システムプロンプトが正しく動くようにした。
JSON出力
- モデルが関数を呼び出せなくても、JSONを出力するよう求めて実行できる。
- カスタム統合をフォークし、HomeAssistantサービスをJSONで実行する機能を追加した。
GlaDOSプロンプト
- GlaDOSプロンプトを修正して、自分専用のアシスタントで使った。
- JSON出力を好みすぎる問題が発生した。単純な質問に対しても、サービス呼び出しを試みるJSONを出力してしまう。
解決策
- ユーザーが作業を依頼した場合に、既知のテキストを挿入するよう求めた。
$ActionRequiredを選択。
- フォーク側でこれをフィルタリングし、問題を解決した。
最終プロンプト
- より多くのデバイスに対応し、不要なエンティティが少ない初期プロンプトへ更新。
- 求められていない場合はアクションを実行しないよう促した。
- 何度も試行した末に、ほぼ完璧に動作するものを得た(4060Tiのメモリバス制限のため少し遅い)。
GN⁺の見解
- このプロジェクトは、プライバシーとユーザーに合わせた体験を重視する人にとって非常に興味深いかもしれない。
- ローカルで動作するLLMを使ってスマートホームを制御することは、データセキュリティと応答速度の面で大きな利点をもたらす。
- ユーザー自身がシステムを構築してカスタマイズする過程は、技術教育とDIY文化を促進する良い例になっている。
2件のコメント
よく整理されていて、楽しく読めました。
Home AssistantがLLM機能を追加する予定とのことなので、今後はもっと簡単に利用できそうですね。
私が見ているインテリア紹介のYouTubeチャンネルでもIoT製品を作ると言っていましたが、そういうところでもこうしたものを最初から活用できるように考えてくれると、さらに面白くなりそうです
Hacker Newsの意見
Home Assistant創業者の意見:
他のユーザーの経験:
ローカルLLMをテストしたユーザー:
llava-v1.5-7b-q4モデルがホームオートメーション作業に効果的だと明かしている。Home Assistantユーザーのフィードバック:
マイクアレイに関する質問:
ハードウェアおよび設定に関する質問:
マイク選定と音声認識実装に関する追加情報の要望:
OpenAI APIを使ったユーザーの経験:
ネットワーク設定に関する質問: