NeMo Voice Agent 实战指南:3步在本地跑通全开源语音助手
【免费下载链接】SpeechA scalable generative AI framework built for researchers and developers working on Large Language Models, Multimodal, and Speech AI (Automatic Speech Recognition and Text-to-Speech)项目地址: https://gitcode.com/GitHub_Trending/nem/Speech
想让 LLM 长出耳朵和嘴巴,通常要自己拼 ASR、TTS、VAD 和轮次管理,坑一个接一个。NeMo Voice Agent 把 NeMo 的流式语音识别、说话人分离、低延迟 TTS 和 HuggingFace 大模型组装成一条全本地部署的语音助手链路。别急,先跑起来。
三步在本地跑通 NeMo Voice Agent 最小 Demo
硬件不苛刻:一块 GPU(9B 大模型建议 21GB 显存,4B 约 13GB)、一个麦克风、一个扬声器。依赖是 conda 环境和 Node.js 20+,环境文件里版本号已经全部锁好。
第 1 步:克隆仓库并创建环境
git clone https://gitcode.com/GitHub_Trending/nem/NeMo cd NeMo/examples/voice_agent conda env create -f environment.yaml conda activate nemo-voice第 2 步:启动服务端
export PYTHONPATH=/path/to/NeMo:$PYTHONPATH python ./server/server.py把 /path/to/NeMo 换成你的仓库实际路径。首次启动会自动下载 ASR、LLM、TTS 三个模型,耐心等它跑完。
第 3 步:启动客户端,打开浏览器
cd client npm install npm run dev浏览器访问 http://服务器IP:5173,对着麦克风说话,一个能听懂、能回嘴、还能被口头指挥的语音助手就上线了。目前支持英文输入输出。
先听:这套语音助手到底能帮你做什么
流式识别,说完即答。你刚停嘴,助手就开口接话,而不是干等两秒。底层是缓存感知的流式 FastConformer(默认 parakeet_realtime_eou_120m-v1),一边听一边转写,同时预测"你说完了"这个端点信号,VAD 再用vad.stop_secs(默认 1.2 秒静音)兜底。
它知道谁在说话。两个人同时跟它对话,它能区分每一轮是谁说的。流式 Sortformer 模型最多识别 4 个说话人,给每轮打上 speaker 标签,LLM 再按标签分别回应。
它能听你指挥,改自己的行为。随口说一句"语速快一点"或"换成男声",它会调内置工具实时改 TTS 参数;问一句"巴黎天气怎么样",它先调天气接口,再把结果念给你听。工具函数都有完整示例,照着抄就能加自己的。
你的"嗯"不会打断它。它长篇回答时你附和一句"uh-huh",它不会停下来重新组织语言。这套 backchannel 机制靠一份短语白名单工作,默认清单覆盖了 70 多个常见附和词,你可以在配置里换成自己的列表。
架构速览:从麦克风到响应的完整数据流
浏览器把麦克风音频通过 WebSocket 送到服务端,服务端先经 VAD 判断轮次边界,再交给流式 ASR 出文字,Sortformer 并行标出说话人。文字进 LLM 生成回答,回答交给 TTS(默认轻量级 Kokoro-82M)切成小块逐段合成音频,最后经 WebSocket 送回浏览器播放。所有组件都在本地跑,每个组件可以单独指定 GPU,多卡机器能各占一卡。
调优与排坑:5个高频问题与配置改法
- 如果浏览器点不了麦克风、报 enumerateDevices 错误,把 http://IP:5173 加进 chrome://flags/#unsafely-treat-insecure-origin-as-secure 白名单,再重启浏览器。
- 如果模型下载慢或反复失败,可以试试
export HF_HUB_CACHE=/path/to/cache换个缓存目录,或者手动下到本地后把llm.model指向本地路径。 - 如果显存不够跑 9B 模型,把
llm.model换成 4B 级模型(如 Nemotron-Mini-4B-Instruct),同时调低 vLLM 参数里的--gpu-memory-utilization和--max-model-len。 - 如果它总在你没说完时就抢话,把
vad.stop_secs从默认 1.2 调大到 1.5 左右;嫌它反应慢就调小。 - 如果环境嘈杂导致说话人识别混乱,把
diar.enabled设为 false 先关掉分离,换安静的地方再试。
落地场景:谁在用这套本地语音助手
- 客服团队把它架成 7×24 语音应答台,用户接通后直接开口,LLM 按知识库口径回答,首响从"等人接"变成秒级出声。
- 会议主持人拿它做多说话人讨论机器人,Sortformer 区分四位发言人,它按 speaker 标签点名回应,不用反复确认"刚才那句话是谁说的"。
- 语音算法工程师用它当数据质检台:打开仓库自带的 Speech Data Explorer,波形、频谱、识别差异一眼看全,ASR 翻车样本十分钟就能捞出来。
继续深入:3个值得翻的目录
- 完整文档、支持模型清单与 FAQ:examples/voice_agent/README.md
- 服务器、LLM、ASR、TTS 的全部配置:examples/voice_agent/server/server_configs/
- 加自定义工具(天气、语速、换声线)的源码入口:nemo/agents/voice_agent/utils/tool_calling/
改完配置重启 server,对着麦克风问一句"巴黎今天天气怎么样",看它会不会自己调工具把答案念给你听。
【免费下载链接】SpeechA scalable generative AI framework built for researchers and developers working on Large Language Models, Multimodal, and Speech AI (Automatic Speech Recognition and Text-to-Speech)项目地址: https://gitcode.com/GitHub_Trending/nem/Speech
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考