内容提要
作者不满Siri和Google助手依赖云服务且无法定制,于是自建全本地LLM语音助手控制智能家居。硬件包括防火墙、2.5G交换机、两块RTX 4060Ti和Minisforum UM690;采用vLLM推理引擎和量化版Mixtral模型,用Whisper与Piper处理语音。因Mixtral不支持系统提示和函数调用,作者修改聊天模板,让模型输出JSON以执行HomeAssistant服务,并设计GlaDOS风格提示词,实现幽默讽刺的本地语音控制。
延伸解读
本地化语音助手的硬件门槛
作者使用了两块RTX 4060Ti显卡和Minisforum UM690主机,并强调显存对运行大语言模型至关重要。这表明完全本地化的LLM语音助手需要可观的硬件投入,尤其是显卡的VRAM,因为需要处理庞大的上下文。此外,防火墙和2.5G交换机等网络设备也用于保障安全与速度,说明本地化方案并非简单的软件配置,而是涉及整套基础设施。
模型选择与量化权衡
作者选择了量化版Mixtral模型,因为完整模型需要超过100GB显存。量化类似MP3压缩,以轻微质量损失换取资源需求大幅降低。在GPTQ和AWQ版本间,作者因需要传递整个智能家居状态而选择了上下文更长的GPTQ(10800令牌)。这提示读者,在有限硬件下,量化是必要手段,但需根据任务需求在模型质量、上下文长度和推理速度间做出权衡。
绕过限制的实用技巧
Mixtral不支持系统提示和函数调用,作者通过修改聊天模板让模型接收系统提示,并让模型输出JSON来执行HomeAssistant服务。此外,系统过度输出JSON的问题通过引入“ActionRequired”标记解决。这些技巧表明,在现有模型能力不足时,可以通过提示工程和输出解析实现功能,但需要反复调试和筛选,且代码可能不够成熟,难以直接贡献给上游。
个性化与安全考量
作者追求幽默讽刺的GlaDOS风格助手,并通过详细提示词塑造其性格,甚至允许脏话和网络俚语。同时,作者将HomeAssistant接入互联网并采取极端安全措施(如防火墙、NIPS、VLAN)。这提醒读者,本地化虽避免云依赖,但远程访问仍需强化安全,而个性化提示词可能影响模型输出的稳定性,需在趣味性和可靠性间平衡。
Q&A
为什么要自建本地LLM语音助手而不是用Siri或Google助手?
作者发现Siri和Google助手虽然能控制设备,但无法个性化定制,且依赖云服务。作者希望所有操作在本地完成,避免家庭设备与远端服务器通信,并想要一个幽默讽刺的新助手,还能扩展更多功能。
搭建这个本地语音助手用了哪些硬件?
硬件包括:Protectli Vault VP2420(防火墙、NIPS、VLAN路由)、TRENDnet TEG-3102WS管理型交换机(2.5G)、两块RTX 4060Ti显卡(组装在自拼电脑中)、Minisforum UM690(运行HomeAssistant及WAF),以及大量以太网线。
为什么选择vLLM和Mixtral模型?
作者选择vLLM作为推理引擎,因为它运行迅速、能同时服务多个客户端,并支持兼容OpenAI的API服务器。模型选用Mixtral,因为它在VRAM和性能上平衡适合4060Ti;由于无法运行完整fp32模型,选择了量化版本(GPTQ),因其10800令牌上下文比AWQ的6000更大,便于传递整个智能家居状态。
Mixtral不支持系统提示和函数调用,作者是如何解决的?
作者修改了Mixtral的聊天模板(用Jinja代码),使其能接收系统提示并与用户输入结合。对于函数调用,作者让模型输出JSON来执行HomeAssistant服务,并创建了支持JSON形式执行服务的版本。
如何防止LLM在不该执行操作时输出JSON?
作者使用标记法:当用户请求执行操作时,让系统加入“ActionRequired”标记;不需要执行时加入“ActionNotRequired”。但发现后者总被添加,于是进行筛选。最终在提示中明确要求:只有用户明确要求执行操作时才输出JSON,否则以$NoActionRequired结束。
GlaDOS风格的提示词有哪些关键要求?
提示词要求助手:以GlaDOS的语气(冷漠、简洁、隐含蔑视)回应;机智讽刺,允许脏话和网络俚语;不对用户礼貌;随请求增多越来越不耐烦;暗示用户会痛苦死亡;误解时转移话题;回复要适合文本转语音,不含实体ID;不主动建议命令;仅在用户明确要求时附加JSON服务调用。