
2026/03/16 22:09
私の旅―信頼性が高く、楽しめるローカルホスト型音声アシスタントへ(2025)
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Home Assistantは、従来のGoogle‑Home/Nest Miniセットアップを置き換える完全にローカルな音声アシスタントを、llama.cppによって駆動させることができるようになりました。テストでは、RTX 3050からRTX 3090まで、またRX 7900XTXのGPUを使用すると、1〜2 秒の音声→テキストレイテンシー(中程度のカードでは約3〜4 秒)が得られます。音声ハードウェアにはHA Voice Preview Satellite、Pixel 7a hub、およびUSB4 eGPU付きBeelink MiniPCが含まれています。ASRオプションとしてはWyoming ONNXがCPU推論で約0.3 秒を実現し、Rhasspy Faster Whisperは遅いです。テストされたTTSエンジンはKokoro(ミックス可能な音声、全テキスト)とCPU上のPiper(一般的なテキストには良好だが数字や住所では苦戦します)。
ローカルLLM統合により、「LLM Conversation」モードとツール呼び出し用「LLM Intents」が追加され、ウェブ検索・場所検索・天気予報などを可能にします。カスタムウェイクワードトレーニング(“Hey Robot”)はGPUで約30 分実行され、許容できる誤検出率が得られました。自動化では、トリガーされていないときにミュートになるよう設定できます。例として「Music Shortcut」自動化は衛星を
にマッピングし、media_playerを呼び出します。music_assistant.play_media
プロンプトエンジニアリングが重要です:各サービス用の専用セクションと簡潔な箇条書き指示でツール呼び出しが改善されます。絵文字の削除は精度向上に寄与します。llama.cppによるパフォーマンス最適化と慎重なGPU選択により、レイテンシーを3 秒以下に保ち、プライバシーファーストのローカル音声制御として信頼性があります。著者は、このソリューションには相当な研究・忍耐・チューニングが必要であると警告し、高度なHome Assistantユーザーやカスタマイズ性・クラウドフリーを求める開発者に最適であると述べています。
本文
私はしばらくの間、Home Assistant の「Assist」の進化を追ってきました。
以前は Nest Mini で Google Home を使っていましたが、現在は local‑first + llama.cpp(旧 Ollama)に基づく完全ローカル型アシストへ切り替えています。
この記事では、今日の状況に至るまでに行った手順、選択した決定、およびそれらが私のユースケースに最適だった理由を共有します。
追加改善へのリンク
- セキュリティカメラのインサイト / 分析
- YouTube 動画検索とテレビでの再生
新機能
不要な HA/LLM の振る舞い修正
- デフォルトの
インテントを上書きし、天気情報を一貫した出力にHassGetWeather - 曖昧なリクエスト/誤ったアクティベーションへの対応改善
- 明らかな音声認識ミスを自動で処理
- プロンプトを最適化して冗長性とトークン使用量を削減
パフォーマンスの最適化
- llama.cpp のパフォーマンスチューニング
ハードウェア詳細
RTX 3050 から RTX 3090 まで、さまざまなハードウェアをテストしました。
ほとんどのモダンディスクリート GPU はローカルアシストに有効であり、性能と速度への期待次第です。
HomeAssistant ホスト
| デバイス | スペック(重要ではない) |
|---|---|
| UnRaid NAS | – |
音声ハードウェア
- HA Voice Preview Satellite
- Satellite1 Small Squircle Enclosures
- Pixel 7a をサテライト/ハブとして View Assist と併用
音声サーバー ハードウェア
- Beelink MiniPC(USB‑4 搭載、モデルは USB‑4 があれば可)
- USB‑4 eGPU エンクロージャ
テスト済み GPU
| GPU | モデルクラス | プロンプトキャッシュ後の応答時間 | 備考 |
|---|---|---|---|
| RTX 3090 24GB | 20B–30B MoE, 9B Dense | 1–2 s | 最適モデルを効率的に高速実行 |
| RX 7900XTX 24GB | 20B–30B MoE, 9B Dense | 1–2 s | 上記と同様 |
| RTX 5060Ti 16GB | 20B MoE, 9B Dense | 1.5–3 s | < 3 s の応答に十分 |
| RX 9060XT 16GB | 20B MoE, 9B Dense | 1.5–4 s | < 4 s の応答に十分 |
| RTX 3050 8GB | 4B Dense | 3 s | 小規模モデル向け、基本機能で十分 |
テスト済みモデル
以下の全てのモデルは基本的なツール呼び出しに適しています。
高度な機能は、期待する挙動を安定して再現できるモデル品質とともに示します。
- 「ファンをオンにしてライトをオフに」などのコマンドを処理
- 特定エリア内にいる場合、「どのライト?」と尋ねず、複数ある場合のみ正しく質問
- 「pan をオンに」と誤認された指示も正確に実行
- 意図したコマンドであっても不要入力を無視し、ミス音声で影響されない
音声サーバー ソフトウェア
モデルランナー: llama.cpp が最適パフォーマンスを提供します。
スピーチ・トゥ・テキスト(Voice In)
| ソフトウェア | モデル | 備考 |
|---|---|---|
| Wyoming ONNX ASR | Nvidia Parakeet V2 | OpenVINO ブランチで実行し、CPU 推論時間を約0.3 s に最適化 |
| Rhasspy Faster Whisper | Nvidia Parakeet V2 | ONNX CPU 直接走らせるため遅く、OpenVINO より劣る |
テキスト・トゥ・スピーチ(Voice Out)
| ソフトウェア | 備考 |
|---|---|
| Kokoro TTS | 複数の声やトーンを混ぜ合わせられ、すべてのテキストに対応 |
| Piper (CPU) | 多様な音声が利用可能だが、通貨・電話番号・住所などで苦戦 |
Home Assistant LLM 統合
- LLM Conversation – Assist のデフォルト体験を向上させる会話拡張
- LLM Intents – Assist に追加ツール(Web Search、Place Search、Weather Forecast)を提供
旅路
この記事を書いた目的は、自分のセットアップを「正しい方法」と主張することではありません。プロセスで多くを学び、その知見が他者に期待と落とし穴を予測させる手助けになるかもしれないと考えたからです。
問題点
過去1〜2年で、Nest Mini 上の Google Assistant が徐々に機能低下していることに気付きました。新機能はほぼなく、よく「すみません、その件には対応できません」や「知りませんが、XYZ ソースによるとこうです」と答えるようになりました。また、オンラインマイクロフォンのプライバシー懸念や AWS 停止時に外部サービスに頼らざるを得ない点も大きな不満でした。
始め方
最初は Ollama の組み込みモデルで実験しました。数週間ごとに Ollama を HA に接続し、Assist を起動して試したのですが、結果はほぼ期待外れ。基本的なツール呼び出しも機能しませんでした。デフォルトの :4b モデルは低量子化(Q4_K)で問題を引き起こすことが判明。HuggingFace の高量子化 GGUF モデルに切り替えると、ツール呼び出しが大幅に改善しました。
音声テスト
基盤が機能するようになったら、HA Voice Preview Edition を注文してエンドツーエンドのパフォーマンスを確認。初期の Wi‑Fi 受信問題で音声が途切れたり単語途中で停止したりしました。Piper をストリーミングモードに切り替え、専用 IoT ネットワークを構築するとこれらの問題は解消されました。
Assist を有効活用
Assist に求める機能は次のとおりです:
- 日時別・週間天気予報
- 特定店舗の営業時間照会
- 任意質問への一般知識検索
- 音声のみで音楽を検索再生
llm-intents 統合がこれらサービスを多く提供します。設定後、初期結果は平均的でしたので LLM プロンプトを洗練させました。
LLM プロンプトの重要性
良いプロンプトは不可欠です。デフォルト HA プロンプトは十分な指示が不足しています。ChatGPT に現在のプロンプトと期待する挙動を入力し、反復的に改善しました。結果、一貫した応答が得られました。
主な手法:
- 各サービスごとに専用セクションを設け、箇条書きで詳細・指示を列挙
- 余計なコメントを排除するための明確なフォーマット指示(例:「いい天気の日です!」など)
- 特定質問タイプには必ず正しいツールを呼び出すよう指示
- 不要な絵文字を抑制するセクション
手動で解決した問題
LLM は自然に検索や音楽再生ができますが、直接 LLM にアクセスできない場合は自動化が有効です。例として次の YAML を示します。
alias: Music Shortcut description: "" triggers: - trigger: conversation command: - Play {music} id: play - trigger: conversation command: Stop playing id: stop conditions: [] actions: - choose: - conditions: - condition: trigger id: - play sequence: - action: music_assistant.play_media metadata: {} data: media_id: "{{ trigger.slots.music }}" target: entity_id: "{{ target_player }}" - set_conversation_response: Playing {{ trigger.slots.music }} - conditions: - condition: trigger id: - stop sequence: - action: media_player.media_stop metadata: {} data: {} target: entity_id: "{{ target_player }}" - set_conversation_response: Stopped playing music. variables: satellite_player_map: | {{ { "assist_satellite.home_assistant_voice_xyz123": "media_player.my_desired_speaker", } }} target_player: | {{ satellite_player_map.get(trigger.satellite_id, "media_player.default_speaker") }} mode: single
カスタムウェイクワードの学習
既定のウェイクワードは不十分でした。私は「Hey Robot」を選択し、Microwake リポジトリを使ってカスタムマイクロウェイクワードを学習させました。GPU で約30分で完了。結果は良好で、Google Home と同程度の誤検知率です。
最終成果
このセットアップは一般的な Home Assistant ユーザー向けではありません。忍耐力・調査・トラブルシューティングが必要ですが、ローカル音声アシスタントとしてプライバシーリスクゼロで信頼できるコアタスクを提供します。ご質問があれば遠慮なくどうぞ!