50 lines
6.2 KiB
Markdown
50 lines
6.2 KiB
Markdown
# 语音结束聊天:.31 已发布并安装
|
||||
|
|
|
|||
|
|
2026-10-05,用户反馈:对设备说“拜拜吧”或“就聊到这吧”,模型能理解结束意图,但设备不能主动结束会话。
|
|||
|
|
|
|||
|
|
## 原因与证据
|
|||
|
|
|
|||
|
|
北京时间 17:51 的云端只读核对确认,当前设备 `KP01-8995ACF5E69E`(公开编号 `3ef575a6-bbc0-4e00-9a5c-58a8157d9520`)在线,运行 `1.7.0-controls.30`,绑定数 1,没有活动通话。该长者的保存配置为 `SubtitleConfig.DisableRTSSubtitle=true`、`SubtitleMode=1`、`EnableConversationStateCallback=false`。
|
|||
|
|
|
|||
|
|
火山 [参数说明](https://www.volcengine.com/docs/6348/1807452?lang=zh) 明确,`DisableRTSSubtitle=true` 关闭房间内客户端字幕回调。现有平台仍可在服务端保存字幕,但设备本地演示逻辑收不到用于判断结束请求的字幕。固件原演示逻辑还只按子串识别“退下吧/拜拜”,不区分用户和助手,并等待固定文字“好的拜拜”才发出退出事件。
|
|||
|
|
|
|||
|
|
## .31 行为
|
|||
|
|
|
|||
|
|
新增设备本地短指令识别,支持“拜拜吧”“再见”“就聊到这吧”“今天就聊到这里吧”“结束通话”“挂断电话”等完整表达;“就聊到这把”也作为常见同音识别结果接受。这是有限的语音指令词表,不是模型原生 Function Calling,也不承诺任意结束表达都能识别。
|
|||
|
|
|
|||
|
|
RTC 路径只处理身份匹配的用户字幕,以 `definite` 收集同一轮确定分句,等 `paragraph=true` 后对整句判断。重复序号不重复执行,中间识别结果不占控制队列。助手、未知说话人、问句、引号、否定或叙述里的结束词不触发。低负载路径使用完整输入转写事件。
|
|||
|
|
|
|||
|
|
识别后由通话任务等待助手回复完成、下行有声 PCM 至少安静 1200 毫秒、播放队列为空且播放中的写入已结束、扬声器尾音至少等待 600 毫秒,再走正常结束流程。这里的音频活动门槛沿用 `.30` 的平均绝对幅值 64,仍需实机验证。没有回复或完成事件时,在用户没有继续说话的条件下等待约 12 秒后结束,避免一直开着会话。用户正在说话时延后结束;收到后续完整的继续聊天请求则取消待结束状态。
|
|||
|
|
|
|||
|
|
结束仍先关闭本地采集和播放,再停止 SDK、记录停止结果、上报平台、回到待机,并沿用 `.30` 的录音和 WithCaps 任务回收。物理点击、静默 60 秒、授权租约及平台停止继续使用既有流程。
|
|||
|
|
|
|||
|
|
## 验证与交付
|
|||
|
|
|
|||
|
|
ESP-IDF 5.5.1 完整编译通过。六项使用实际生产 C 的主机测试通过 UBSan:指令与真实 RTC/WS 消息解析、实际 PCM 播放任务及尾音等待、实际通话任务与显示状态、100 次并发采集切换、屏幕控制、USB 语音诊断。覆盖否定、引用、问句、同一句多分句、重复字幕、中间字幕洪流、取消结束、缺少回应、时钟回绕及挂断后再次开聊。
|
|||
|
|
|
|||
|
|
与 `.30` 的 5403 项输入比对:只修改六个既有文件,新增两个语音结束模块文件;最终核对 5405 项输入一致。固件为 `1.7.0-controls.31`,应用镜像 3,775,440 字节,小于 4 MiB OTA 槽;SHA256 为 `5c33f6cae3ef93433fffb6c61920b5752fcb9edb8663b8e73eb78a4948ef9dce`。
|
|||
|
|
|
|||
|
|
交付位于 `artifacts/firmware/1.7.0-controls.31`,包含应用、manifest、验证记录、八个冻结源文件及定向配置脚本。`source-delta.partial.patch` 只对比有匹配旧副本的通话源文件和版本头,不代表完整差异。
|
|||
|
|
|
|||
|
|
## 发布与安装结果
|
|||
|
|
|
|||
|
|
用户回复“发布”后,将 `.31 / code 14` 发布到现有云平台。发布编号 `9826dd1b-8e75-4689-961d-6bffa2d8ee39`,service 维护审计与公开 HTTPS 全量回读 SHA256 均与本地镜像一致。API 运行镜像保留为 `data-terminal-cloud-api:0.99.40-rc.creation-consent1`。
|
|||
|
|
|
|||
|
|
前两次 OTA 在下载完整后返回 `ESP_ERR_NO_MEM / 0x101`,原版保留;一次云端软重启仍未恢复安装。只读 COM6 检查确认目标芯片 MAC `B4:3A:45:16:34:A8`,内部空闲内存 11,691 字节、最大块 4,096 字节。随后通过 USB 硬件复位(没有擦除或写入闪存)重试,OTA `0d467bd9-a8ed-48a7-9008-b3fb80af3344` 于北京时间 2026-10-05 18:37:13 回报成功。安装摘要:`OTA ms=27803 erase=6177 read=9607 write=7397 sha=1458 buf=8192`。
|
|||
|
|
|
|||
|
|
两次新版在线快照确认心跳持续推进,最后上报北京时间 2026-10-05 18:51:04。设备运行 `.31 / code 14`;绑定数 1、绑定代次 1、配置 2/2 保留,没有活动通话或升级任务。
|
|||
|
|
|
|||
|
|
## 字幕配置与剩余验证
|
|||
|
|
|
|||
|
|
已通过带绑定、摘要和空闲守卫的定向脚本,只将该设备唯一绑定长者 Bot 的保存配置 `SubtitleConfig.DisableRTSSubtitle` 改为 `false`;`SubtitleMode=1`、AgentConfig 摘要及其他保存配置保持一致。Bot 为 `botGjBMujzIc`。
|
|||
|
|
|
|||
|
|
当前已部署数据库没有后台人设同步字段,因此此前计划中的“既有人设同步”不适用。现有开聊 `elderagent.Prepare` 会读取保存的完整 Config 并通过 `AibotUpdate` 应用;下一次开聊预期会打开客户端字幕回调。固件本身不提交含 S2S 密钥的覆盖配置。
|
|||
|
|
|
|||
|
|
北京时间 2026-10-05 18:51:15 的只读回读确认:平台保存值为 `false`,供应商现有值仍为 `true`。即时供应商同步完整保存 Config 的操作在执行前被自动审批拒绝,理由是配置可能包含敏感参数,当前授权不足以发送整个配置。没有执行该更新。只读比较确认保存配置与供应商配置并非除字幕开关外完全相同,因此未据此再次尝试。供应商原生编辑器也返回未知错误,未保存任何设置。
|
|||
|
|
|
|||
|
|
固件发布和安装已完成,平台配置已保存;供应商即时同步、下一次开聊后的回读,以及真实说“拜拜吧/就聊到这吧”后待机的验收仍未完成。正常开聊会应用保存配置;如果要求在开聊前立即同步并回读供应商端,需补充授权将该 Bot 的现有完整配置(可能含模型凭据和人设)发送至火山引擎。
|
|||
|
|
|
|||
|
|
实机还需确认告别播报后回待机、否定和引用不误挂、继续聊天取消挂断,以及再次轻触可开聊。本次没有启动通话或保存音频、正文。
|
|||
|
|
|
|||
|
|
证据目录:`E:/Codex/story/.local-evidence/voice-end-20261005`。升级成功截图为 `installed31.png`,固件交付验证记录已更新。
|