GitHub Explorer

fishaudio/fish-speech 综合分析报告

分析时间: 2026-03-22 | 仓库: https://github.com/fishaudio/fish-speech


一、仓库基础数据

指标值
名称fish-speech
描述SOTA Open Source TTS
主页https://speech.fish.audio
Stars28,605
Forks2,395
Watchers150
Open Issues22
Closed Issues637
Open PRs28
Closed/Merged PRs355
Discussions176
主语言Python (81%)
其他语言TypeScript, Dockerfile, Jupyter Notebook, JSON
许可证Fish Audio Research License (研究/非商用免费, 商用需授权)
创建时间2023-10-10
最近推送2026-03-21
当前版本v2.0.0-beta (S2 Beta, 2026-03-10)
磁盘大小~28MB (代码)
Topicsllama, transformer, tts, valle, vits, vqgan, vqvae

二、作者与贡献者分析

核心作者

作者身份Commits说明
leng-yue (Leng Yue)创始人/主导者448 (占68%)Bio: “Push the boundary of AGI”; 公司: 39 AI; 地址: Mountain View; 1,141 followers
AnyaCoder (spicysama)核心贡献者69第二大贡献者, 负责推理、API、Bug修复
PoTaTo-Mika贡献者29文档、Docker、功能补充
Stardust-minus贡献者29核心功能开发, 邮箱 stardust@fish.audio (公司员工)
Whale-Dolphin贡献者20功能开发和维护

团队特征

  • 高度集中: Leng Yue 一人贡献了绝大多数代码, 属于典型的核心驱动型项目
  • 公司化运营: 39 AI, INC (Fish Audio 母公司), 总部在 Mountain View (硅谷)
  • 技术报告作者团队: 14人 (Shijia Liao, Yuxuan Wang, Songting Liu 等), 暗示有较大研发团队
  • 社区贡献: 约40+外部贡献者, 但贡献量较少, 主要是文档/Bug修复

三、热度与增长趋势

Star 增长

  • 28,605 stars — 在 TTS 领域排名前5
  • 产品曾获 Product Hunt 日榜 Top Post
  • 获 Trendshift 热门仓库标识

版本演化 (关键里程碑)

版本日期关键变化
v0.2.02023初期初始版本, VITS/VQGAN 基础
v1.0.02024初首个正式版
v1.22024-07架构成熟化
v1.4.02024-09重大发布, 发表技术报告 (arXiv:2411.01156)
v1.5.02024-12质量优化
v1.5.12025-05维护版本
v2.0.0-beta2026-03S2 架构大重构, 4B 参数旗舰模型, 发表新技术报告 (arXiv:2603.08823)

开发节奏

  • 活跃期: 2023-10 ~ 2024-05 (密集开发, 月均50+ commits)
  • 成熟期: 2024-06 ~ 2025 (月均10-20 commits, 稳定维护)
  • S2 重启: 2026-01 ~ 2026-03 (S2 Beta 密集开发)
  • 提交时间: UTC+8 凌晨至早晨峰值 (04:00-08:00 UTC = 12:00-16:00 北京时间), 典型中国/硅谷开发者模式
  • 工作日分布: 相对均匀, 周末也有提交 (约22%), 说明团队投入度高

四、竞品分析

TTS 开源领域竞争格局 (按 Stars 排序)

仓库Stars描述对比
GPT-SoVITS55,993少样本 TTSStars 更多但架构较旧, Fish Speech 被列为其灵感来源
coqui-ai/TTS44,887深度学习 TTS 工具包已停止维护, 传统架构
ChatTTS38,959对话式 TTS专注日常对话, 功能更窄
MockingBird36,886声音克隆功能单一
OpenVoice36,143即时声音克隆MyShell/MIT, 不同定位
fish-speech28,605SOTA 多语种 TTS唯一的 Dual-AR + RL 对齐方案
CosyVoice20,151阿里多语种 TTS直接竞品, 但 WER 不如 Fish S2
index-tts19,505工业级零样本 TTS新兴竞品
nari-labs/dia19,214对话 TTS单次生成对话, 功能更窄

Fish Speech 的竞争优势

  1. 性能领先: Seed-TTS Eval WER (中文 0.54%, 英文 0.99%) 全面领先所有开源和闭源系统
  2. 架构创新: Dual-AR 是独特的架构选择, 没有直接模仿者
  3. RL 对齐: 唯一使用 GRPO 做后训练对齐的开源 TTS
  4. 多语言覆盖: 80+ 语言, 远超多数竞品
  5. SGLang 集成: 首个原生支持 SGLang 推理加速的 TTS 模型

五、文档与知识入口

官方文档

社区入口

知识检索入口


六、Issue 信号分析

高关注问题

类别数量典型问题
流式推理 Bug5+#819 (22 评论): streaming 参数导致不完整音频
模型量化2#1168: S2-Pro 量化/优化需求
Compile 兼容性3#860, #834, #1183: torch.compile 导致音频失真
多语言/方言3#362, #383, #852: 中文方言、其他语言支持
Docker2#1224: Blackwell GPU 支持, #346: 容器访问
情感控制2#1162, #1030: 情感标签不生效
LoRA 训练3#428, #1220, #1230: LoRA 微调相关

