
1. 项目概述与核心价值最近在折腾智能家居和本地大语言模型的朋友估计都绕不开一个核心痛点怎么让AI“看见”并理解家里的摄像头画面无论是想实现“门口有人自动播报”、“宠物在客厅捣乱时提醒”还是更复杂的“识别老人是否跌倒”都需要将视觉信息转化为LLM能处理的文本描述。今天要聊的这个项目valentinfrlch/ha-llmvision就是专门为解决Home AssistantHA生态下的这个需求而生的。简单来说ha-llmvision是一个Home Assistant的自定义集成Custom Component。它的核心功能是充当一个“翻译官”或“解说员”能够自动抓取HA中摄像头、图片等实体的图像调用本地的视觉理解模型比如LLaVA、BakLLaVA或云端API如OpenAI的GPT-4V生成一段精准、自然的文字描述然后将这个描述文本作为一个新的传感器实体sensor发布到HA中。这样一来你所有的自动化、脚本和仪表盘都可以基于这个“图像描述”来触发动作让智能家居真正拥有“视觉智能”。我花了差不多一周时间在自己的HA服务器上从零部署、调试并应用了这个集成。整个过程下来感觉它设计思路非常清晰把复杂的多模态AI能力封装成了HA里一个简单的“服务”service调用起来就像开关灯一样方便。但其中也涉及到模型选择、硬件资源权衡、提示词Prompt调优等一系列实操细节这些恰恰是官方文档不会告诉你的“坑”。接下来我就结合自己的实战经验把这个项目的里里外外、从原理到踩坑给你彻底讲明白。2. 核心架构与工作原理拆解要玩转ha-llmvision首先得理解它内部是怎么运转的。它不是一个孤立的黑盒而是一个精巧的、连接了HA、AI模型和硬件的桥梁。2.1 核心组件与数据流整个集成的工作流程可以概括为“触发-抓取-推理-发布”四步闭环。触发源Trigger这通常是HA里的一个自动化Automation、一个脚本Script或者你手动在开发者工具里调用服务。触发条件可以是时间如每小时、事件如门磁传感器状态变化或者直接由其他逻辑发起。图像获取Image Capture集成被触发后会根据你的配置去获取指定摄像头实体如camera.front_door的当前快照snapshot或者获取一个图片实体如image.dog_pic的最新图片。这里获取的是原始的图像数据。视觉推理Vision Inference这是核心环节。集成将图像数据连同你预先配置好的“提示词”Prompt一起发送给配置好的AI模型。模型可以是本地模型如运行在你NAS或另一台服务器上的llava、bakllava等通过Ollama、LM Studio或直接API暴露的模型。云端API如OpenAI的gpt-4-vision-preview、Google的Gemini Pro Vision或者Anthropic的Claude 3系列。结果发布Result PublishingAI模型返回一段文本描述后集成会将其写入到一个新的传感器实体中。例如你配置了一个名为front_door的实例那么就会生成一个sensor.llmvision_front_door_description的实体。这个传感器的状态state就是最新的描述文本其属性attributes里通常还会包含本次调用的时间戳、使用的模型名称等信息。这个数据流清晰地将视觉感知能力变成了HA系统里一个可查询、可触发的标准数据点完美融入了HA的自动化生态。2.2 模型选型本地 vs. 云端的关键抉择选择用什么模型来“看图说话”是部署前最重要的决策直接决定了成本、速度和隐私性。本地模型如 LLaVA, BakLLaVA优势隐私绝对安全所有数据不出本地网络对于家庭摄像头这种敏感数据这是最大的吸引力。零持续成本一次性的硬件投入或利用闲置硬件没有按次计费的后顾之忧适合高频调用。可离线工作即使外网断了智能视觉能力依然在线。劣势硬件门槛高需要一台性能不错的机器通常需要带GPU的服务器或至少是Apple Silicon的Mac/高性能NUC。纯CPU推理速度慢体验差。模型能力有限相比顶尖的GPT-4V本地模型在描述的准确性、细节丰富度、对复杂场景的理解上仍有差距。部署运维复杂需要自己搭建模型服务如Ollama处理依赖、版本和资源管理。云端API如 GPT-4V, Claude 3优势开箱即用能力强大无需关心硬件直接使用当前最先进的视觉模型描述质量通常更高、更可靠。部署简单只需要一个API Key配置起来几分钟搞定。弹性伸缩无需担心本地算力瓶颈。劣势持续成本按调用次数和token数量计费如果摄像头触发频繁账单可能增长很快。隐私顾虑需要将家庭图像上传到第三方服务器尽管主流厂商有隐私承诺但心理上总是一道坎。依赖网络外网质量直接影响响应速度和服务可用性。我的选择与建议 对于家庭安防这类对实时性要求高、且涉及隐私的场景我强烈推荐优先尝试本地方案。我自己的主力方案是使用一台旧游戏本改装的服务器RTX 3060 GPU通过Ollama运行llava:7b模型。对于“门口有人吗”、“客厅灯是否亮着”这类简单查询7B参数模型完全够用响应时间在2-4秒可以接受。如果你有更强的显卡如RTX 4070以上可以尝试13B甚至34B的模型效果会更好。只有在对描述文采、复杂关系推理有极高要求例如“描述这幅画的风格和情感”时才考虑调用GPT-4V作为补充。2.3 与Home Assistant的集成深度ha-llmvision作为自定义集成其设计充分遵循了HA的哲学。它不仅仅是一个被调用的工具更是一个良好的“HA公民”。配置通过UI完成绝大部分设置可以在HA的“设置”-“设备与服务”-“添加集成”中完成无需直接编辑YAML文件对新手友好。实体管理清晰每个配置的实例都会生成独立的传感器实体你可以像对待温度传感器一样在概览页添加卡片实时查看图像描述。服务调用标准化它提供了一个名为llmvision.process的服务。你可以在自动化、脚本或开发者工具中通过指定entity_id目标摄像头和llmvision_instance配置的实例名来触发一次图像分析。这种设计使得它可以被灵活地嵌入到任何现有的自动化逻辑中。配置验证在保存配置时集成会尝试连接你指定的模型端点或API并返回验证结果避免了配置错误导致后续自动化失败。3. 从零开始的详细部署与配置指南理论讲完我们进入实战。假设你已经在运行Home Assistant无论是Core、Supervised还是OS并且有一台可以运行AI模型的机器本地或云端API。3.1 基础环境准备1. 安装HACS如未安装ha-llmvision通过HACSHome Assistant Community Store管理是最方便的方式。如果你的HA还没安装HACS需要先安装它。进入HA点击左下角用户名进入“高级模式”。在“设置”-“系统”-“硬件”页面找到你HA的“内部网”IP地址。在你的电脑浏览器访问http://[HA_IP]:8123确保和HA在同一网络然后打开开发者工具F12的控制台Console。粘贴并运行HACS的安装命令具体命令请从HACS官网获取最新版此处不赘述。安装完成后重启HA左侧边栏会出现HACS图标。2. 通过HACS安装ha-llmvision点击左侧HACS图标点击“集成”。点击右下角“浏览并下载存储库”。在搜索框中输入llmvision找到LLMVision作者valentinfrlch点击进入。点击“下载”按钮选择最新版本下载。下载完成后务必重启Home Assistant让集成加载。3.2 配置详解以本地Ollama为例重启后我们开始配置。这里以最常用的本地Ollama方案为例。1. 部署Ollama服务在你的另一台Linux服务器或同一台机器上通过Docker安装Ollama。# 在Ubuntu/Debian上安装Ollama curl -fsSL https://ollama.com/install.sh | sh # 启动Ollama服务 ollama serve # 拉取并运行llava模型7B版本对硬件要求较低 ollama run llava:7b第一次运行ollama run会自动拉取模型需要较长时间。运行后Ollama的API服务默认在11434端口启动。2. 在HA中添加LLMVision集成进入HA“设置”-“设备与服务”-“添加集成”。搜索“LLMVision”并点击。会出现配置向导。你需要填写以下关键信息Name: 实例名称如front_door。这会用于生成实体名sensor.llmvision_front_door_description和服务调用。Model type: 选择“Ollama”。Base URL: 你的Ollama服务地址。如果Ollama和HA在同一台机器可以是http://localhost:11434如果在不同机器则是http://[OLLAMA_SERVER_IP]:11434。Model: 模型名称必须与Ollama中拉取的模型名完全一致例如llava:7b。Vision model: 对于Ollama这个选项通常留空或与Model一致因为模型本身已包含视觉能力。Prompt:这是灵魂所在默认可能是简单的“Describe this image”。但为了获得更贴合智能家居场景的描述我强烈建议修改。例如“你是一个家庭安防助手。请用简洁的一句话描述这张图片中的主要内容。重点关注是否有人、人的大致动作站立、行走、弯腰、是否有车辆、宠物猫/狗在做什么、主要物体如包裹、行李箱。如果场景空旷无异常就说‘场景正常无异常’。不要添加任何额外的评论或问候。”3. 高级配置项解析点击“显示高级选项”可以展开更多设置这些对优化体验至关重要Timeout (seconds): 超时时间。本地模型推理可能较慢建议设置为30-60秒避免因单次推理慢导致HA服务调用超时。Max tokens: 生成描述的最大长度。对于安防描述50-150个token足够设置过大浪费资源。我通常设为120。Image source entity: 这里可以留空。如果留空则需要在调用服务时动态指定entity_id。如果固定使用某一个摄像头可以在这里直接选择这样调用服务时可以省略该参数。Scan interval: 定期扫描间隔。除非你有非常规律的定时分析需求否则建议禁用设置为0。更推荐通过自动化来触发这样更节能、更精准。配置完成后点击“提交”集成会尝试连接Ollama并验证模型。如果看到“Successfully created”的提示说明配置成功。3.3 创建你的第一个视觉自动化集成配置好实体也有了现在让它动起来。目标当门前摄像头检测到人形通过HA自带的人形检测或Frigate等工具时触发LLMVision分析并将描述通过TTS播报出来。1. 创建触发分析的脚本我们可以先创建一个脚本将分析动作封装起来方便复用。 在HA中“设置”-“自动化与场景”-“脚本”点击“创建脚本”。alias: “分析门前图像” sequence: - service: llmvision.process data: llmvision_instance: front_door # 你配置的实例名 entity_id: camera.front_door_snapshot # 你的摄像头快照实体 mode: single icon: mdi:eye保存为script.analyze_front_door。2. 创建完整自动化现在创建自动化将人形检测、图像分析和TTS播报串联。 在“自动化与场景”-“自动化”点击“创建自动化”选择“从空白开始”。触发器选择“状态”作为触发类型。实体选择你的人形检测二进制传感器例如binary_sensor.front_door_person。状态从“关”到“开”。条件可选可以加个条件比如只在白天通过太阳传感器判断触发避免夜间误报吵醒家人。动作首先调用我们刚创建的脚本选择“调用服务”-script.analyze_front_door。然后等待图像分析完成。我们需要等待传感器状态更新。添加一个“等待”动作选择“等待模板值”。值模板{{ states(‘sensor.llmvision_front_door_description’) ! ‘未知’ }}。意思是等待描述传感器的状态不再是初始的“未知”。最后播报结果。添加“调用服务”-tts.speak。实体选择你的媒体播放器如media_player.living_room_speaker。消息{{ states(‘sensor.llmvision_front_door_description’) }}可以设置语言、音量等。保存这个自动化。现在当门前检测到人时HA会抓拍图片发送给本地LLaVA模型分析并在几秒后用音箱告诉你“门口有一位穿深色外套的快递员正在放置包裹”。4. 性能调优与实战避坑经验部署成功只是第一步要让它在生产环境中稳定、高效地跑起来还需要一些“微操”。4.1 硬件资源与模型性能平衡本地模型推理是资源消耗大户。你需要监控服务器的资源使用情况CPU、GPU、内存。GPU内存是关键运行llava:7b模型至少需要4-6GB的GPU显存。如果你的GPU显存不足会退回到CPU推理速度会慢10倍以上。使用nvidia-smiN卡或rocm-smiA卡命令监控显存占用。Ollama参数调优在Ollama运行模型时可以指定参数来优化性能。例如通过修改Ollama的Modelfile或使用ollama run时加参数来限制GPU层数、调整批处理大小。一个常用的启动命令是ollama run llava:7b --num-gpu 20这表示将20个模型层放在GPU上运行总层数可能32层剩下的在CPU这是一种混合策略能在显存不足时提升速度。温度Temperature参数在ha-llmvision的高级配置中可以设置temperature。对于安防描述这种需要客观、准确的任务建议设置为较低值如0.1-0.3减少模型“胡编乱造”的可能性。对于创意描述可以调高。4.2 提示词Prompt工程的艺术提示词直接决定了AI“看”到什么和“说”出什么。写提示词有几个原则角色设定开头就告诉AI它扮演什么角色“你是一个家庭安防助手”这能有效框定它的回答风格。任务明确用清晰的指令告诉它要做什么“用简洁的一句话描述...”。焦点引导列出你关心的关键对象人、车、宠物、包裹和属性动作、颜色、位置。格式约束要求它“不要添加任何额外的评论或问候”让输出干净便于后续自动化处理。负面示例告诉它如果什么都没发生该说什么“场景正常无异常”避免返回空字符串或无关内容。一个进阶的提示词示例“你正在分析家庭安防图像。请严格按以下JSON格式输出{“has_person”: true/false, “person_action”: “standing”/“walking”/“crouching”/“”, “has_package”: true/false, “primary_description”: “一句简短总结”}。重点关注画面中央区域。如果没有人person_action字段留空。primary_description必须是一句流畅的陈述句。”当然LLaVA 7B这类小模型对复杂JSON格式的遵循能力可能不稳定可能需要多次调试或升级更大模型。但对于GPT-4V这种结构化输出的提示词能极大提升自动化效率。4.3 网络与稳定性保障内网连通性确保HA主机能稳定访问Ollama服务器的11434端口。建议使用固定IP并在路由器设置静态DHCP分配。HA服务超时HA默认的服务调用超时可能较短。如果模型推理时间较长可能导致调用失败。除了在集成配置里增加timeout还可以在调用服务的动作中添加timeout参数单位秒。- service: llmvision.process data: llmvision_instance: front_door entity_id: camera.front_door_snapshot timeout: 00:01:00 # HH:MM:SS 格式表示1分钟超时摄像头快照质量图像质量影响分析结果。确保你的摄像头实体能提供清晰、亮度适中的快照。可以在HA开发者工具中调用camera.snapshot服务测试。如果图像太暗或模糊考虑在调用LLMVision前先通过图像处理如image_processing组件进行调整。5. 典型应用场景与自动化创意掌握了基础我们可以玩出更多花样。ha-llmvision的价值在于将视觉描述这个“信号”接入HA庞大的自动化网络。5.1 安防监控与告警升级这是最直接的应用。超越简单的人形检测包裹滞留提醒自动化在检测到“门口有包裹”后启动计时器。如果2小时后描述仍包含“包裹”则发送更紧急的推送通知“门口包裹可能未被收取请注意”车辆识别配合车牌识别可能需要更专门的模型当描述中出现“一辆黑色轿车”且不属于家庭白名单车辆时触发警报。异常行为判断通过多次连续的分析例如每分钟一次结合描述文本的变化“有人在踱步” - “有人在尝试开门把手”可以构建更复杂的异常行为逻辑链。5.2 宠物与家人看护宠物活动日志在宠物活动区域设置摄像头定时如每30分钟分析描述“猫咪在猫爬架上睡觉”或“狗狗在啃沙发角”。将这些描述连同时间戳通过HA的recorder组件记录到数据库或直接追加到一个文本文件中形成可爱的宠物日记。老人起居关怀在客厅等公共区域定时分析场景。通过描述判断老人活动状态“老人坐在沙发上看电视”、“老人在餐桌旁用餐”。如果长时间如上午3小时未出现“老人”相关描述可能意味着老人未出卧室可触发一个温和的提醒如让智能音箱播放音乐并询问是否需要帮助。5.3 智能家居场景联动让家居环境更“懂”你回家场景个性化分析进门画面如果描述是“提着几个购物袋”则自动开启更亮的灯光并让音箱播放欢快的音乐。如果描述是“抱着一个纸箱”则可能提示“需要我帮你打开车库门吗”通过TTS。会议状态自动切换在书房摄像头视野边缘不侵犯隐私放置一个标志物。自动化定时分析如果描述中出现“绿色指示灯亮”代表标志物状态则自动将家庭状态设为“会议中”并静音所有通知、调低其他房间媒体音量。植物养护提醒对准一盆植物每周分析一次。提示词改为“请判断这盆绿萝的叶片状态是否健康、有无枯黄、土壤看起来干燥还是湿润”。根据返回的描述决定是否触发浇水提醒。6. 常见问题排查与调试技巧在实际使用中你肯定会遇到一些问题。这里列几个我踩过的坑和解决方法。6.1 集成无法添加或验证失败症状在HA添加集成时卡在验证步骤提示连接失败或超时。排查步骤检查网络从HA主机所在的网络环境用curl命令测试是否能访问Ollama或API端点。例如curl http://[OLLAMA_IP]:11434/api/tags应该返回模型列表。检查模型名称确保填写的模型名与Ollama中拉取的完全一致包括冒号和版本号。在Ollama服务器运行ollama list确认。检查Ollama服务确保Ollama服务正在运行systemctl status ollama或查看进程。首次拉取模型后需要手动运行一次ollama run来启动模型服务进程。查看HA日志这是最重要的信息源。进入HA“设置”-“系统”-“日志”在添加集成失败后立即查看相关错误信息。错误日志通常会明确指出是网络问题、认证问题还是模型加载问题。6.2 服务调用成功但传感器状态无更新症状自动化触发日志显示服务调用成功但sensor.llmvision_xxx_description的状态一直是“未知”或旧值。排查步骤检查超时模型推理时间可能超过了服务调用或集成的超时设置。查看HA日志中是否有超时错误。适当增加集成配置和自动化动作中的超时时间。手动测试服务在HA开发者工具-服务中手动调用llmvision.process服务指定正确的实例和实体ID。观察日志输出和传感器状态变化。这是隔离自动化复杂性的好方法。检查图像源确认你指定的entity_id确实能提供有效的图像。在开发者工具-状态中查看该摄像头实体的状态和属性确认其entity_picture属性是否有值。也可以直接调用camera.snapshot服务为该实体生成快照试试。6.3 模型返回的描述质量差或胡言乱语症状描述不准确、遗漏关键信息或者开始编造画面中不存在的东西。解决方案优化提示词这是最有效的手段。参考前面“提示词工程”部分让指令更具体、更严格。明确要求它“只描述看到的”并给出负面示例。调整模型参数降低temperature值如0.1让输出更确定性、更保守。增加max_tokens可能让描述更详细但也可能增加废话。升级模型如果硬件允许尝试更大的模型版本如llava:13b。更大的模型通常有更好的指令遵循能力和描述准确性。检查输入图像图像是否太暗、太模糊、分辨率过低模型可能因为看不清而瞎猜。确保摄像头提供质量合格的JPEG图像。6.4 性能瓶颈与优化症状推理速度慢导致自动化链条延迟高或者高并发调用时系统卡顿。优化方向硬件层面这是根本。升级GPU是最直接的方式。如果使用CPU确保有足够的内存和较高的单核性能。模型层面尝试量化版本的模型如Ollama中带-q4_0后缀的在几乎不损失精度的情况下大幅减少内存占用和提升速度。调用频率审视你的自动化触发频率。真的需要每秒或每分钟都分析吗根据场景调整比如安防可以在检测到移动后再分析而不是持续分析。缓存策略对于变化不快的场景如房间整体状态可以考虑在HA里用“辅助元素”创建一个模板传感器只在描述发生显著变化时才更新避免下游自动化被频繁触发。经过这一番从原理到实战的折腾ha-llmvision这个项目给我的最大感触是它成功地将前沿的多模态AI能力“平民化”和“场景化”了。它没有追求大而全的通用视觉识别而是精准地定位于“为HA生成描述文本”这个切入点通过简单的配置和标准的服务接口把能力释放给了每一个HA用户。剩下的就靠我们自己的想象力和自动化编排能力去创造真正有意义的智能家居体验了。开始动手吧从让AI“看见”你家门口的第一个包裹开始。