3命令跑通本地AI语音助手:NeMo Voice Agent 完整部署与调优指南
【免费下载链接】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
NeMo Voice Agent 是 NeMo 官方开源框架,能帮你把流式语音识别、说话人分离、HuggingFace 大语言模型与文本转语音拼装成一个本地 AI 语音助手:全程本地部署,数据不出机器,不用写胶水代码,改配置就能换模型、换人设。本文面向想本地部署 AI 语音助手的新手,带你从零跑通,再讲调优与扩展。
🎙️ 它是怎么工作的:四个模块一条链路
先建立直觉:麦克风的声音进来,流式 ASR 一边听一边转文字,同时靠端点检测(EOU)判断你什么时候说完了;说话人分离模型标记每段话是谁说的;LLM 生成回答;TTS 立刻朗读。整条流水线由 Pipecat 编排,浏览器客户端与服务端之间走 WebSocket 实时传输。
默认组合是:
- ASR:缓存感知流式 FastConformer,模型 nvidia/parakeet_realtime_eou_120m-v1,延迟最低且自带 EOU,但不输出标点和大小写。
- 说话人分离:流式 Sortformer nvidia/diar_streaming_sortformer_4spk-v2.1,整场对话最多识别 4 位说话人。
- LLM:nvidia/NVIDIA-Nemotron-Nano-9B-v2,llm.type 默认 auto,优先走 vLLM 加速,失败自动回退 HuggingFace 加载。
- TTS:默认 Kokoro-82M,另可选 FastPitch-HiFiGAN(仅英文)和 multilingual 357m 多语言版。
🚀 本地部署 AI 语音助手:三步跑通
硬件要求不高:1 块 GPU(9B 模型建议 21GB 显存,4B 模型 13GB 即可)、一个麦克风和一个扬声器。客户端是 Vite 前端,额外需要 Node.js 20+。
第一步,克隆仓库进入示例目录:
git clone https://gitcode.com/GitHub_Trending/nem/NeMo cd NeMo/examples/voice_agent第二步,装好 Node.js 后,用现成的环境文件建 conda 环境:
conda env create -f environment.yaml conda activate nemo-voice第三步,让 Python 找到 NeMo 包,启动 WebSocket 服务端:
export PYTHONPATH=/path/to/NeMo:$PYTHONPATH python ./server/server.py另开终端起浏览器客户端:
cd client npm install npm run dev打开 http://[服务器IP]:5173 就能开口说话。界面上 Mute 键控制麦克风,Reset 键清空对话历史和说话人缓存。两个注意点:服务端同一时间只接受一个连接,新连接会顶掉旧的(上下文保留);目前仅支持英文输入输出。
🔧 改一个 YAML,换一个大脑
组件切换全部在 default.yaml 里完成,改完重启即可:
- 换 LLM:改 llm.model,配套模板在 server/server_configs/llm_configs/ 下,已有 Qwen2.5-7B、Qwen3-8B(含思考模式版)、Llama-3.1-8B 等;llm.type 可强制填 vllm 或 hf。
- 换 ASR:stt.model 换成 nvidia/nemotron-speech-streaming-en-0.6b,准确率更高且带标点大小写,代价是失去 EOU。
- 换 TTS:tts.model_config 指向 kokoro_82M.yaml、nemo_fastpitch-hifigan.yaml 或 magpie_tts_multilingual_357m.yaml。
- 关掉说话人分离:diar.enabled 设 false,适合单人使用或噪声较大的环境。
- 改人设:llm.system_prompt 可填整段文本或本地 txt 路径,example_prompts/ 里有现成提示词。
- 多卡:各组件可分别指定 device,把 ASR、LLM、TTS 分到不同 GPU。
让它动手:工具调用
跑默认配置后,对麦克风说三句话就能感受工具调用:
- "What's the weather in Paris?"——LLM 调用天气工具查真实数据再回答;
- "Can you speak faster?"——它通过工具修改自己的 TTS 语速;
- "Switch to a male voice."——切换音色。
另外,机器人说话时你随口说 "uh-huh"、"yeah" 这类附和要求,默认不会打断它,词表在 backchannel_phrases.yaml,把 turn_taking.backchannel_phrases_path 设为 null 则恢复"一开口就打断"。回合结束靠 VAD 判定:vad.stop_secs(默认 1.2 秒)表示静默多久算你说完。
⚠️ 避坑指南:高频问题速查
- 麦克风没反应:Chrome 需在 chrome://flags/#unsafely-treat-insecure-origin-as-secure 中加入 5173 地址并重启浏览器。
- npm run dev 报 SyntaxError:Node.js 版本太旧,升级到 20+。
- node:internal/errors 报错:删掉 client/node_modules 重新 npm install。
- 模型下载 I/O 报错:用 huggingface-cli download 拉到本地,llm.model 填本地路径;HF 缓存位置用 HF_HUB_CACHE 指定。
- 环境嘈杂:当前 ASR 与分离模型对噪声不鲁棒,尽量安静环境或降噪麦克风。
- 远程访问:改 client/src/app.ts 里的 baseUrl,并设置 SERVER_PUBLIC_HOST 环境变量。
🧩 还能延伸做什么
想加自己的工具(查日程、控制智能家居),有两条路:在 basic_tools.py 里仿照 tool_get_city_weather 写一个直接函数,或给组件加 ToolCallingMixin 实现 setup_tool_calling,再通过 register_direct_tools_to_llm 注册给 LLM。提醒一句:工具调用目前仅在 vLLM 后端且限定 Nemotron 系列模型生效;个别模型会出现"嘴上说调了工具、实际没调"的情况,可在系统提示词里补约束。
数据层面,仓库自带 Speech Data Explorer,一个基于 Dash 的数据集可视化工具,能看波形、频谱图,还能对两个 ASR 模型做词级准确率对比,优化数据集时很好用。
资源索引
- examples/voice_agent/README.md:官方完整文档,含各模型支持列表与 NIM 服务集成说明
- server_configs/:全部服务端配置模板
- nemo/agents/voice_agent/:语音助手核心源码(Pipecat 服务、工具调用)
- tools/speech_data_explorer/:语音数据探索工具
【免费下载链接】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),仅供参考