关键信号

  • 商业许可讨论 (#531, 17 评论): 社区对商用条款有强烈关注
  • 社区活跃但由核心团队主导: 大部分 PR 来自内部团队
  • Issue 关闭率高: 637 closed vs 22 open = 96.7% 关闭率, 维护非常积极

七、代码规模

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 Language          Files   Code    Comments  Blanks
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 Python              59   8,181     438     1,793
 TypeScript/TSX      16   1,576       2       164
 JSON                12   5,353       0         0
 YAML                 7     356      39        36
 Markdown            33       0   2,903     1,302
 Dockerfile           1     250      94        54
 其他                 13     854     192       148
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 总计               141  16,570   3,668     3,497
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

核心 Python 代码仅 ~8,200 行, 属于非常精简的实现。这对于一个 SOTA 级别的 TTS 系统来说是极其紧凑的。


八、架构设计

目录结构

fish_speech/
├── configs/                 # Hydra 配置 (base, finetune, DAC codec)
├── models/
│   ├── text2semantic/       # 核心: Dual-AR Transformer
│   │   ├── llama.py         # 模型定义 (BaseTransformer + DualARTransformer)
│   │   ├── inference.py     # 推理引擎 (generate, decode_one_token_ar)
│   │   ├── lit_module.py    # Lightning 训练模块
│   │   └── lora.py          # LoRA 微调支持
│   └── dac/                 # 音频编解码器
│       ├── modded_dac.py    # 修改版 DAC 模型
│       └── rvq.py           # 下采样残差向量量化
├── datasets/                # 数据管道 (protobuf 流式读取)
├── inference_engine/        # 推理引擎封装 (TTS 端到端)
├── text/                    # 文本清洗
├── tokenizer.py             # 自定义 Tokenizer (基于 Tiktoken/Qwen)
├── content_sequence.py      # 多模态序列构建
├── conversation.py          # 对话管理 (chat template)
├── train.py                 # Hydra + Lightning 训练入口
└── utils/                   # 工具函数
tools/
├── server/                  # API 服务器
├── webui/                   # Gradio WebUI
├── llama/                   # 数据集构建/量化/LoRA合并
└── vqgan/                   # VQ 提取
awesome_webui/               # React + shadcn/ui 前端 (新)

核心架构: Dual-AR (主从自回归)

输入文本 ──► Tokenizer ──► Slow AR (4B, 时间轴) ──► 主码本预测
                                    │
                                    ▼
                            Fast AR (400M, 深度轴) ──► 残差码本 x9
                                    │
                                    ▼
                           DAC Decoder (RVQ 10码本, ~21Hz) ──► 音频波形

关键设计决策:

  1. Slow AR (BaseTransformer): 标准 decoder-only Transformer, 使用 RoPE、GQA、RMSNorm, 与 LLaMA 架构同构。沿时间轴自回归生成主语义码本。
  2. Fast AR (DualARTransformer 内嵌): 小型 Transformer (4 层), 在每个时间步生成 9 个残差码本。使用独立的 KV Cache 和 RoPE。
  3. DAC Codec (DownsampleResidualVectorQuantize): 修改版 Descript Audio Codec, 44.1kHz 采样率, 10 码本 (1 语义 + 9 残差), 下采样因子 4x, ~21Hz 帧率。
  4. Tokenizer: 基于 Tiktoken/HuggingFace AutoTokenizer, 扩展了 4096 个语义 token (<|semantic:0|> ~ <|semantic:4095|>) 和模态控制 token。

九、创新点

1. Dual-AR 非对称架构

传统 TTS 模型 (如 VALL-E) 在所有码本上使用同等规模的模型。Fish Speech 的 Dual-AR 设计是核心创新:

  • Slow AR (4B): 全量参数用于捕捉语义、韵律、情感
  • Fast AR (400M): 轻量参数仅负责声学细节恢复
  • 优势: 推理速度提升 (Fast AR 只做 num_codebooks 步, 远少于 Slow AR), 同时质量不损失

核心实现在 llama.py 的 DualARTransformer 类:

# Slow AR 生成主码本
parent_result = super().forward(inp=inp, key_padding_mask=key_padding_mask)
# Fast AR 在语义 token 位置生成残差码本
x = x[codebook_mask]  # 只取语义 token 位置
x = self.fast_project_in(x)  # 可能降维
for layer in self.fast_layers:  # 4 层小 Transformer
    x = layer(x, fast_freqs_cis, fast_mask)
codebook_logits = self.fast_output(self.fast_norm(x))

2. Repetition Aware Sampling (RAS)

推理时使用滑动窗口检测重复 token, 自动切换到高温采样以打破循环:

# 滑动窗口 (10 token) 检测重复
in_window = (previous_tokens[0] == main_token_normal).any()
is_semantic = (main_token_normal >= semantic_begin_id) & (main_token_normal <= semantic_end_id)
should_use_high = in_window & is_semantic
main_token_normal = torch.where(should_use_high, main_token_high, main_token_normal)

3. 语义码本分离量化

在 RVQ 中, 语义码本 (4096 维) 和残差码本 (1024 维) 使用不同大小的码表:

self.semantic_quantizer = ResidualVectorQuantize(codebook_size=4096, ...)  # 更大的语义空间
self.quantizer = ResidualVectorQuantize(codebook_size=1024, ...)  # 残差声学细节
residual_z = z - semantic_z  # 残差 = 原始 - 语义

4. ChatML 格式的语音生成

将 TTS 任务框架化为对话式 LLM 任务:

<|im_start|>system
convert the provided text to speech reference to the following:
Text: <|speaker:0|>参考文本
Speech: [VQ codes]<|im_end|>
<|im_start|>user
<|speaker:0|>要合成的文本<|im_end|>
<|im_start|>assistant
<|voice|>[Generated VQ codes]<|im_end|>

5. 内联情感控制 (15,000+ 标签)

不是预定义枚举, 而是支持自由文本标签, 模型通过大规模数据学习理解 [whisper]、[excited] 等自然语言指令。

6. 原生多说话人生成

通过 <|speaker:i|> token 在单次生成中支持多说话人, 无需分别上传参考音频。


十、可复用模式

1. Dual-AR 架构模式

适用场景: 任何需要生成多层/多码本表示的任务 (音乐生成、视频 token 生成等)。核心思想是用大模型处理高级语义, 小模型处理低级细节。

2. ContentSequence 多模态序列构建

content_sequence.py 实现了一个优雅的多模态序列构建器, 统一处理文本、VQ codes、音频特征:

@dataclass
class ContentSequence:
    parts: list[BasePart]  # TextPart | VQPart | AudioPart
    modality: "text" | "voice" | "interleave"

    def encode(self, tokenizer, ...) -> EncodedMessage:
        # 统一编码为 tokens + labels + masks

3. Thread-Safe 推理队列

inference.py 中的 launch_thread_safe_queue 模式: 用独立线程持有 GPU 模型, 通过 Queue 接收请求, 避免多线程 CUDA 冲突。

4. Hydra + Lightning 训练框架

标准化的配置驱动训练:

  • Hydra YAML 配置 (模型、数据、训练器全部可配置)
  • Lightning Module 封装 (自动 checkpoint、分布式)
  • LoRA 即插即用 (只需在 config 中设置 lora_config)

5. Protobuf 流式数据管道

使用 protobuf 二进制格式存储训练数据, 支持流式读取和分片:

for text_data in read_pb_stream(f):
    self.groups.append(text_data)  # 按 speaker 分组

十一、代码质量评估

优点

维度评分说明
架构清晰度9/10模块划分清晰, 职责单一, 核心代码仅 ~8K 行
文档完整度8/10多语言文档站, 技术报告, API 文档齐全
可维护性7/10类型注解完善, dataclass 大量使用, 但部分注释为中文
测试覆盖3/10几乎无单元测试, 只有 if __name__ 式的手动测试
CI/CD6/10pre-commit (代码格式), Docker 构建 CI, 但无自动化测试
依赖管理8/10使用 uv + pyproject.toml, 支持多 CUDA 版本, 锁定关键依赖版本

代码风格

  • 现代 Python: 使用 match/case、| 类型联合、kw_only dataclass
  • torch.compile 友好: 避免 in-place 操作, 使用 torch.where 替代条件分支
  • 混合语言注释: 部分核心注释为中文 (如 # 将 cal_loss=True 直接关联到 VQPart 上)

潜在问题

  1. 无单元测试: 对于 SOTA 级模型, 缺乏回归测试风险较高
  2. inference.py 过大: 967 行单文件, 混合了模型初始化、采样、生成、CLI 等职责
  3. Magic Numbers: 如 AMPLITUDE = 32768 (在 server/inference.py 中自注 “Needs an explanation”)
  4. LoRA 实现较基础: 不支持 target_modules 选择 (社区 PR #1230 正在添加)

十二、快速判断

综合评级: A- (优秀)

维度评级理由
技术创新A+Dual-AR 架构 + RL 对齐, 业界领先
工程质量B+代码精简清晰但缺乏测试
社区活力B+Stars 高, Issue 响应快, 但贡献集中在核心团队
商业前景A有明确商业化路线 (Fish Audio 平台), 许可证设计合理
可持续性A-公司化运营 (39 AI), 持续投入, 但高度依赖 Leng Yue
可复用性A多个架构模式可复用到其他项目

适合场景

  • 研究: TTS/语音合成领域的参考实现
  • 非商用产品: 学术、个人项目、评估测试
  • 商业产品: 需联系 business@fish.audio 获取商业许可
  • 二次开发: LoRA 微调方案成熟, 可快速适配特定场景

关键风险

  1. 许可证限制: 非 MIT/Apache, 商用需要单独许可
  2. 单人依赖: Leng Yue 占 68% 贡献, 总线因子 = 1
  3. S2 Beta 阶段: v2.0.0 仍在 beta, 接口可能变化
  4. 算力门槛: 4B 参数模型需要至少一张高端 GPU

相关报告