本地实时语音助手 · 架构图

全本地 · 零 API 成本 · WebSocket 实时对话 · 自动断句 · 可打断
v3 · Mac Studio M3 Ultra · 2026-07-09
Client · 任意设备
🎙 浏览器网页 v3.html
持续采集麦克风 → 降采样 16k PCM 推流;流式播放 AI 回复;一开口即打断。界面可选 9 种音色。
↓ ↑  16k PCM / 音频流
公网 HTTPS 入口
🌐 voice.studio.nexora.restry.cn
域名 → 公网服务器 40.162.94.187(FRPS :443 SNI)→ frpc 隧道 → 本机。手机 4G 也能连。
↓ ↑  frpc 反向隧道
本机 · 反向代理
🔒 Caddy(自动 HTTPS + WebSocket 升级)
Let's Encrypt 自动证书;按 Upgrade 头把 /ws 升级请求转发到后端 127.0.0.1:8771
↓ ↑  ws://127.0.0.1:8771
核心 · server_v3.py(FastAPI + WebSocket)
🧠 实时语音管线 全 Apple Silicon MLX · 单进程常驻
1 · VAD

Silero VAD

自动判断「开始说 / 说完了」,免按住;用户开口即触发打断。

torch.hub
2 · STT

mlx-whisper

整段中文转文字,实测≈100% 准确。

whisper-large-v3-turbo
3 · LLM

Qwen3-4B

本地生成中文回复,多轮记忆。

mlx-lm · 4bit
4 · TTS

千问语音

分句流式合成,即出即播;24k→16k 重采样。

Qwen3-TTS-1.7B
打断机制:每轮回复带 gen_id,用户一开口 gen_id+1 → 正在生成/播放的旧回复立即作废并停播,实现「插话即停」。
$0 联网 API 成本 ~1s 首字出声(流式) 免按住 VAD 自动断句 可打断 插话即停 9 种音色可选 全本地 数据不出机
走过的弯路
v1 直接用 huggingface/speech-to-speech:其 VAD「speculative 抢跑」把中文长句切成 0.3s 碎片 → 转成「感谢观看」。改源码关抢跑也不稳。
v2 请求-响应式(录整段 POST):识别 100% 准,但要按住、偏慢。
v3 自研 WebSocket + Silero VAD:实时 + 免按住 + 可打断 ✓
关键修复
· Silero VAD 走 torch.hub,被路由器 DNS 挡 codeload → --resolve 直连塞缓存
· torch / torchvision 版本错配 → 对齐
· whisper-turbo 缺 processor → 换 Apple 官方 mlx-whisper + ffmpeg
· TTS 输出 24k 被按 16k 播放(慢 1.5×「树懒音」)→ 服务端重采样修正
模型全部下载自 Hugging Face · 运行于 Mac Studio M3 Ultra 96GB · Apple Silicon MLX 原生加速
Silero VAD · Whisper large-v3-turbo · Qwen3-4B · Qwen3-TTS-1.7B(千问语音)