Loading... # 构建可靠的本地化 Home Assistant 语音助手 # 一、概述 ## 1. 简介 ### A. 是什么 本文介绍如何从 Google Home/Nest Mini 迁移到完全本地化的 Home Assistant 语音助手(Assist),使用 local-first 架构配合 llama.cpp(此前使用 Ollama)实现本地运行。 ### B. 为什么学 - Google Assistant 逐渐变笨,无法满足日常需求 - 隐私担忧:家中在线麦克风可能泄露隐私 - 网络依赖:云服务宕机时无法控制家中设备 - 完全本地化运行,无需依赖外部服务 ### C. 学完能做什么 - 搭建完全本地化的语音助手系统 - 实现天气查询、地点搜索、音乐播放等功能 - 自定义唤醒词和语音模型 - 通过本地大模型实现自然对话 # 二、硬件准备 ## 1. 语音设备 - 1 台 HA Voice Preview Edition - 2 台 Satellite1 Small Squircle Enclosures - 1 台 Pixel 7a 作为卫星设备/Hub(搭配 View Assist) ## 2. 语音服务器硬件 - Beelink MiniPC(支持 USB4) - USB4 eGPU 外接显卡盒 ## 3. 显卡选择 | GPU | 模型类别 | 响应时间(提示缓存后) | 备注 | |------|---------|------------------|------| | RTX 3090 24GB | 20B-30B MoE, 9B Dense | 1 - 2 秒 | 高效运行此架构最优模型 | | RX 7900XTX 24GB | 20B-30B MoE, 9B Dense | 1 - 2 秒 | 高效运行此架构最优模型 | | RTX 5060Ti 16GB | 20B MoE, 9B Dense | 1.5 - 3 秒 | 响应时间 < 3 秒 | | RX 9060XT 16GB | 20B MoE, 9B Dense | 1.5 - 4 秒 | 响应时间 < 4 秒 | | RTX 3050 8GB | 4B Dense | 3 秒 | 适合运行基础功能的小模型 | ## 4. 模型选择 | 模型 | 多设备工具调用 | 理解上下文线索 | 解析误听指令 | 忽略误激活文本 | |------|-------------|------------|----------|-----------| | GGML GPT-OSS:20B MXFP4 | 支持 | 支持 | 支持 | 支持 | | Unsloth Qwen3.5-35B-A3B MXFP4_MOE | 支持 | 一般 | 一般 | 支持 | | Unsloth Qwen3-VL:8B-Instruct Q6_K_XL | 支持 | 支持 | 一般 | 一般 | | Unsloth Qwen3-30B-A3B-Instruct Q4_K_XL | 支持 | 一般 | 不支持 | 一般 | | Unsloth GLM 4.7 Flash (30B) Q4_K_XL | 一般 | 支持 | 不支持 | 一般 | | Unsloth Qwen3:4b-Instruct 2507 Q6_K_XL | 一般 | 不支持 | 不支持 | 不支持 | 功能说明: - 多设备工具调用:处理如打开风扇并关闭灯光的复合指令 - 理解上下文线索:在特定区域时,若该区域只有一个设备则不询问,多个时正确询问 - 解析误听指令:能够处理误听指令(如打开 pan)并正确执行意图指令 - 忽略误激活文本:可靠忽略不需要的输入,不受误听文本负面影响 # 三、系统架构 ## 1. 整体架构 ```mermaid graph LR A[用户] --> B[Home Assistant Assist] B --> C[语音卫星设备] C -->|麦克风输入| B B --> D[语音转文本] B --> E[大模型推理] B --> F[文本转语音] D -->|转录文本| B E -->|对话生成| B B -->|音频输出| C ```  ## 2. 组件说明 - Home Assistant:核心控制平台 - 语音卫星设备:麦克风和扬声器终端 - 语音转文本:Wyoming ONNX ASR(Nvidia Parakeet V2) - 大模型推理:llama.cpp 运行本地模型 - 文本转语音:Kokoro TTS 或 Piper # 四、软件配置 ## 1. 模型运行器 推荐使用 llama.cpp 以获得最佳性能。 ## 2. 语音转文本 | 软件 | 模型 | 备注 | |------|------|------| | Wyoming ONNX ASR | Nvidia Parakeet V2 | 通过 OpenVINO 分支运行,CPU 推理时间优化至约 0.3 秒 | | Rhasspy Faster Whisper | Nvidia Parakeet V2 | 直接通过 ONNX CPU 运行,速度较慢 | ## 3. 文本转语音 | 软件 | 备注 | |------|------| | Kokoro TTS | 可混合多种声音/语调,处理所有文本 | | Piper (CPU 运行) | 有多种声音可选,处理一般文本,但处理货币、电话号码和地址有困难 | ## 4. Home Assistant LLM 集成 - LLM Conversation:改进基础对话体验 - LLM Intents:提供额外工具(Web 搜索、地点搜索、天气预报) # 五、配置步骤 ## 1. 初始设置 从 Ollama 内置模型开始测试,每隔几周连接 Ollama 到 Home Assistant。 ## 2. 模型选择 - 从 HuggingFace 获取 GGUF 模型 - 选择更高量化的模型(如 MXFP4) - 避免使用默认 Q4_K 低量化模型 ## 3. 提示词优化 ### A. 提示词结构 - 为每个服务使用专门的 # 章节 - 使用项目符号列出详细说明和指令 - 添加具体输出格式示例 ### B. 解决常见问题 - 天气服务调用:明确指示 LLM 调用天气服务 - 响应格式化:避免额外评论,只返回必要信息 - 表情符号处理:移除 TTS 不适合的表情符号 - 工具调用指导:针对特定问题类型指示调用特定工具 ## 4. 自定义唤醒词 使用 microWakeWord-Trainer-Nvidia-Docker 训练自定义唤醒词(如 Hey Robot),训练时间约 30 分钟。 ## 5. 网络优化 - 为语音设备创建专用 IoT 网络 - 使用流式 TTS 传输以减少延迟 # 六、功能实现 ## 1. 音乐播放自动化 使用句子自动化触发器配合 Music Assistant: ```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 ``` # 七、常见问题 ## 1. WiFi 连接问题 - 症状:语音输出卡顿、单词中间停顿 - 解决:创建专用 IoT 网络、使用流式 TTS ## 2. 工具调用失败 - 原因:默认模型量化过低或缺乏指令 - 解决:从 HuggingFace 获取更高量化的 GGUF 模型 ## 3. 误激活问题 - 解决方案:训练自定义唤醒词、添加静音自动化 ## 4. 模型选择困惑 - 建议:GGML GPT-OSS:20B MXFP4 在各项测试中表现最佳 # 八、最终效果 系统核心任务可靠运行,实现完全本地化语音助手,无隐私担忧。主要改进: - 响应时间:高端显卡 1-2 秒,中端显卡 3-4 秒 - 功能完整:天气查询、地点搜索、音乐播放、通用问答 - 隐私保护:所有数据本地处理 *** ## 参考资料 1. [My Journey to a reliable and enjoyable locally hosted voice assistant](https://community.home-assistant.io/t/my-journey-to-a-reliable-and-enjoyable-locally-hosted-voice-assistant/944860) 最后修改:2026 年 03 月 17 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