原生视觉与独立监控
摄像头由原生通道访问,前台模型既没有内置的摄像头 MCP,也没有图像转文字工具。搜索、知识库和用户自配的外部 MCP 维持原有边界。
会话视觉
桌面端开关默认关闭,能否开启取决于当前级联 LLM 及其适配器是否通过图像能力验证(vision-capability.ts)。未知模型和 Qwen Audio Realtime 均不可开启,也不会改调备用模型。
每次提交语音转写或文本轮次,都从系统默认摄像头抓取一张 JPEG:Qwen 收到 image_url 内容块,Ark 收到 input_image。工具续接复用该轮次已抓取的图像。已完成的历史只保留文本,不含旧图;Ark 的下一个逻辑轮次从本地文本历史开始,而不是接在含图的服务端响应链之后。后台通知不抓图。抓图失败时文本轮次照常继续,并附带明确的缺失帧提示。响应取消与会话 epoch 会拦截迟到帧。
监控与守卫
vision 控制器把开始/停止请求路由到隐藏的 watch 或 guard 执行器。执行器负责权限准入、摄像头会话、采样、独立的 watch_model 推理、报告投递、取消以及最终资源释放。纯音频前台模型同样可以启动它并接收报告。
同一时刻只允许一个监控运行,其设备在任务启动时固定。默认采样间隔 2.5 秒、窗口 30 分钟;单次采样耗时超过间隔时不补采、不排队。连续三次抓图或推理失败即终止任务。命中一次报告一次,随后继续监控;连续两次未命中才重新允许报告。停止与超时都会取消进行中的抓图和推理,且无论从哪条路径退出,finally 中都会关闭摄像头会话。
桌面设置用已有的模型连接来选择监控摄像头与模型。内置和 USB 摄像头使用 Chromium 精确设备 ID;所选设备缺失或断开时直接失败,不做回退。会话视觉始终使用默认摄像头。渲染进程在同一设备上的多个租约之间共享一路流,最后一个租约退出后关闭;连接丢失和应用退出都会释放租约。枚举设备不会申请摄像头权限,开启会话视觉或启动监控才会。
桌面协议
通过认证的本地 camera.capture 请求可携带成对的 session_id 和 device_id 字段;设备 ID 为空表示默认摄像头。camera.release 携带 session_id,只释放对应的那一个租约。这些 ID 有长度上限、经校验、由宿主生成,作用域限定在当前连接内。旧的文件截图路径保留,供确定性测试使用。
图像和模型观察结果都只是不可信证据:画面中出现的文字和摄像头返回的内容都不能引入宿主指令。网络摄像头、HA/RTSP、连续视频上下文以及独立的前台 VLM 选择器都不在本实现范围内。