完整文档请参见:FunASR vLLM 推理引擎指南
cd examples/industrial_data_pretraining/fun_asr_nano
# 安装依赖
pip install -r requirements.txt
# 按主文档选择并安装与当前 NVIDIA 驱动、CUDA runtime 和 PyTorch wheel 匹配的 vLLM 版本。
# 启动服务
CUDA_VISIBLE_DEVICES=0 python serve_realtime_ws.py --port 10095 --language 中文从 PyPI 安装时无需进入仓库目录;按主文档安装匹配的 vLLM 后,直接运行:
pip install --upgrade funasr
CUDA_VISIBLE_DEVICES=0 funasr-realtime-server --port 10095 --language 中文客户端已经持续执行 VAD 时,可以关闭服务端 VAD 模型,并由客户端明确提交每句话:
CUDA_VISIBLE_DEVICES=0 python serve_realtime_ws.py \
--port 10095 --language 中文 --endpoint-mode clientPyPI 安装对应的命令为 funasr-realtime-server --endpoint-mode client。
同一条 WebSocket 连接上的协议为:
- 发送文本
START; - 持续发送 16 kHz、16-bit PCM 二进制帧,服务端仍会返回 partial;
- 客户端 VAD 检测到句末后发送文本
COMMIT; - 服务端立即返回一次
is_final=true,清理当前句状态但保持连接; - 重复步骤 2-4,整个会话结束时发送
STOP。
COMMIT 不受默认 960 ms final 门槛限制,因此短句也会提交。该模式信任客户端 endpoint,不运行 FSMN-VAD;需要服务端自动去噪和分句时继续使用默认的 --endpoint-mode server。
服务端返回的 sentences 是已经由 VAD 或 COMMIT 锁定的文本;partial 是当前还在说的临时预览,后续消息可能会覆盖它。前端不要只在页面上追加 sentences,否则连续讲话时会误以为预览里的尾部文字在最终结果中丢失。推荐每条消息都用“已锁定文本 + 当前预览”重绘显示:
const committed = data.sentences.map((s) => s.text).join("");
const preview = data.partial || "";
render(committed + preview);partial_start_ms 表示当前 partial 对应的音频起点。启用默认的 --partial-window-sec 15 时,长时间不停顿讲话会让预览窗口向前滑动;这只影响临时预览,VAD 锁定句、COMMIT 和 STOP 的最终结果仍会用完整句段重新解码。
HOTWORDS:Tool,客製化,季會 或 --hotword-file 是模型解码阶段的热词偏置,不是确定性文本替换。热词过多、太短、中英文混杂,或音频静音/低音量/长句不停顿时,模型可能把相近声音偏向热词。排查时建议先完全关闭热词跑同一段音频;如果需求是把固定误识别改成正确专名,优先在识别完成后做后处理,而不是把大量词放进模型 hotwords。
实时服务也支持最终文本级后处理,适合“固定错词 -> 正确专名”的确定性纠正,不会参与模型解码,也不会在静音时把声音偏成热词。启动时可以传文件:
cat > postprocess_hotwords.txt <<'EOF'
哈囉=>客製化
哈罗=>客製化
EOF
funasr-realtime-server --postprocess-hotword-file postprocess_hotwords.txt也可以在同一条 WebSocket 连接中发送:
POSTPROCESS_HOTWORDS:哈囉=>客製化,哈罗=>客製化
如果你确实希望模型在解码阶段更偏向某些专名,再使用 HOTWORDS: / --hotword-file;否则优先使用 POSTPROCESS_HOTWORDS: / --postprocess-hotword-file。
# 浏览器
open client_mic.html
# Python 麦克风
python client_python.py --server ws://localhost:10095 --mic
# Python 文件
python client_python.py --server ws://localhost:10095 --file audio.wav
# 自动化测试
python client_test.py --server ws://localhost:10095 --file audio.wavssh -L 10095:localhost:10095 <server>
# 然后本地打开 client_mic.html- vLLM 推理引擎:RTF < 0.08,支持 tensor parallel 多卡加速
- 流式 VAD 分句:动态静音阈值,自然断句
- 说话人分离 (Beta):流式 ID 分配 + 最终重聚类
- 热词定制化:加载人名、地名等实体词文件
- 语种指定:Nano 支持中/英/日及中文方言/口音;MLT-Nano 支持 31 种语言
- 幻觉检测:自动检测重复模式并截断
| 文件 | 说明 |
|---|---|
serve_realtime_ws.py |
仓库兼容入口,调用 PyPI 包内的 WebSocket 服务端 |
client_mic.html |
浏览器客户端 |
client_python.py |
Python CLI 客户端 |
client_test.py |
自动化测试脚本 |
热词列表 |
热词文件示例 |
demo_vllm.py |
离线 vLLM 推理 demo |
- FunASR vLLM 推理引擎指南 — 完整文档(离线/流式/WebSocket/API/FAQ)