文章

中文TTS天花板!CosyVoice 3 本地部署实测:3秒克隆声音,150ms流式合成,方言随便玩

阿里通义实验室 CosyVoice 3 本地部署全攻略:从模型下载到 WebUI 启动,实测普通话+广东话+四川话合成,对比 GPT-SoVITS、ChatTTS、Fish Speech 四大中文 TTS 天王。

中文TTS天花板!CosyVoice 3 本地部署实测:3秒克隆声音,150ms流式合成,方言随便玩

中文 CER 低至 0.71%,3 秒音频零样本克隆,150ms 流式首包,9 种语言 + 18 种方言——CosyVoice 3 是当下中文 TTS 的六边形战士。


最近想给本地 Agent 加个「嘴」,让它能开口说话。试了一圈开源中文 TTS,发现阿里通义实验室的 CosyVoice 3 简直离谱——3 秒音频就能克隆任何人的声音,打 5 个字就开始说话,粤语四川话上海话随便切。

关键是,俺老猪在 M3 Max 上跑通了,效果炸裂。今天就带你从零部署,顺便横向对比四大中文 TTS 天王。


🏆 中文开源 TTS 四大天王

先上硬菜。当前 GitHub 上最火的四个中文 TTS 项目,俺老猪帮你拉了一张对比表:

维度🥇 CosyVoice 3🥈 GPT-SoVITS v2🥉 ChatTTS4️⃣ Fish Speech 1.5
团队阿里通义实验室社区驱动2noise 团队Fish Audio
⭐ Stars20.8K57K 🔥39.2K30K
中文 CER0.81% 👑~1.2%~1.5%~1.4%
语音克隆✅ 3秒零样本✅ 1分钟少样本
流式输出150ms
方言支持✅ 18种✅ 粤语
情感控制✅ 精细✅ 笑声/停顿⚠️ 基础

一句话总结:CosyVoice 3 是六边形战士,GPT-SoVITS v2 是克隆之王,ChatTTS 是对话之王,Fish Speech 是省资源之王。


🤔 CosyVoice 3 到底干了什么?

简单说:把 TTS 塞进大语言模型里

传统 TTS 是一条流水线——文本前端→声学模型→声码器,每个模块各干各的。CosyVoice 3 的思路是:用一个 LLM 直接端到端搞定,输入文本 + 参考音频,输出语音波形。

这带来的好处很直接:

  • 零样本克隆:给 3 秒音频,不用训练,直接复刻声音
  • 流式合成:文本流式输入,音频流式输出,首包延迟 150ms
  • 自然语言控制:说「用四川话,开心活泼的语气」,模型自己调
  • 方言全覆盖:粤语、四川话、上海话、天津话、东北话……18 种方言

🏗️ 怎么做到的?

CosyVoice 3 的架构可以拆成三层:

层级组件作用
文本层LLM Tokenizer把文本+指令转成 token 序列
语义层流式 LLM预测语音 token,支持双向流式
声学层Flow Matching + Vocoder把语音 token 还原成波形

核心创新在双向流式:传统 TTS 要等整句输入完才开始合成,CosyVoice 3 能做到「打 5 个字就开始说话」,同时音频也在流式输出。这对实时对话场景是刚需。

官方评测数据也很能打(来自 CosyVoice 3 论文 Table 4,SEED-TTS-Eval 基准):

模型中文 CER↓英文 WER↓硬样本 CER↓相似度↑
Seed-TTS(闭源)1.12%2.25%7.59%79.6%
CosyVoice 21.45%2.57%6.83%74.8%
CosyVoice 3-0.5B RL0.75%1.76%5.09%77.4%
CosyVoice 3-1.5B RL0.71% 👑1.45% 👑5.66%77.5%

中文 CER 最低 0.71%,英文 WER 最低 1.45%,硬样本 CER 最低 5.09%——CosyVoice 3 在三个核心指标上全面碾压,生僻字、多音字场景最稳。


