三步搭一个本地语音助手: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 把流式语音识别、HuggingFace LLM 和语音合成全部放在本地,不依赖任何云 API。本文按“装环境 → 起服务 → 对话 → 调优”的顺序,带你完整跑通一遍。
先过硬件关:一张卡就够
结论先说:1 块 GPU 就能跑,瓶颈主要在 LLM 的显存上。
- 用默认的 9B 模型(NVIDIA-Nemotron-Nano-9B-v2):建议 21GB 显存;
- 换 4B 级别的模型:13GB 显存起步;
- 再配上麦克风和扬声器,就齐了。
两个提前说好的小限制:整套链路目前只支持英文输入输出;服务一次只接受一个客户端连接,后连的会把先连的顶掉(上下文会保留)。
装环境:一条命令建好 conda 环境
网页客户端是 Node.js 写的,先确认 node/npm 是较新的版本(v20+),用 apt 或 fnm 装都行。然后克隆仓库、建环境:
git clone https://gitcode.com/GitHub_Trending/nem/NeMo cd NeMo/examples/voice_agent conda env create -f environment.yaml装完执行conda activate nemo-voice激活。依赖版本在 environment.yaml 里锁得比较死,第一次拉取可能要几分钟,耐心等。
三步聊起来:起服务、开网页、说话
第一个终端启动服务端:
export PYTHONPATH=/path/to/NeMo:$PYTHONPATH python ./server/server.py第二个终端启动网页客户端:
cd client npm install && npm run dev浏览器打开终端里打印的地址(默认是 http://[本机IP]:5173)。用 Chrome 的话,记得把该地址加进chrome://flags/#unsafely-treat-insecure-origin-as-secure白名单,否则拿不到麦克风权限。页面上 Mute 键控制麦克风,Reset 键清空对话上下文和说话人缓存。
对话里能玩什么:工具调用和说话人分离
默认 LLM 支持工具调用,直接用嘴下指令就行:
- “What's the weather in Paris?” 查天气;
- “Can you speak faster?” 调语速,“Reset to the original speaking speed” 恢复默认;
- “Switch to a male voice.” 换声线,英音美音也能切。
另外默认开了流式 Sortformer 说话人分离,整场对话最多区分 4 个说话人,不同回合会带上 speaker 标签,LLM 能分清是谁在说话。环境吵的时候它容易分错,把diar.enabled设为 false 可以关掉。还有个细节:机器人说话时你插一句 “uh-huh”、“yeah” 这类附和词,它不会被打断,词表在 server/backchannel_phrases.yaml 里,可以按自己的习惯改。
调优:换大脑、换声音、控延迟
可调项集中在 server/server_configs/default.yaml,常用的几处:
- 换 LLM:改 llm.model,比如换成 Qwen2.5-7B-Instruct;llm.type 可设为 vllm、hf 或 auto(默认 auto,先试 vLLM,不行再回退 HuggingFace)。有多卡的话可以把各组件分到不同 GPU。
- 定人设:llm.system_prompt 支持直接写字符串或指向文本文件,server/example_prompts/ 里有现成模板。
- 换声音:TTS 默认是轻量的 Kokoro-82M;想要多语言可以换 magpie_tts_multilingual_357m,纯英文场景也可以用 FastPitch-HiFiGAN。
- 控延迟:希望它更快交还话语权,把 vad.stop_secs(默认 1.2 秒)调小;追求低延迟就保持 enable_reasoning: false,别开思考模式;llm.generation_kwargs 里的 temperature 调低,回答会更稳。
踩坑清单:这几个报错见一次就懂
- 提示无法访问麦克风,或报 enumerateDevices 错误:浏览器没放行麦克风,按前面说的加白名单,然后重启浏览器。
- 模型下载报 I/O 错误:设 HF_HUB_CACHE 换个缓存目录,或者先把模型下到本地、在配置里填本地路径。
- npm run dev 报 SyntaxError 或 node:internal/errors:前者是 Node 版本太老,升级即可;后者删掉 client/node_modules 重装再跑。
- 识别效果时好时坏:默认的 ASR 和分离模型对噪声不鲁棒,嘈杂环境建议配降噪麦克风,或者干脆在安静点的地方说话。
跑通到这里,你就有一条完全本地化的语音对话链路。后续想加自己的工具,照着 server.py 里注册工具的写法往里加函数就行,整体骨架不用动。
【免费下载链接】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),仅供参考