asr-bench 架构
manifest.jsonl (音频+参考文本)
│
▼
┌─ Runner 批量调度(串行保延迟纯净 / 可选并发)─────────────┐
│ ┌ Adapter (统一接口) ────────────────────────────┐ │
│ │ mock / volcengine(豆包sauc) / aliyun(NLS) │ │
│ │ aws(Transcribe官方SDK) / azure(Speech SDK) │ │
│ │ · 真实语速推流(100ms/包,绝对时钟对齐) │ │
│ │ · Timeline 打点:建连/首包/首字/尾包 │ │
│ └────────────────────────────────────────────────┘ │
│ Metrics: CER(归一化+编辑距离) + P50/P95/P99 聚合 │
└─────────────────────────────────────────────────────────┘
│
▼
results/<run>/ raw_results.jsonl + summary.json + report.md → 本看板
指标打点口径
| 指标 | 起点 | 终点 |
| connect_ms 建连 | 发起 WebSocket 连接 | 服务端任务确认(可发音频) |
| first_pkt_ms 首包 | 第一包音频发出 | 首个识别响应(partial)到达 |
| first_text_ms 首字 | 第一包音频发出 | 首个非空识别文本到达 |
| final_pkt_ms 尾包 | 末包音频+结束指令发出 | 最终确认结果到达 |
| cer 字错误率 | 归一化(全角→半角/去标点/小写)后 编辑距离 ÷ 参考字数 |
快速使用
# 生成中文客服测试集(12条,macOS say 合成)
python3 scripts/gen_dataset.py
# 无凭证先跑 mock 验证全流程
./venv/bin/python -m asr_bench run --vendors mock \
--manifest data/manifest.jsonl --config vendors.example.json --repeats 2
# 配置凭证后跑真实厂商(国内+海外,建议每样本 ≥3 轮)
export VOLC_APP_KEY=xxx VOLC_ACCESS_KEY=xxx
export AWS_ACCESS_KEY_ID=xxx AWS_SECRET_ACCESS_KEY=xxx AZURE_SPEECH_KEY=xxx
./venv/bin/python -m asr_bench run --vendors volcengine,aliyun,aws,azure \
--manifest data/manifest.jsonl --config vendors.json --repeats 3
代码位置:学习用/asr-bench/,新增厂商只需实现一个 Adapter 并登记(详见 README)。