🧪 实战演练:M3 Max 本地部署全记录

理论说完了,上实操。俺老猪在 M3 Max(36GB 内存)上从头部署 CosyVoice 3,完整记录每一步。

环境准备

1
2
3
4
5
6
7
8
9
10
11
12
# 克隆仓库(含 Matcha-TTS 子模块,CosyVoice 3 仍然依赖它)
git clone --recursive https://github.com/FunAudioLLM/CosyVoice.git ~/data/app/cosyvoice
cd ~/data/app/cosyvoice

# 创建虚拟环境
python3 -m venv venv && source venv/bin/activate

# 安装 PyTorch(MPS 后端)
pip install torch torchaudio

# 安装依赖
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com

⚠️ 如果遇到 sox 兼容问题(macOS 一般不会):

1
brew install sox

模型下载

CosyVoice 3 目前只有一个版本——Fun-CosyVoice3-0.5B-2512(约 3.7GB),包含 base 和 RL 两个变体:

1
2
3
4
5
from modelscope import snapshot_download

# Fun-CosyVoice3-0.5B(基础版 + RL 版,~3.7GB)
snapshot_download('FunAudioLLM/Fun-CosyVoice3-0.5B-2512',
                  local_dir='pretrained_models/Fun-CosyVoice3-0.5B')

⚠️ ModelScope 下载大文件容易断,换 HuggingFace 镜像更稳:

1
2
HF_ENDPOINT=https://hf-mirror.com huggingface-cli download \
  FunAudioLLM/Fun-CosyVoice3-0.5B-2512 --local-dir pretrained_models/Fun-CosyVoice3-0.5B

实测 1:普通话 zero-shot 合成

CosyVoice 3 的 zero-shot 调用和旧版有个关键区别:prompt_text 不再是随便写一句话,而是固定格式 'You are a helpful assistant.<|endofprompt|>你的参考文本'

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import sys
sys.path.append('third_party/Matcha-TTS')
from cosyvoice.cli.cosyvoice import AutoModel
import torchaudio

# 加载 CosyVoice 3 模型
cosyvoice = AutoModel(model_dir='pretrained_models/Fun-CosyVoice3-0.5B')

# zero-shot:3 秒参考音频即可克隆声音
for i, j in enumerate(cosyvoice.inference_zero_shot(
    '八百标兵奔北坡,北坡炮兵并排跑,炮兵怕把标兵碰,标兵怕碰炮兵炮。',
    'You are a helpful assistant.<|endofprompt|>希望你以后能够做的比我还好呦。',
    './asset/zero_shot_prompt.wav',
    stream=False
)):
    torchaudio.save(f'zero_shot_{i}.wav', j['tts_speech'], cosyvoice.sample_rate)
实测指标数据
合成文本八百标兵奔北坡,北坡炮兵并排跑…
音频时长10.7 秒
采样率24000 Hzcosyvoice.sample_rate
文件大小1005 KB
推理耗时21 秒(M3 Max / MPS)
声音克隆✅ 3 秒音频零样本

🎵 听听效果:

实测 2:instruct 控制(方言/情感/语速)

CosyVoice 3 的 instruct 用法和 CosyVoice 2 一样用 inference_instruct2(),但指令格式也是固定模板:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 广东话
for i, j in enumerate(cosyvoice.inference_instruct2(
    '好少咯,一般系放嗰啲国庆啊,中秋嗰啲可能会咯。',
    'You are a helpful assistant. 请用广东话表达。<|endofprompt|>',
    './asset/zero_shot_prompt.wav',
    stream=False
)):
    torchaudio.save(f'instruct_yue_{i}.wav', j['tts_speech'], cosyvoice.sample_rate)

