开门式自动售货机语音对话系统的对话策略设计

—基于rk3588的ai对话—

打印本文       小   中   大

本文档合并全部已锁定决策,可直接作为开发、评审、验收基线。文末附 「可直接交给 AI 的工作流程说明」,按任务卡拆解,可逐卡投喂给 AI 编程助手执行。


一、方案总览

一句话:双入口(摄像头主动引导 / 语音唤醒)进入统一对话状态机;意图分类器上 NPU,仲裁层纯 C# 可解释;扫码开门后进入会话锁定态;关门必须经串口一体锁确认落锁 + 上报成功才结算;落锁后强开立即本地报警 + 三路录像,仅后台可解除。

七条核心原则:

#原则
1安全红线优先于模型精度:误开门/误结算 0/1000
2仲裁不做模型:纯 C# 规则 + 逻辑回归,主拒因可追溯
3不搞统一阈值:查询/导购/开门/支付四档
4服务端概率先校准,客户端用校准分仲裁
5确认与执行分离,动作强确认口令化,幂等锁防重
6本地状态优先:库存、柜门、订单、锁定态只有客户端知道
7模型可回滚:CPU 版与 RKNN 版同权重并行

二、系统架构

后台

执行层

决策层

感知层

视觉-A 柜前人脸/朝向/停留

视觉-B 柜内取货/关门

ASR SenseVoice
NPU 核1

串口一体锁
落锁+磁传感器

语音唤醒

意图分类器
RKNN NPU 核0 / CPU 兜底

服务端意图服务
intent/slots/校准conf/margin/top3

