从云端转本地:在 12GB 显卡与群晖 N8N 上搭建中英混读高保真 TTS 语音栈
在过去两年中,我们的内部业务自动化管线、Telegram 智能机器人以及视频知识库转写系统,一直依赖云端 Text-to-Speech(文本转语音)服务。起初,社区封装的 Microsoft Edge-TTS 提供了一个零成本的过渡方案;但依赖公网未公开接口的爬虫调用本质上极其脆弱——微软端点频繁变更签名、国内与海外网络抖动、以及跨国链路的偶发限流,经常导致自动化链路在半夜静默失败。而转用商业级 Azure Speech 或 Google Cloud TTS,在面对大批量长文本合成时,按字符计费的月度账单又显得不合算。
随着我们在 Unraid 服务器上为 Windows 11 虚拟机配置了直通的 NVIDIA RTX 3060 12GB 独立显卡,我们决定将整套语音合成系统完全收敛到本地局域网。
本文记录我们如何选型阿里巴巴开源的 CosyVoice 2,将其接入群晖 NAS 的 n8n 自动化集群,实现显存按需管理与开机常驻,并构建覆盖女童、正太、青年解说与纯正中英双语的零样本语音栈。
1. 核心需求与设计指标
在开工搭建之前,我们确立了四个关键要求:
- 丝滑的中英混读(Code-switching)能力:在马来西亚与东南亚的业务沟通场景中,日常对话几乎都是中英双语交织(例如:“请确认这个 webhook 已经 trigger,并检查 logs”)。传统的 TTS 模型在遇到英文字词时往往会生硬卡顿、甚至读错音素,引擎必须能够自然过渡。
- 零样本(Zero-shot)多音色快速切换:需要支持多种人设音色——讲故事需要的活泼童声、科技资讯需要的沉稳播音男声、以及客服交互需要的自然女声,且无需耗时数小时重新微调。
- 显存共存与无痛调度:12GB 显存是宝贵资产,这台工作机平时还要承载 LM Studio 的 Qwen 大模型推理以及 ComfyUI 生图生视频任务。TTS 引擎要么显存占用极小,要么能够随时一键启停释放显存。
- 无缝替换群晖 n8n 旧节点:自动化调度中心跑在群晖 DSM 的 n8n 实例(
n8n.internal:5678)上,本地新接口必须兼容通用 HTTP Webhook,无需重构现有工作流业务逻辑。
2. 模型选型:为什么是 CosyVoice 2?
针对中文、英文以及核心的中英混读场景,我横向对比了目前主流的本地开源方案:
| 模型方案 | 优势 | 不足 | 选型结论 |
|---|---|---|---|
| Edge-TTS / Piper | 超轻量、纯 CPU 即可跑 | 音质机械感明显、无法自主克隆 | 彻底淘汰 |
| ChatTTS | 拟人化笑声与叹气细节好 | 经常胡言乱语、英文发音偏弱、长句难控 | 不满足生产要求 |
| GPT-SoVITS (v2) | 特定人物音色克隆还原度极高 | 语种切换边界容易卡顿顿挫、中英混读较硬 | 备选 / 按需冷启 |
| CosyVoice 2 (0.5B) | 中英混读极度自然、首包延迟仅 300ms | 常驻需要约 3.2GB 显存 | 生产主力首选 |
阿里开源的 CosyVoice 2(0.5B 自回归语言模型 + 流匹配 Flow Matching 解码器)在多语种混排上展现出了目前开源界的最佳水准。英文单词直接嵌入在中文句子中读出时,发音地道、重音准确,完全没有传统音素拼接的违和感。
3. 局域网网络与硬件拓扑
整套系统的部署拓扑如下:
[ 外部调用 / 终端应用 ]
│
▼
[ 群晖 DSM 私有存储节点 ]
├── 反向代理网关 (Traefik / Nginx)
└── n8n 自动化调度集群
│ 局域网 HTTP POST / GET (/webhook/ltts)
▼ (千兆内网无公网延迟)
[ Unraid 宿主机 ]
└── Windows 11 虚拟机 (GPU 直通)
├── NVIDIA GeForce RTX 3060 12GB
└── CosyVoice 2 FastAPI 服务 (127.0.0.1:50000)
通过在 CosyVoice 的服务脚本中直接挂载 FastAPI 路由,我在 Windows 本地 50000 端口暴露出 /tts 端点,内网其他服务只需向 http://gpu-node.internal:50000/tts 发送请求即可在 2 秒内拿回二进制 WAV 音频。
4. 显存治理:常驻守护与一键开关
12GB 显存如果任由各个 AI 工具同时加载,瞬间就会爆显存(OOM)。我采取了“分级常驻 + 幂等开关”策略:
- 低显存常驻(日常状态):CosyVoice 2 推理仅占用 3.2 GB 显存,剩余近 9 GB 显存完全足以同时运行日常的系统桌面和轻量任务。我将其写入 Windows 开机启动项(
shell:startup\CosyVoice 2.lnk),开机静默常驻后台。 - 一键切换脚本(高负载避让):当需要运行 ComfyUI 渲染整首 MV 或加载 14B 大语言模型时,桌面上放有一个免人工干预的批处理快捷方式
CosyVoice 2 (开·关).bat:
@echo off
title CosyVoice 2 Toggle
for /f "tokens=5" %%a in ('netstat -aon ^| findstr :50000') do (
taskkill /F /PID %%a >nul 2>&1
echo STOPPED. GPU 显存已完全释放。
exit /b
)
:: 若未运行,拉起后台推理服务
start /b python webui.py --port 50000 --model_dir pretrained_models/CosyVoice2-0.5B
echo ONLINE - CosyVoice 2 已加载至显卡,服务就绪。
双击一次即刻杀掉进程、半秒内退还 3.2GB 显存;渲染完毕后再双击一次,25 秒内重新完成模型加载。
5. 群晖 N8N 联动接入
我在群晖 n8n 上配置了名为 Local TTS API (CosyVoice) 的独立工作流,绑定路径为 /webhook/ltts:
- GET 支持:
http://n8n.internal:5678/webhook/ltts?text=你好Hello&voice=child,浏览器或监控告警可直接单链调用下载。 - POST 支持:接收标准 JSON 体
{"text": "...", "voice": "..."},供各类聊天机器人与后台脚本程序化触发。
在工作流内部,我使用 JavaScript Code 节点对传入文本做字符解码与清洗,再通过 HTTP Request 节点转发给本地 50000 端口(http://gpu-node.internal:50000/tts),最终以 firstEntryBinary 模式直接将音频流送还客户端。
6. 音色库扩展:零样本克隆实践
得益于 CosyVoice 2 的 Zero-shot 能力,只需提供 3~5 秒无杂音的人声样音,模型即可实时复刻其声线特征。我在服务内部预制了常用音色表:
| 音色代号 | 声音风格 | 样音来源与特色 |
|---|---|---|
child / girl | 活泼女童声 | 纯净 4 秒学前童声对话,清脆甜美 |
boy | 清脆男童声(正太音) | 5 秒少儿动漫旁白 |
male / yunxi | 阳光青年男声 | 5 秒科技解说,中英专业词汇混读极佳 |
news | 沉稳新闻男声 | 5 秒纪录片解说样本 |
female | 温暖知性女声 | 5 秒电台散文朗诵 |
default | 旗舰高保真女声 | CosyVoice 官方基准母声 |
调用时只需指定 voice 参数,无需重启后端或切换模型权重,即可实现毫秒级换人合成。
7. 运行成效
在本地 RTX 3060 上运行实测:
- 生成效率:实时率(RTF)稳定在 0.18 左右,合成一段 10 秒的标准语音仅耗时约 1.8 秒。
- 首包响应:n8n 收到请求至音频开始回传约 320 毫秒,完全满足交互式即时语音应答的要求。
- 自主掌控:不再受制于第三方厂商的封号、限频与网络审查,所有音频资产与 Prompt 完全留存在本地内网。
自托管高品质 AI 语音不再是大型服务器集群的专利。借助新一代自回归+扩散语音架构与消费级显卡,一套完全受控、零月租且音质超越商业云服务的全天候语音栈,已经完全可以在自托管生产环境中稳定运转。
想为你的业务搭建私有化 AI 语音与自动化管线?
如果你的客服机器人、内容生产流水线或内部系统正在为高昂的云端语音 API 账单买单,或者需要地道的中英混读与专属音色克隆,我可以帮你把整套高保真 TTS 与 n8n 自动化工作流私有化部署到你自己的硬件上。
- 📱 WhatsApp: +60 12-797 2969
- 📧 邮箱: [email protected]
- 🌐 网站: hoelee.com