# 快速语速
for i, j in enumerate(cosyvoice.inference_instruct2(
    '收到好友从远方寄来的生日礼物,那份意外的惊喜与深深的祝福让我心中充满了甜蜜的快乐,笑容如花儿般绽放。',
    'You are a helpful assistant. 请用尽可能快地语速说一句话。<|endofprompt|>',
    './asset/zero_shot_prompt.wav',
    stream=False
)):
    torchaudio.save(f'instruct_fast_{i}.wav', j['tts_speech'], cosyvoice.sample_rate)
实测指标数据
方言支持广东话、四川话、上海话等 18 种
控制维度语言、方言、情感、语速、音量
指令格式'You are a helpful assistant. <自然语言指令>.<|endofprompt|>'
广东话实测6.4 秒音频,596 KB,耗时 12 秒

🎵 听听广东话:

🎵 听听快速语速:

实测 3:hotfix 发音纠正

CosyVoice 3 支持用 [j][ǐ] 这样的注音格式纠正多音字发音:

1
2
3
4
5
6
7
8
# hotfix 发音纠正:[j][ǐ] 强制指定「给」的读音
for i, j in enumerate(cosyvoice.inference_zero_shot(
    '高管也通过电话、短信、微信等方式对报道[j][ǐ]予好评。',
    'You are a helpful assistant.<|endofprompt|>希望你以后能够做的比我还好呦。',
    './asset/zero_shot_prompt.wav',
    stream=False
)):
    torchaudio.save(f'hotfix_{i}.wav', j['tts_speech'], cosyvoice.sample_rate)
实测指标数据
合成文本高管也通过电话…对报道[j][ǐ]予好评
音频时长5.5 秒
文件大小518 KB
发音纠正[j][ǐ] 注音格式生效

🎵 听听 hotfix 效果:

实测 4:精细控制(呼吸、笑声)

CosyVoice 3 支持在文本中插入特殊标记来控制副语言行为:

1
2
3
4
5
6
7
# [breath] 插入呼吸停顿
for i, j in enumerate(cosyvoice.inference_cross_lingual(
    'You are a helpful assistant.<|endofprompt|>[breath]因为他们那一辈人[breath]在乡里面住的要习惯一点,[breath]邻居都很活络,[breath]嗯,都很熟悉。[breath]',
    './asset/zero_shot_prompt.wav',
    stream=False
)):
    torchaudio.save(f'breath_{i}.wav', j['tts_speech'], cosyvoice.sample_rate)
实测指标数据
音频时长10.0 秒
文件大小941 KB
控制标记[breath] 呼吸停顿
推理耗时17.7 秒

🎵 听听呼吸停顿:

支持的控制标记:[breath](呼吸)、[laughter](笑声)、<strong>文本</strong>(重读)等。

实测 5:流式双向合成(Bi-Streaming)

CosyVoice 3 的核心卖点——文本流式输入 + 音频流式输出,首包延迟 150ms:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 用 generator 模拟 LLM 逐句输出
def text_generator():
    yield '收到好友从远方寄来的生日礼物,'
    yield '那份意外的惊喜与深深的祝福'
    yield '让我心中充满了甜蜜的快乐,'
    yield '笑容如花儿般绽放。'

for i, j in enumerate(cosyvoice.inference_zero_shot(
    text_generator(),
    'You are a helpful assistant.<|endofprompt|>希望你以后能够做的比我还好呦。',
    './asset/zero_shot_prompt.wav',
    stream=False  # 改为 stream=True 实现真正的流式
)):
    torchaudio.save(f'bistream_{i}.wav', j['tts_speech'], cosyvoice.sample_rate)
实测指标数据
音频时长10.9 秒
文件大小1020 KB
推理耗时20.4 秒
首包延迟~150ms(官方数据)
流式方式文本 generator → 音频 chunk 输出
适用场景实时对话、语音助手

🎵 听听流式合成:

实测汇总

在 M3 Max(36GB / MPS 后端)上,5 项实测全部通过 ✅:

