评测与工程
排查“用户有声,AI 无声”
从录音体检和应答机会入手,用日志判断无声发生在哪一层。
“录音里 AI 没声音”可能是未生成、未播放、未送达或录音没录到。先判断该轮是否真的应该回答,再沿事件链找断点。
理解这条链路
按录音条件选择流程
可靠双轨优先分别分析用户与 AI;双声道先通过受控通话验证角色;单轨混音只能先提取疑似无声窗口,必要时结合分离与转写并人工确认。把用户说完、系统需要回答的事件定义为应答机会;用户在思考、挂机或仅附和不必自动算作 AI 漏答。
故障位置由事件差异决定
有 turn_commit、无 model_start:检查编排;有模型输出、无 TTS 首块:检查合成;有 TTS 首块、无发送或缓冲证据:检查媒体对接;已送出、有播放回执但录音无声:检查录音路径。缺少下游回执时只报告已知的最后一层,不能越级定责。
Spring Boot 集成边界
离线质检让任务服务负责幂等、文件位置、超时和回执,由独立音频 Worker 负责解码、分轨和 VAD。实时 PCM 使用每路独立的有状态会话、固定帧格式和有界队列;先确认 Python 路径的事件正确,再比较 Java ONNX 的预处理和状态张量一致性。
按这个顺序操作
- 用 ffprobe 确认声道、编码、时长和空文件;保留文件摘要与原始录音。
- 在开发样本上校准静音和 VAD 阈值,输出声学候选,避免直接判罚。
- 将候选与 turn_id、generation_id、TTS、RTP 和播放日志对齐。
- 人工复核真假无声及角色错误,按应答机会计算查准率与召回率。
配套本地工具
以下工具位于 AI 学习工作区。先阅读对应说明,确认所需数据与依赖;本轮未重新运行这些实验。
- practice-hub/ffmpeg-silero-vad/README.md
可直接复用的记录模板
ffprobe -v error -show_streams -show_format -of json call.wav # 以下阈值仅供开发试验,mono=1 表示逐声道检测;不会改写输入录音。 ffmpeg -hide_banner -i call.wav -af silencedetect=noise=-40dB:d=1:mono=1 -f null - 候选记录:call_id / turn_id / role_confidence / window_start / window_end 最后已确认事件 / 缺失证据 / 原因候选 / 人工结论
做到什么程度才算通过
- 角色映射有实测依据。
- 检测单元是应答机会。
- 单轨候选不冒充双轨确定结论。
- 有模型输出与用户可听到分别验证。
本轮未处理新的用户录音;阈值是待校准的示例。已有本机实验的成功记录不等于业务定责已验证。
本轮确认的事实与来源
以下为公开资料支持的具体结论;操作流程和验收建议属于工程推导。仓库说明或厂商效果表述不等于独立实测。
FFmpeg silencedetect 按音量阈值与持续时间检测静音,可分别评估声道;它检测的是声学条件,并不知道哪个角色应该回应。
资料日期:页面未统一标注;以复核日期为准 · 复核:2026-09-08
阅读原始来源 ↗Silero VAD 官方说明支持 8kHz 和 16kHz,提供 PyTorch 与 ONNX 路径。它给出语音活动信息,不直接判断客服漏答。
资料日期:页面未统一标注;以复核日期为准 · 复核:2026-09-08
阅读原始来源 ↗这次更新了什么
合并无声质检与 FFmpeg/Silero 实战;保留 Spring Boot 集成分工,撤下把 VAD 人声比例直接当漏答率的可能误读。
合并前的内容入口
以下旧地址仍可访问,并会带你来到本篇。完整重构前材料已留存本地备份。
- research-hub/ai-conversation-silent-failure-qa.html
- practice-hub/ffmpeg-silero-vad-practice.html