让 AI Agent 看见摄像头,但不替你做决定:Senseplane 的自托管感知层
AI Agent 通常只“看见”用户贴进对话的文件和文本。如果它需要理解现实环境——例如门口是否有包裹、设备是否发出异常声音——就必须接入摄像头或传感器。Senseplane 是一个 Apache-2.0 许可的早期开源项目,定位为运行在自有设备上的感知服务:接入摄像头、麦克风或传感器,再通过 MCP、REST API、Webhook 和 TypeScript SDK 把观测结果提供给 Agent。
它强调的是 perception,而不是替 Agent 自动采取行动。官方 README 将流程概括为 Look、Watch、Ask、Measure、Replay:读取当前画面、订阅条件事件、查询历史、统计活动并回放片段。项目在 README 标注为 v0.2 early,明确提示仍可能有粗糙之处;因此更适合实验环境或愿意自行运维的团队,而非未经评估就用于关键安防。
数据如何从摄像头进入 Agent
Senseplane 把系统拆成媒体接入、分析、API、MCP、控制台等部分。快速体验路径使用 Docker Compose 在一台机器上启动服务;README 的组件表还列出 TypeScript 媒体层、Python brain、Fastify API、MCP 服务及 TypeScript SDK。官方 VM 指南给出的参考环境是 Linux VM,建议约 4 vCPU、8 GB RAM 可供最多约 4 路摄像头使用;实际容量仍取决于编码、分辨率、保留时间和模型负载。
Agent 可以通过 MCP 的十个工具操作授权范围内的数据,包括 look、listen、watch_for、what_happened、measure 和 replay。远程 MCP 使用 Streamable HTTP 与 OAuth 授权页;连接者需要选择允许访问的摄像头、传感器和能力。也可以运行本地 stdio 服务,并通过 API key 认证。无论哪种方式,Agent 只能获得明确授予的权限;例如没有音频授权时,listen 会被拒绝。
一个最小的本地 MCP 客户端配置,关键是指向构建后的 stdio 入口,并通过环境变量传 API 地址和密钥:
{
"mcpServers": {
"senseplane": {
"command": "node",
"args": ["/path/to/senseplane/mcp/dist/stdio.js"],
"env": {
"SENSEPLANE_API_KEY": "${SENSEPLANE_API_KEY}",
"SENSEPLANE_API_URL": "http://localhost:58080/v1"
}
}
}
}
文档给出了这类配置结构,不过具体 MCP 客户端是否支持环境变量插值,取决于客户端本身;若不支持,应在其安全配置方式中注入变量,而不是把真实密钥提交进项目文件。远程连接则可指向部署域名下的 /mcp,并经 OAuth 同意页选择权限。
从观察开始,而不是自动化动作
一个较稳妥的试点可以从“门口有包裹时通知我”开始:先添加摄像头,在控制台授权一个 Agent 只读指定来源,再创建 watch;事件可以投递到 Agent inbox,Agent 调用 what_happened 获取新事件。等确认摄像头覆盖范围、误报水平和权限边界后,才考虑把通知接入其他工作流。
这层边界很重要。Senseplane 提供的是观测和证据,并不意味着模型的判断天然准确,也不应默认让它控制门锁或执行其他高影响动作。更安全的设计是把观测、判断和执行分开:系统记录事件与证据,Agent 给出解释,涉及外部操作时仍由独立策略或人工审批把关。
自托管也不等于隐私风险自动消失。官方文档要求部署者考虑合法摄像头使用;还需要自行规划录像保留、备份、访问审计、模型 API 的数据处理和网络暴露面。VM 指南说明录像占用会随摄像头数量和保留天数快速增长,且建议备份密钥、数据库及需要保留的媒体数据。开始前应先确认存储预算与授权范围,并避免将带密钥的 Compose 配置公开。
适合谁,暂时不适合谁
如果团队希望让 Agent 在有限授权下查询真实环境,且能接受自托管、配置网络和持续验证,这种 MCP 感知层值得在隔离环境试用。它把实时画面、事件与历史回放通过统一接口交给 Agent,也让权限在服务端显式管理。
但它不是开箱即用的家庭监控承诺:项目仍处于早期版本,部署、摄像头接入、模型质量和存储维护都需要实测。先用非敏感场景、短保留周期和只读权限验证整条链路,再评估是否扩大规模;若只是让 Agent 看几张图片,直接使用现有视觉 API 可能更简单。工具的意义不在于“让 AI 无所不知”,而在于为必要的环境观测建立可检查、可撤销的访问边界。