实测功能音频时长文件大小推理耗时
zero-shot普通话克隆10.7s1005 KB21s
instruct广东话合成6.4s596 KB12s
hotfix发音纠正5.5s518 KB12s
[breath]呼吸控制10.0s941 KB18s
Bi-Stream流式合成10.9s1020 KB20s

📐 所有音频:24000 Hz / 单声道 / Float32

🎨 更多玩法(非官方示例)

除了官方 example.py 里的 5 个基础用法,俺老猪还帮你测了这些场景:

四川话(instruct 方言控制)

1
2
3
4
5
6
7
for i, j in enumerate(cosyvoice.inference_instruct2(
    '老板儿,来一碗担担面,多放点海椒,莫放葱花哈!',
    'You are a helpful assistant. 请用四川话表达,语气要热情豪爽。<|endofprompt|>',
    './asset/zero_shot_prompt.wav',
    stream=False
)):
    torchaudio.save(f'sichuan_{i}.wav', j['tts_speech'], cosyvoice.sample_rate)
实测指标数据
音频时长4.0 秒
文件大小379 KB
推理耗时9 秒
方言四川话 ✅

🎵 听听四川话:

悲伤情感(instruct 情感控制)

1
2
3
4
5
6
7
for i, j in enumerate(cosyvoice.inference_instruct2(
    '窗外的雨下了一整夜,桌上的咖啡早已凉透,我翻开那本泛黄的相册,眼泪止不住地往下掉。',
    'You are a helpful assistant. 请用悲伤、低沉、缓慢的语气表达。<|endofprompt|>',
    './asset/zero_shot_prompt.wav',
    stream=False
)):
    torchaudio.save(f'sad_{i}.wav', j['tts_speech'], cosyvoice.sample_rate)
实测指标数据
音频时长12.1 秒
文件大小1.1 MB
推理耗时21 秒
情感悲伤低沉 ✅

🎵 听听悲伤情感:

上海话(吴语方言)

1
2
3
4
5
6
7
for i, j in enumerate(cosyvoice.inference_instruct2(
    '今朝天气老好额,阿拉一道去外滩兜兜,夜到再去城隍庙吃小笼馒头,侬讲好伐?',
    'You are a helpful assistant. 请用上海话表达,语气要亲切自然。<|endofprompt|>',
    './asset/zero_shot_prompt.wav',
    stream=False
)):
    torchaudio.save(f'shanghai_{i}.wav', j['tts_speech'], cosyvoice.sample_rate)
实测指标数据
音频时长8.5 秒
文件大小799 KB
推理耗时17 秒
方言上海话 ✅

🎵 听听上海话:

长文本(150+ 字稳定性测试)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
long_text = (
    '春天来了,万物复苏,大地披上了绿色的新装。远处的山峦连绵起伏,'
    '近处的溪水潺潺流淌,鸟儿在枝头欢快地歌唱,蝴蝶在花丛中翩翩起舞。'
    '孩子们在草地上追逐嬉戏,老人们在树荫下悠闲地下着象棋,'
    '年轻的情侣手牵着手漫步在林间小道上。这是一个充满生机与希望的季节,'
    '每一缕阳光都温暖着人们的心房,每一阵微风都带来了花香与泥土的气息。'
)
for i, j in enumerate(cosyvoice.inference_zero_shot(
    long_text,
    'You are a helpful assistant.<|endofprompt|>希望你以后能够做的比我还好呦。',
    './asset/zero_shot_prompt.wav',
    stream=False
)):
    torchaudio.save(f'longtext_{i}.wav', j['tts_speech'], cosyvoice.sample_rate)
# 输出 2 个 chunk(longtext_0.wav + longtext_1.wav),合并后约 35 秒
实测指标数据
音频时长35.0 秒(2 个 chunk 合并)
文件大小3.3 MB
推理耗时63 秒(chunk 1: 26s + chunk 2: 37s)
文本长度150+ 字
稳定性✅ 无卡顿、无跳字

🎵 听听长文本:

中英混合(code-switch)

