Files
story/docs/device-voice-end-20261005.md
T
Codex Local bf1233d5df
ci / verify (push) Canceled after 0s
feat: expand companion platform, device controls, and memoir workflows
Add customer and operator login, BLE provisioning, device fleet controls, call memory, memoir generation, and refreshed family and maintenance portals. Include API contracts, migrations, firmware sources, tests, assets, and deployment documentation.
2026-10-08 10:06:44 +08:00

50 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 语音结束聊天:.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`,固件交付验证记录已更新。