本文档合并全部已锁定决策,可直接作为开发、评审、验收基线。文末附 「可直接交给 AI 的工作流程说明」,按任务卡拆解,可逐卡投喂给 AI 编程助手执行。
一句话:双入口(摄像头主动引导 / 语音唤醒)进入统一对话状态机;意图分类器上 NPU,仲裁层纯 C# 可解释;扫码开门后进入会话锁定态;关门必须经串口一体锁确认落锁 + 上报成功才结算;落锁后强开立即本地报警 + 三路录像,仅后台可解除。
七条核心原则:
| # | 原则 |
|---|---|
| 1 | 安全红线优先于模型精度:误开门/误结算 0/1000 |
| 2 | 仲裁不做模型:纯 C# 规则 + 逻辑回归,主拒因可追溯 |
| 3 | 不搞统一阈值:查询/导购/开门/支付四档 |
| 4 | 服务端概率先校准,客户端用校准分仲裁 |
| 5 | 确认与执行分离,动作强确认口令化,幂等锁防重 |
| 6 | 本地状态优先:库存、柜门、订单、锁定态只有客户端知道 |
| 7 | 模型可回滚:CPU 版与 RKNN 版同权重并行 |
| 状态 | 锁定 | 允许语音 | 超时 | 退出 |
|---|---|---|---|---|
| S0 休眠 | 否 | 唤醒词 | — | 人脸→S1;唤醒→S2;强开→S13 |
| S1 主动引导 | 否 | 是/否/命令/唤醒词 | 8s | 是→S2;否/超时→S0+冷却5min |
| S2 对话 | 否 | 全部意图 | 30s→S0 | 分流 S3/S4/S5/S11 |
| S3 商品咨询 | 否 | 商品名/确认/取消 | 15s | 有→S4;无→S10 |
| S4 推荐列表 | 否 | 编号/返回 | 20s | 选定→S5;返回→S2 |
| S5 扫码界面 | 否 | 返回/取消 | 60s | 扫码→S6;返回→S2 |
| S6 开门指令已下发 | 🔒 | 非命令类/帮助 | 10s未开门 | 开门→S7;超时→落锁→S0 |
| S7 取货购物 | 🔒 | 非命令类/停止推荐 | 90s未取货→帮助 | 关门→S9a |
| S8 超时推荐 | 🔒 | 停止推荐/非命令类 | — | 关门→S9a |
| S9a 下发落锁 | 🔒 | 非命令类 | 2s | 命令下发→S9b |
| S9b 等确认 | 🔒 | 非命令类 | 3×1s重试 | 确认→S9c;失败→S12 |
| S9c 上报 | 🔒 | 非命令类 | 退避3次 | 成功→S9e;失败→S9d |
| S9d 待补报 | 🔒 | 非命令类 | 后台队列 | 补报成功→S9e |
| S9e 结算致谢 | 🔒 | 仅播报 | 5s | →S0解锁 |
| S10 需求已记录 | 否 | 继续/返回 | 10s | →S2/S0 |
| S11 闲聊/公司信息 | 否 | 继续/返回 | 30s | →S2 |
| S12 落锁异常 | 🔒 | 非命令类/帮助 | 持续告警 | 后续确认→S9c |
| S13 强开报警 | 🔒 | 语音不能解除 | 持续 | 仅后台确认解除→S0 |
规则:多人以最先触发/唤醒者为主;对话中不重复引导;夜间静音时段只响应唤醒词;故障态 S12/S13 不主动引导。
会话锁定规则:
| 类别 | 锁定后行为 |
|---|---|
| 命令类:返回/退出/取消/回聊天/切界面/不买了 | 拒绝,播报“正在购物中,请关门结束后再聊” |
| 非命令类:问价/问商品/公司信息/闲聊 | 正常应答 |
| 控制类:不用推荐了/别说了/帮助 | 停止推荐/播报帮助 |
| 唤醒词 | 回应“我在” |
| 命令 | 方向 | 说明 |
|---|---|---|
LOCK | 下发 | 请求落锁 |
LOCK_ACK | 回读 | 执行结果 |
STATUS | 回读 | locked=true/false + 时间戳 |
落锁确认:LOCK_ACK 成功 + STATUS locked=true稳定 ≥500ms(固定防抖,不可配)。
强开判定:已确认落锁后 STATUS locked=false 或状态突变,同样 500ms 防抖。
重试:3 次 × 1s;仍失败 → S12,不结算。
结算双前置:串口确认落锁 + 上报成功,缺一不结算。
锁定规则:报警音本地固定、不可远程更换、无静音豁免;重新落锁不自动解除,仅后台确认解除;语音不能解除。
| 摄像头 | 分辨率 | 帧率 | 编码 | 码率上限 |
|---|---|---|---|---|
| 柜前 | 1920×1080 | 25fps | H.265 | 2 Mbps |
| 柜内俯视 | 1280×720 | 25fps | H.265 | 1 Mbps |
| 柜内正面 | 1280×720 | 25fps | H.265 | 1 Mbps |
| 合计 | — | 25fps | H.265 | 4 Mbps ≈30MB/min |
| 项 | 数值 |
|---|---|
| 磁盘 | 64GB 总 / 50GB 录像可用 |
| 10min 一段(三路) | 约 300MB |
| 30min 保护窗口 | 约 0.9GB |
| 循环阈值 | 剩余 <1GB |
| 强开保护总上限 | 5GB |
| 正常保留 | ≈26.7h |
| 强开占满5GB后保留 | ≈24.0h |
保护优先级:30min 开门保护 + 5GB 强开保护 > 循环覆盖。任何情况下不覆盖保护数据;无可覆盖则暂停录像并告警。
| 接口 | 用途 | 关键字段 |
|---|---|---|
| 意图服务(URL 不变) | intent/slots/校准conf/margin/top3 | action_type/risk_level/hard_negative_hit/slot_conflicts |
GET /products | 商品列表 | name/alias/price/stock/promo/related |
POST /demand | 无货需求提交(幂等) | session_id/machine_id/item_text/time |
POST /door/lock_report | 落锁上报(幂等) | lock_sensor=serial_integrated/lock_debounce_ms=500/items_detected |
POST /alarm/forced_open | 强开告警 | event/recording/alarm_audio_played/relocked |
POST /alarm/clear | 后台解除强开 | operator/event_id/confirm |
服务端必做:意图库 40~60 条(intent/slots schema/hard_negatives/legal_states/action_type/risk_level);增加 unknown;概率校准;按 action_type 分层门限先挡 unknown。
conf, margin, entropy, slot_conflict, state_legal, verb_object_legal, hard_neg_hit, asr_conf, repeat_count, last_intent_consistency, inventory_available, door_state, order_state,外加 session_locked、intent_class。
risk = 1.2*(1-conf) + 1.5*(1-margin) + 2.0*slot_conflict + 2.5*state_illegal + 3.0*hard_neg_hit + 1.0*(1-asr_conf) + 0.8*repeat_penalty + 1.0*inventory_unavailable
| 动作类型 | 服务端 unknown 门限 | 客户端 accept | 确认 |
|---|---|---|---|
| 查询 | conf<0.65 或 margin<0.06 | risk≤0.55 | 直接答 |
| 导购/导航 | conf<0.72 或 margin<0.08 | risk≤0.45 | 可答,歧义追问 |
| 开门/扫码 | conf<0.85 或 margin<0.15 | risk≤0.35 且 conf≥0.85 且 margin≥0.15 | 扫码+强确认 |
| 支付 | conf<0.90 或 margin<0.20 | risk≤0.25 且 conf≥0.90 且 margin≥0.20 | 强确认+幂等锁 |
硬规则:ASR<0.70 动作类直接澄清;硬负命中动作类 reject;锁定态 command 直接 reject(主拒因 session_locked)。每次拒绝记录主拒因。
固定24字多热char-gram → MatMul(128) → Conv1d(k=3)→ 双池化(前6字/后6字/全局mean) → concat → FC→ 多任务:12意图+unknown + action/query
不用 char embedding Gather;超长截断保留最后 6 字;不足补 [PAD];int8 后 200~400KB。
rknn_set_core_mask(NPU_CORE_0) 绑单核,避开 ASR 核;CPU 同权重并行,超时 2ms 降级。
hard negative mining + focal loss;影子运行 2 周,一致率≥95% 且动作误触发 0 才灰度接管,可一键回滚。
意图集(12 + unknown):chat / company_info / product_inquiry / product_recommend / open_door / confirm / cancel / return / help / select_item / reject_recommend / control_stop_recommend / wake / unknown
| 场景 | 话术(≤35字) |
|---|---|
| 主动引导 | 您好,需要购买商品吗?说“要”我帮您推荐。 |
| 引导扫码 | 今天26℃,推荐冰可乐,扫码开门即可选购。 |
| 拒绝后 | 好的,有需要随时语音唤醒我。 |
| 有货 | 有可乐,3元,库存充足,要买吗? |
| 无货 | 暂时没有,已帮您记录需求,到货会通知。 |
| 扫码成功 | 扫码成功,正在开锁,请开门取货。 |
| 门已开 | 门已开,请开门选购,关门自动结算。 |
| 10s未开门 | 未开门,已自动落锁,欢迎下次光临。 |
| 锁定期返回 | 正在购物中,请关门结束后再聊。 |
| 关门检测 | 请稍候,正在落锁结算。 |
| 落锁失败 | 门未锁好,请关好柜门。 |
| 超时推荐 | 拿了可乐,搭配薯片更划算,需要吗? |
| 停止推荐 | 好的,不再推荐,请慢慢选购。 |
| S9d | 感谢购买,结算稍后完成。 |
| 结算成功 | 感谢购买,欢迎下次光临。 |
| 强开 | 报警音 + 屏幕“柜门异常,请勿强行开启”;语音不解除 |
| 异常 | 处理 |
|---|---|
| 人脸误检/路过 | 停留+朝向双条件+冷却抑制 |
| 唤醒误触发 | 二次确认“我在,请说” |
| 扫码超时/失败 | 返回 S2,提示重试 |
| 服务器下发开门指令失败 | 开门失败,请重试或联系客服,回 S5/S2 |
| 10s 未开门 | 自动落锁,结束购物,不扣款,→S0 |
| 取货识别失败 | 订单+重量兜底;仍失败→客服提示 |
| 90s 未取货 | 语音“需要帮助吗?”,继续等待不自动关门 |
| 串口落锁超时/校验失败 | 重试3×1s;失败→S12,不结算,告警 |
| 串口回读抖动 | 固定500ms稳定窗口 |
| 上报失败 | 退避3次;失败→S9d,语音“结算稍后完成”,不扣库存不结算 |
| 补报成功 | 触发结算;不通知用户(微信/支付宝自动推扣款) |
| 强开 | S13:本地固定报警音+三路录像+告警+屏幕提示 |
| 强开后重新落锁 | 报警音不自动解除,等后台确认 |
| 后台确认解除 | 停报警音,录像30s后保存,→S0 |
| 录像存储不足/强开超限 | 优先保护,暂停录像+告警,不删保护数据 |
| 门未关严 | 语音提醒,超时告警,不结算 |
| 断电/重启 | 读串口锁状态;locked=false且已结算→按强开处理;录像索引恢复 |
| 网络超时 | 查询类用本地分类器/缓存;动作类不执行 |
| 指标 | 目标 |
|---|---|
| 未确认落锁即结算 | 0/1000(红线) |
| 锁定期命令类语音误执行 | 0/1000(红线) |
| 报警音被远程更换/静音豁免 | 0次(红线) |
| 强开后自动解除报警 | 0次(红线) |
| 保护窗口内录像被覆盖 | 0次(红线) |
| 强开保护超限时覆盖保护数据 | 0次(红线) |
| 强开检测召回率 | 100% |
| 强开报警音响应 | ≤200ms |
| 三路录像同时启动成功率 | 100% |
| 串口落锁确认平均耗时 | ≤1.5s |
| 上报成功率(含重试) | ≥99.5% |
| 补报最终成功率 | ≥99.9% |
| 重复结算 | 0(幂等键) |
| 混淆对意图准确率 | ≥95% |
| 追问率 | 5%~15% |
| 端到端判定 p95 | ≤5ms(网络另算) |
| 正常保留时长 | ≥26h;强开占满5GB后≥24h |
| 主动引导误触发率 | ≤5% |
| 阶段 | 内容 | 验收 |
|---|---|---|
| P0 | 服务端意图库/商品/需求/落锁上报/强开告警接口 + unknown + 分层门限 + 概率校准 | 混淆对动作误触发=0 |
| P1 | 客户端仲裁器 + 状态机 S0~S13 + 会话锁定 + 强确认 + 幂等锁 + 界面控制 | 误开门0;锁定态命令0误执行 |
| P2 | 视觉-A 主动引导 + 冷却 + 静音 | 误触发≤5% |
| P3 | 串口一体锁 + 取货视觉 + 20s推荐 + 关门落锁上报结算 | 未确认落锁结算=0 |
| P4 | 强开报警 + 三路录像 + 存储管理 + 后台解除 | 保护数据覆盖=0;报警音不可改 |
| P5 | RKNN 分类器影子→灰度;日志回流 | 一致率≥95%且动作误触发0 |
地 址:河南省郑州市高新技术产业开发区翠竹街1号13幢6层06号 电 话:18603810315 Q Q:19540837 邮 箱:19540837@qq.com 邮政编码:450001