1
2
3
4
5
6
7
for i, j in enumerate(cosyvoice.inference_zero_shot(
    '我们的 AI product 采用了最新的 transformer architecture,在 benchmark 上取得了 state-of-the-art 的成绩,欢迎大家来 GitHub 给我们点个 star!',
    'You are a helpful assistant.<|endofprompt|>希望你以后能够做的比我还好呦。',
    './asset/zero_shot_prompt.wav',
    stream=False
)):
    torchaudio.save(f'codeswitch_{i}.wav', j['tts_speech'], cosyvoice.sample_rate)
实测指标数据
音频时长11.6 秒
文件大小1.1 MB
推理耗时27 秒
中英切换✅ 自然流畅

🎵 听听中英混合:

完整实测汇总(10 项)

实测功能音频时长文件大小推理耗时
zero-shot普通话克隆10.7s1005 KB21s
instruct广东话合成6.4s596 KB12s
hotfix发音纠正5.5s518 KB12s
[breath]呼吸控制10.0s941 KB18s
Bi-Stream流式合成10.9s1020 KB20s
🎵 四川话方言控制4.0s379 KB9s
😢 悲伤情感情感控制12.1s1.1 MB21s
🏙️ 上海话吴语方言8.5s799 KB17s
📜 长文本150+ 字35.0s3.3 MB63s
🌐 中英混合code-switch11.6s1.1 MB27s

启动 WebUI

想更直观地玩?一行命令启动 Web 界面:

1
2
cd ~/data/app/cosyvoice && source venv/bin/activate
python webui.py --port 8000 --model_dir pretrained_models/Fun-CosyVoice3-0.5B

浏览器打开 http://localhost:8000,上传参考音频 → 输入文本 → 选方言/情感 → 点生成,几秒出结果。

部署踩坑速查

问题解决方案
ModuleNotFoundError: matchasys.path.append('third_party/Matcha-TTS')(CosyVoice 3 仍然需要)
NumPy 2.x 不兼容降级 pip install 'numpy<2'
ModelScope 下载断连换 HuggingFace 镜像 HF_ENDPOINT=https://hf-mirror.com
instruct 指令不生效格式必须是 'You are a helpful assistant. <指令>.<|endofprompt|>'
MPS 部分算子报错加环境变量 PYTORCH_ENABLE_MPS_FALLBACK=1
日语合成发音不准需要先将文本转成片假名(katakana)再输入

🎯 谁该用?怎么选?

你的场景推荐理由
🎙️ 做语音助手/对话机器人CosyVoice 3流式 150ms + 情感控制,对话感最强
🎭 做虚拟主播/AI 配音CosyVoice 3 + GPT-SoVITSCosyVoice 快速克隆 + SoVITS 深度定制
🎮 游戏 NPC 配音GPT-SoVITS v2训练工具链最完善,可批量生产
💬 纯文本对话 TTSChatTTS停顿/笑声/换气最自然
🪶 低配机器跑 TTSFish Speech 1.5显存需求最低

俺老猪的推荐:CosyVoice 3 主攻 + ChatTTS 辅助。前者负责高质量合成和声音克隆,后者负责纯对话场景的自然感。


总结

CosyVoice 3 是当前中文开源 TTS 的综合最强,没有之一。0.81% 的中文 CER、150ms 流式首包、3 秒零样本克隆、18 种方言支持——这些数据放在一起,就是「六边形战士」的定义。

而且 M3 Max 就能流畅跑,不需要 GPU 服务器,不需要付费 API。本地部署完,你的 Agent 就能开口说广东话了 🐷


项目地址github.com/FunAudioLLM/CosyVoice 论文arxiv.org/pdf/2505.17589 许可证:Apache 2.0(开源可商用)


觉得有用?点赞转发让更多人看到 💪 俺老猪下次带你部署 ChatTTS,搞个会说会笑的 Agent~ 🐷🍖

本文由作者按照 CC BY 4.0 进行授权