仲裁器(纯 C#)
13 维特征 + 风险分

对话状态机 S0~S13
+ 动作白名单 + 会话锁定

屏幕 UI
扫码/推荐/购物/告警

TTS 播报

本地固定报警音

三路本地录像
10min/段

开门/落锁执行

商品/需求/落锁上报/强开告警

强开解除指令


三、端到端主流程

人脸停留≥2s且朝向柜门
且非冷却期/非静音时段

唤醒词

是/直接说商品

否/8s无响应

闲聊/公司信息

商品咨询

推荐

开门命令

有货

无货

选定

返回

返回/超时60s

扫码成功+服务器下发

10s未开门

检测开门

取货>20s

检测关门

检测关门

重试3×1s失败

后续确认

确认

退避重试3次失败

成功

补报成功

落锁后强开

落锁后强开

后台确认解除

S0 休眠

触发源

S1 主动引导
您好,需要购买商品吗?

S2 对话模式

ASR → 服务端候选 + 本地分类器
→ 仲裁器三态路由

S11 应答 → S2

S3 查商品列表

S4 推荐列表

S5 扫码界面

S10 提交需求
已记录,等待反馈 → S2

S6 已下发开门指令 🔒锁定
命令类语音失效

自动落锁
欢迎下次光临 → S0

S7 取货购物 🔒
两路视觉识别 + 购物引导

S8 推荐相关商品
只播一次,可说不用

S9a 串口下发落锁

串口回读locked=true
稳定≥500ms

S12 落锁异常
门未锁好,请关好柜门
不结算

S9c 上报服务器

S9d 待补报
感谢购买,结算稍后完成
不扣库存不结算

S9e 结算+扣库存
感谢购买,欢迎下次光临

🔓解锁 → S0

S13 强开报警


四、状态机全表

人脸触发

唤醒词

是/命令

否/超时+冷却5min

商品咨询

推荐

开门命令

闲聊/公司信息

无货→提交需求

有货

选定

返回

扫码成功+服务器下发

返回/超时60s

10s未开门→落锁

开门

取货>20s

关门

关门

落锁命令下发

locked=true稳定500ms

重试3次失败

后续确认

上报成功

重试仍失败

补报成功

致谢后解锁

继续

继续

强开

强开

后台确认解除

S0 休眠(串口监听)

S1 主动引导

S2 对话模式

S3 商品咨询

S4 推荐列表

S5 扫码界面

S6 已下发开门指令 🔒

S7 取货购物 🔒

S8 超时推荐 🔒

S9a 下发落锁 🔒

S9b 等串口确认 🔒

S9c 上报 🔒

S9d 待补报 🔒

S9e 结算致谢 🔒

S10 需求已记录

S11 闲聊/公司信息

S12 落锁异常 🔒

S13 强开报警 🔒

状态锁定允许语音超时退出
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

五、A 通道:主动引导

否

是

是

否

是/要买/直接说商品/唤醒词

不/不用/无响应

视觉-A 检测人脸

停留≥2s 且朝向柜门
且非路过轨迹?

冷却5min内?
静音时段?

S1 播放:您好,需要购买商品吗?

8s内回应

S2 结合天气温度促销推荐
话术≤35字

有需要随时语音唤醒我
冷却5min → S0

引导扫码 S5

规则:多人以最先触发/唤醒者为主;对话中不重复引导;夜间静音时段只响应唤醒词;故障态 S12/S13 不主动引导。


六、B 通道:语音唤醒与对话

query 低风险

nav 中风险

open_door 高风险

command 锁定态

chitchat

是

否

唤醒词命中

S2 我在,请说

ASR → 服务端候选 + 本地分类器

仲裁器三态路由

直接答

可答,歧义追问

S5 扫码界面

reject:正在购物中,请关门结束后再聊

S11 交 LLM

返回?

扫码 → S6


七、商品咨询与需求提交

是

确认

否

无货/不存在

用户:有没有 XXX?

解析商品名/品类/别名

GET /products 查列表(含价格库存促销关联)

存在且有货?

有,X 元,库存 Y,要买吗?

S5 扫码

S2 继续

POST /demand 异步幂等提交
同会话同商品只提交一次

S10 已帮您记录需求,到货会通知
→S2


八、扫码开门 → 取货 → 落锁结算

否/60s超时

是

否

是

是

否

否

是

重试3×1s失败

后续确认

确认

退避3次失败

成功

补报成功

S5 屏幕二维码

用户扫码

扫码成功?

返回S2

服务器下发开门指令

🔒进入S6锁定态

串口开锁

门已开,请开门取货
屏幕提示

10s内开门?

自动落锁
未开门,已自动落锁,欢迎下次光临
🔓→S0

S7 两路视觉取货识别 + 购物引导

取货>20s?

S8 推荐相关商品
只播一次,可说不用

关门?

S9a 串口下发落锁

回读locked=true
稳定≥500ms

S12 门未锁好,请关好柜门
不结算

S9c 上报

S9d 感谢购买,结算稍后完成
不扣库存不结算

S9e 结算+扣库存
感谢购买,欢迎下次光临

🔓→S0

会话锁定规则:

类别锁定后行为
命令类:返回/退出/取消/回聊天/切界面/不买了拒绝,播报“正在购物中,请关门结束后再聊”
非命令类:问价/问商品/公司信息/闲聊正常应答
控制类:不用推荐了/别说了/帮助停止推荐/播报帮助
唤醒词回应“我在”

九、串口一体锁

命令方向说明
LOCK下发请求落锁
LOCK_ACK回读执行结果
STATUS回读locked=true/false + 时间戳
  • 落锁确认:LOCK_ACK 成功 + STATUS locked=true稳定 ≥500ms(固定防抖,不可配)。

  • 强开判定:已确认落锁后 STATUS locked=false 或状态突变,同样 500ms 防抖。

  • 重试:3 次 × 1s;仍失败 → S12,不结算。

  • 结算双前置:串口确认落锁 + 上报成功,缺一不结算。


十、强开报警与录像(S13)

否

是

是

否

否

是

S9e已落锁/S0休眠

回读locked=false
或状态突变(500ms防抖)

S13 强开报警

立即播放本地固定报警音
不可远程更换/无静音豁免

三路本地录像启动
柜前/柜内俯视/柜内正面

POST /alarm/forced_open

屏幕红色告警

重新落锁成功?

报警音不自动停止
等后台确认

报警音持续
录像循环(保护优先)

后台确认解除?

保持S13

停报警音
录像继续30s后保存
→S0

锁定规则:报警音本地固定、不可远程更换、无静音豁免;重新落锁不自动解除,仅后台确认解除;语音不能解除。


十一、录像存储管理

11.1 编码与容量(锁定)

摄像头分辨率帧率编码码率上限
柜前1920×108025fpsH.2652 Mbps
柜内俯视1280×72025fpsH.2651 Mbps
柜内正面1280×72025fpsH.2651 Mbps
合计—25fpsH.2654 Mbps ≈30MB/min
项数值
磁盘64GB 总 / 50GB 录像可用
10min 一段(三路)约 300MB
30min 保护窗口约 0.9GB
循环阈值剩余 <1GB
强开保护总上限5GB
正常保留≈26.7h
强开占满5GB后保留≈24.0h

11.2 存储流程(强开保护优先检查)

是

否

否

是

是

否

是

否

是

否

三路录像 10min/段

强开保护总量≥5GB?

暂停录像+告警
强开保护超限
不覆盖保护数据

剩余<1GB?

查找最旧非保护片段

存在?

覆盖最旧非保护片段

暂停录像+告警存储不足
保护数据不删

保护过期?

后台解除?

满30min转可覆盖

保护优先级:30min 开门保护 + 5GB 强开保护 > 循环覆盖。任何情况下不覆盖保护数据;无可覆盖则暂停录像并告警。


十二、服务端接口

接口用途关键字段
意图服务(URL 不变)intent/slots/校准conf/margin/top3action_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。


十三、仲裁器与分类器

13.1 仲裁器(纯 C#,13 维特征)

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.06risk≤0.55直接答
导购/导航conf<0.72 或 margin<0.08risk≤0.45可答,歧义追问
开门/扫码conf<0.85 或 margin<0.15risk≤0.35 且 conf≥0.85 且 margin≥0.15扫码+强确认
支付conf<0.90 或 margin<0.20risk≤0.25 且 conf≥0.90 且 margin≥0.20强确认+幂等锁

硬规则:ASR<0.70 动作类直接澄清;硬负命中动作类 reject;锁定态 command 直接 reject(主拒因 session_locked)。每次拒绝记录主拒因。

13.2 RKNN 分类器

固定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;报警音不可改
P5RKNN 分类器影子→灰度;日志回流一致率≥95%且动作误触发0

上一篇 rk3588 Armbian 适配
下一篇 无

HeNan Tyean .Co, Ltd.

地 址:河南省郑州市高新技术产业开发区翠竹街1号13幢6层06号 电 话:18603810315 Q Q:19540837 邮 箱:19540837@qq.com 邮政编码:450001

Copyright ©HeNan Tyean .Co, Ltd.,Inc.All rights reserved.  豫ICP备2025145210号-1  留言
微信公众号二维码