Audio8 ASR Infinite 实时客户端全解:WebSocket 推流转写的完整链路解析
【免费下载链接】Audio8-ASR-Infinite项目地址: https://ai.gitcode.com/hf_mirrors/Edge0/Audio8-ASR-Infinite
Audio8 ASR Infinite 是一款原生流式语音识别模型,支持通过 WebSocket 推流实现中文、英文实时语音转写。它提供 80/120/160 ms 可选音频时钟、240–560 ms 可调转写延迟,并借助 Rolling KV Cache 实现 24/7 无限时长转写不漂移。本文带你完整走一遍「启动服务 → WebSocket 推流 → 实时出字」的全链路。
一、它到底强在哪?
| 亮点 | 说明 |
|---|---|
| ⚡ 超低延迟 | 原生流式架构每秒解码 12.5 次(80 ms 时钟下) |
| ♾️ 无限时长 | Rolling KV Cache 让显存和延迟保持恒定,可 7×24 小时运行 |
| ⏱️ 可选音频时钟 | 80 / 120 / 160 ms,每帧输出 1 个文本 token |
| 🎚️ 可调转写延迟 | 在「准」与「快」之间自由取舍(240–560 ms) |
| 🧠 语义 VAD | 能区分思考停顿、口误与真正说话结束,传统声学 VAD 很难做到 |
| 🌐 中英双语 | 中文 + 英文转写 |
二、完整链路:从推流到出字只要 4 步
麦克风/音频文件 │ 16 kHz 单声道 ▼ ① WebSocket 推流接入(ws://127.0.0.1:18191/v1/realtime) ▼ ② 音频塔编码:32 层因果 Audio Tower,20 ms 声学帧、128 mel 频带 ▼ ③ 投影器 + 帧长嵌入:把音频特征压成 LLM 能理解的 embedding ▼ ④ Qwen2.5-3B 解码器:每个音频时钟输出 1 个文本 token,实时出字几个关键设计值得新手理解:
- 每帧一 token:模型不是「听完再转」,而是每经过一个音频时钟(如 80 ms)就解码出一个字/词,所以延迟天生很低。
- 延迟显式可调:转写延迟以「延迟 token 数」注入模型(正弦时间嵌入 + 逐层自适应缩放),详见 config.json 中的
num_delay_tokens_by_frame_len字段,源码实现在 modeling_audio8_asr_infinite.py 的build_t_cond与forward_language_model_with_delay。 - 语义 VAD 收尾:semantic_vad_heads.safetensors 中的 8 分类头会预测未来 0.5/1/2/3 秒内的语义事件,实时客户端据此判断「这句话真的说完了」,合同约定见 configuration_audio8_asr_infinite.py。
三、一键部署:Docker Compose 启动实时转写服务
官方推荐的部署方式是 Docker Compose,同时自带 Web 演示客户端(详见 README.md):
git clone https://gitcode.com/hf_mirrors/Edge0/Audio8-ASR-Infinite cd Audio8-ASR-Infinite/docker AUDIO8_MODEL_DIR=/path/to/checkpoint docker compose up -d启动后有三个入口可用:
| 入口 | 地址 | 用途 |
|---|---|---|
| 🌐 Web 客户端 | http://localhost:8080/ | 浏览器里直接试听、看实时转写 |
| 🔒 TLS 代理 | https://localhost:8443/ | 自签证书,接受即可 |
| 🔌 WebSocket | ws://127.0.0.1:18191/v1/realtime | 给终端客户端 / 你自己的程序用 |
⚠️ 小细节:
18191是宿主机的发布端口,服务在 Compose 网络内部监听18190。自己写客户端时请用18191。
四、三种实时客户端,总有一款适合你
网页客户端:零代码体验
打开http://localhost:8080/即可说话看字幕,最适合第一次体验流式转写效果。
终端客户端:一条命令推流转写
同一套 WebSocket 接口可以直接从终端驱动,把一段 WAV 按真实节奏「推」给模型:
python -m audio8_asr_infinite.examples.vllm_realtime_client \ --ws-url ws://127.0.0.1:18191/v1/realtime \ --audio sample.wav --language zh --target-delay-ms 480 --pace--pace会按真实时间速率发送音频块,模拟真实直播推流场景。
本地 Torch 模拟推流:不依赖 vLLM 的验证方式
如果想在自己的机器上用 PyTorch 直接跑「模拟流式」解码:
python -m audio8_asr_infinite.examples.torch_streaming_decode \ --checkpoint /path/to/checkpoint \ --audio sample.wav --language zh --transcription-delay-ms 480注意:该模型只支持完整的合并权重目录(即本仓库原样),不支持 adapter 式或部分转换的权重。
五、关键参数速查:音频时钟 × 转写延迟怎么选
| 音频时钟 | frame_len | 左填充 token | 可选target_delay_ms |
|---|---|---|---|
| 80 ms | 4 | 18 | 240 / 320 / 480 / 560 |
| 120 ms | 6 | 12 | 240 / 480 |
| 160 ms | 8 | 9 | 320 / 480 |
选型建议:
- 🎯追求最准:选 80 ms 时钟 + 480/560 ms 延迟(官方评测最优组合)。
- ⚡追求最快:选 80 ms 时钟 + 240 ms 延迟,延迟降到 1/4 秒以内。
- 📌记住一条规则:
target_delay_ms必须是所选时钟的整数倍,未列出的更长延迟依然可用。 - 这些组合都是官方后训练(post-trained)过的,其余组合能跑但不保证最优。
六、为什么能 24/7 运行不漂移?
模型原生长上下文只有30 秒,但 vLLM 部署中使用了Rolling KV 窗口(30 s)+ 精确 RoPE 重基准(re-basing):窗口滚动时 KV Cache 被循环复用,位置编码随之重新校准,因此:
- 显存占用恒定,不会随通话时长增长;
- 推理延迟恒定,不会因为「已经开了 8 小时」变慢;
- 转写质量不漂移,适合会议、客服等长会话场景。
七、效果如何:主流测试集准确率
480 ms 延迟 + 80 ms 帧长下的评测结果(错误率 %,越低越好):
| 测试集 | 指标 | Audio8 ASR Infinite | 同类流式模型 |
|---|---|---|---|
| aishell1/test | CER | 1.750 | 12.9–16.8 |
| aishell4/test | CER | 2.893 | 14.7–16.5 |
| librispeech test.clean | WER | 3.042 | 2.2–3.4 |
| librispeech test.other | WER | 6.808 | 5.6–7.1 |
中文场景下优势明显,且贪心解码无重复循环、无漏尾词。
八、仓库文件导读
| 文件 | 作用 |
|---|---|
| README.md | 项目总览、部署与用法说明 |
| config.json | 模型结构配置:时钟、延迟、VAD 参数一览 |
| modeling_audio8_asr_infinite.py | 模型前向推理代码(音频塔/投影器/延迟注入) |
| configuration_audio8_asr_infinite.py | 配置类与语义 VAD 头契约定义 |
| model.safetensors / model.safetensors.index.json | 主权重(约 8.17 GB,bfloat16) |
| semantic_vad_heads.safetensors | 语义 VAD 分类头(8 类,4 个时间视界) |
| tokenizer.json / tokenizer_config.json | Qwen2 分词器(词表 151936) |
| chat_template.jinja | 对话模板 |
| generation_config.json / preprocessor_config.json | 生成参数与音频特征提取配置 |
| Audio8-Asr-Infinite-Demo.mp4 | 官方演示视频:30 s 上下文 + Rolling KV 持续转写 24/7 |
总结
Audio8 ASR Infinite 把「实时语音转写」做成了三件简单的事:Docker 一条命令起服务、WebSocket 一条地址推音频、时钟/延迟两个参数调体验。配合 Rolling KV Cache 的无限时长能力和语义 VAD 的智能断句,它非常适合会议记录、实时字幕、语音客服这类需要长期在线的流式 ASR 场景。新手建议先用 Web 客户端感受延迟,再用终端客户端接入自己的音频源,最后按需微调target_delay_ms找到准与快的平衡点。
【免费下载链接】Audio8-ASR-Infinite项目地址: https://ai.gitcode.com/hf_mirrors/Edge0/Audio8-ASR-Infinite
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考