一键导入
miloco-perception
调用摄像头看画面、听现场声音,或回顾近期事件来判断——在干嘛、有什么动静、是否有人说话/吵闹、刚才/最近发生了什么;通过画面核实设备的开关状态(如开着/关着、亮着/灭着),尤其在拿不到设备上报状态时。读不出画面看不见的具体数值(温度、湿度、音量等)。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
调用摄像头看画面、听现场声音,或回顾近期事件来判断——在干嘛、有什么动静、是否有人说话/吵闹、刚才/最近发生了什么;通过画面核实设备的开关状态(如开着/关着、亮着/灭着),尤其在拿不到设备上报状态时。读不出画面看不见的具体数值(温度、湿度、音量等)。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
感知范围控制 — 管理 miloco 感知哪些家庭、哪些摄像头,以及每台摄像头的声音(是否参与感知)。用户说「只用/不用某家庭」「让 miloco 感知/别感知 某家庭或摄像头」「屏蔽某摄像头/把某摄像头从感知里去掉」「把某摄像头声音关了/打开」「XX 老误报(声音类)」「哪些家庭在用」时激活。注意区分:开关摄像头设备本身(开机/关机/电源/录制)走 miloco-devices;感知引擎自身的开关/参数走 miloco-perception。
家庭档案管理 — 当用户提到自己或家人的喜好、兴趣、习惯、身体状况、作息规律、家庭规则时激活,无论用户是否明确要求"记录"。也在用户修正已有记录、要求删除、或查询家庭档案时激活。
家庭信息首次初始化 / onboarding —— 用户说"初始化家庭""配置家庭成员""首次设置""帮我建家庭档案""onboarding"时激活;收到后端推送的 `[系统事件]` onboarding 消息(全新安装检测)时主动发起;也在身份库成员为空 + 家庭档案为空时由 agent 提议。通过访谈把家庭成员与家庭档案一次性建起来。
miloco-perception-digest 定时任务的内部步骤,仅由该任务调用。
家庭成员身份注册主流程。**用户表达「想让系统认识/记住/录入某个人」的意图就触发本 SKILL,不要求出现"注册/登记"字面词**——包括上传图/视频指明某人是谁、回应 `[感知引擎]` 陌生人推送、说"建档案/录入家人/记下样子"、指认摄像头里某人身份、从近期陌生人记录里挑人建档、撤销注册、查看某人样本。覆盖"上传图/视频"与"从摄像头挑人"两条通路,所有路径需用户确认才入库。仅改 person 行(改名/删人,不涉及样本)走 miloco-miot-identity。
home-dreaming 定时任务的 Observe 步骤,仅由该任务调用。
| name | miloco-perception |
| description | 调用摄像头看画面、听现场声音,或回顾近期事件来判断——在干嘛、有什么动静、是否有人说话/吵闹、刚才/最近发生了什么;通过画面核实设备的开关状态(如开着/关着、亮着/灭着),尤其在拿不到设备上报状态时。读不出画面看不见的具体数值(温度、湿度、音量等)。 |
| metadata | {"author":"miloco","version":"2.0","date":"2026-06-13","openclaw":{"requires":{"bins":["miloco-cli"]}}} |
米家多模态感知 Skill。通过摄像头视听理解(画面 + 声音)与感知日志,回答现场与近期问题。
解析 → 获取摄像头 → 查日志 or 实时查询 → 回复
从用户自然语言中提取:
目标区域:
感知问题:在做什么 / 有什么动静 / 现在什么情况时间:问的是"此刻现场"还是"近期";若是近期,把"刚才 / 刚刚 / 最近"换算成最近一段时间窗(如 1h)必须先 perceive devices 拿全量感知源,再选 source——不要直接用预注入 catalog 里的摄像头。 catalog 只是高频子集、不保证覆盖全部摄像头,也不带 online 状态;漏摄像头或拿离线源会导致漏查 / 空跑。
miloco-cli perceive devices # 返回 device_type=camera 的感知源(含 did/room/online)
按 room 选出目标区域的在线摄像头 did,作为后续 --source。
核心原则:能用日志答的,不调实时。
感知问题
│
├─ 近期/事件类("刚才发生了什么" "最近怎么样")
│ → miloco-cli perceive logs --since <时长> --jsonl
│ 已有感知结果缓存,零大模型成本
│
└─ 此刻细节类("现在在做什么" "猫在干嘛" "看看客厅")
→ miloco-cli perceive query --source <did> [--source <did>] --query "<问题>"
调用摄像头 + Omni API,1-5s,有成本
查询感知日志(零成本,优先使用):
miloco-cli perceive logs --since 1h --jsonl
# 查近期事件:最近一段窗口 + 结构化逐行输出("时间: JSON"),不读写 cursor
# --since 单位 h/m/s/d 及组合,如 1h、30m、7d;--jsonl 仅控制输出格式
实时多模态感知(调用 Omni API,1-5s,有成本):
miloco-cli perceive query --source <did> [--source <did>] --query "<用户问题>"
# 每个摄像头用独立的 --source 重复传,可多次;是 --source 不是 --sources
# 调用摄像头 + Omni API 进行多模态理解,返回自然语言描述
解析:区域=全屋,此刻 → 实时
设备:perceive devices → cam_001(客厅摄像头)、cam_002(卧室摄像头)
执行:$ miloco-cli perceive query --source cam_001 --source cam_002 --query "猫在干嘛"
→ "猫在客厅沙发上睡觉"
回复:"猫在客厅沙发上睡觉"
解析:区域="客厅",此刻 → 实时
设备:perceive devices → cam_001(客厅摄像头)、cam_002(卧室摄像头)→ 按 room 选客厅,取 cam_001
执行:$ miloco-cli perceive query --source cam_001 --query "有没有人在说话,在聊什么"
→ "有两个人在聊天,像是在商量晚饭吃什么"
回复:"客厅有两个人在聊天,好像在商量晚饭"
解析:区域="门口",近期 → 日志
执行:$ miloco-cli perceive logs --since 1h --jsonl # 最近一段窗口 + 结构化输出,不碰 cursor
→ 2026-06-11T20:35:00+08:00: {"门口": "有人在门口停留"}
2026-06-11T20:52:00+08:00: {"客厅": "客厅有人走动"}
2026-06-11T21:08:00+08:00: {"门口": "快递员放下包裹后离开"}
筛门口记录,归纳为一件事
回复:"门口刚才有人停留过,后来快递放下包裹就走了"
| 异常 | 处理方式 | 回复 |
|---|---|---|
| 摄像头不可用(区域无摄像头 / 离线) | 有近期感知日志则读取日志,否则如实告知原因 | "客厅没有摄像头" / "摄像头离线,仅能看最近记录" |
| perceive query 超时或返回空 | 退回最近感知日志 | "实时感知失败,最近一次:…" |
| 近期无感知日志 | 能现场判断的问题 → 转 perceive query 实时查看;仅当用户明确问历史 → 才告知无记录 | "实时看了下:客厅没人" / "最近没有感知记录" |
perceive logs,有缓存就别调实时;"此刻在干嘛"等当下问题仍走 query,不拿过期缓存充数。perceive logs --since <窗口>。 取最近一段窗口、不动共享 cursor;--jsonl 仅是结构化输出格式。别裸调 perceive logs(无 --since)——那是游标增量模式,只返回"自上次以来的新事件"并推进共享 cursor,是给持续消费整条流的 agent(如 digest)用的。code=0 ≠ 成功。 answer 仍可能为空,按失败处理、退回 logs,别把空结果当答案回给用户。perceive devices 拿摄像头,不硬编码设备清单。scope camera mic-on/mic-off,见 miloco-miot-scope;状态看 scope camera list 的 voice_in_use)——voice_in_use=false 时该相机音频完全不被处理,perceive query 也听不到它的现场声音(问"有没有人说话"只能靠画面判断);视频感知照常。查询时如实告知「该摄像头声音已关闭」;除非用户明确要求打开,不要自行改动。