句尾与会话结束不是同一个事件
PCM 帧 → VAD / 断句 → ASR → final → 会话 terminal
句段确定后可以继续接收语音;客户端停止输入时仍需清理尾部音频与待完成任务。最终文本、角色归属和连接终态分开处理,避免关闭连接时丢掉最后一段,或把句末结果错误当作整场结束。
兼容业务协议的识别与说话人处理链路
私有化语音系统对接已经存在的业务客户端,输入是持续到达的音频帧,输出是带句段和角色字段的流式结果。普通识别、多角色识别与目标说话人识别共用接口,但各自对音频切分、声纹归属和最终结果有不同约束。
工程工作覆盖 Go 会话网关、Python 模型服务、Ascend NPU 与 ARM64 容器部署,还包括热词管理、Web / Native 调试入口和场景回归。一次链路正常关闭并不能证明识别完整或角色正确,协议、内容和身份质量分别验证。
管理输入帧、模式、终态与结果封装;连接终止时处理残留音频。
识别与说话人模型按实际运行环境组织,CPU 辅助组件使用受控线程配置。
词库重载在后台构建;回归按音频区间、模式与镜像版本归档。
PCM 帧 → VAD / 断句 → ASR → final → 会话 terminal
句段确定后可以继续接收语音;客户端停止输入时仍需清理尾部音频与待完成任务。最终文本、角色归属和连接终态分开处理,避免关闭连接时丢掉最后一段,或把句末结果错误当作整场结束。
文件读取 → 向量编码与缓存 → 新快照发布;ASR → 当前快照
十万热词重载会持续数十秒。构建过程读取、编码和写缓存,识别请求继续使用旧快照;最终发布才短暂加锁。失败、非法输入或取消不替换已发布词库。
旧路径在重载期间持有管理写锁,实时识别等待词库操作,表现为连接超时与请求阻塞。
将 TXT 读取、向量编码和缓存准备移到后台,使用已发布快照供当前识别读取,完成后再一次性替换。增加容量和 UTF-8 校验,并覆盖并发 reload、失败及取消路径。
隔离 NPU 测试环境中,十万条词库重载约 73–91 秒;期间普通与角色请求持续返回非空文本和正常终态。这组结果对应热词并发行为,不替代整体识别质量评测。
Go、Python、OpenMP 与 BLAS 组件叠加后,容器线程任务显著增多,仅检查主进程数量会漏掉资源消耗。
核对容器 pids.current、线程归属和推理库配置,在验证环境限制辅助 Worker 的线程参数,并设置 24 核 Cpuset,重新检查 readiness 与真实 PCM 识别。
同一验证环境的线程任务约从 2,813 降到 1,621;资源配置与识别协议一起验证,避免仅用线程数下降推断吞吐提升。
识别与说话人模型返回节奏不同,短尾片段、跨窗口和多人交替可能导致空结果或身份串入。
以音频范围关联文本与角色,保留模式约束和逐句输出合同。回归分别核对最终文本、角色字段、漏句和结束时延,不把 HTTP 成功或 WebSocket 正常关闭当作身份正确。
问题能够被定位到音频边界、模型输出或角色合并阶段,验证指标覆盖接口之外的业务正确性。
在隔离 NPU 候选环境验证加载期间识别、失败保留与发布切换。
24 核 Cpuset 下的同环境对比,同时完成 readiness 和 PCM 验证。
普通、角色分离与目标说话人分别检查文本、身份与会话终态。