VibeVoice 的半开源:权重还在,推理代码没了
拉一遍 microsoft/VibeVoice 的提交历史,会看到一件不太寻常的事:这个仓库现存最早的一条提交在 2025 年 9 月 5 日,SHA 8107244b,提交信息只有一个单词——statement。
它的 parents 字段是空数组。这是一条根提交。也就是说,2025 年 8 月 25 日首发时的全部历史被强制推送抹平了,仓库从零重建,重建时的内容是 8 个文件:.gitignore、LICENSE、SECURITY.md、4 张图片,和一份 96 行的 README。零个 Python 文件。
那份 README 的第一段是这样写的:
After release, we discovered instances where the tool was used in ways inconsistent with the stated intent. Since responsible use of AI is one of Microsoft's guiding principles, we have disabled this repo until we are confident that out-of-scope use is no longer possible.
「直到我们确信越界使用不再可能为止。」
到今天(2026-08-17)是第 11 个月。仓库早已重新活跃——52,793 Star、140 条提交、ASR 和实时模型陆续开源、进了 Hugging Face Transformers 和 Azure AI Foundry。但那句承诺针对的那部分东西,一样都没回来。
我此前写过一篇 Microsoft VibeVoice 深度解析,那篇讲的是它的技术栈——7.5Hz 连续 tokenizer、next-token diffusion、ASR-BitNet 的异构量化。这篇不讲技术栈,讲一件更麻烦的事:当一个 MIT 项目的权重和代码被拆开发放时,「开源」到底还剩下什么。
一、缺口的精确形状
「TTS 代码没了」这句话如果只是转述新闻,价值有限。我把 main 分支上的三个建模文件拉下来逐个 grep 了一遍,缺口的形状比想象中更具体。
$ grep -n "def generate\|GenerationMixin" *.py
modeling_vibevoice_asr.py:11: from transformers.generation import GenerationMixin
modeling_vibevoice_asr.py:152: class VibeVoiceASRForConditionalGeneration(
VibeVoiceASRPreTrainedModel, GenerationMixin):
modeling_vibevoice_streaming_inference.py:9: from transformers.generation import GenerationMixin, ...
modeling_vibevoice_streaming_inference.py:163: class VibeVoiceStreamingForConditionalGenerationInference(
VibeVoiceStreamingPreTrainedModel, GenerationMixin):
modeling_vibevoice_streaming_inference.py:574: def generate(
modeling_vibevoice_streaming_inference.py:887: def sample_speech_tokens(self, condition, neg_condition, cfg_scale=3.0):
ASR 有。流式实时有,generate() 在第 574 行,连 CFG 采样都在。而 modeling_vibevoice.py——那个多说话人长音频 TTS 的主模型,495 行——一条都没匹配上。
再看那个类本身:
# modeling_vibevoice.py:213
class VibeVoiceForConditionalGeneration(VibeVoicePreTrainedModel):
...
# 文件末尾
AutoModel.register(VibeVoiceConfig, VibeVoiceModel)
AutoModelForCausalLM.register(VibeVoiceConfig, VibeVoiceForConditionalGeneration)
这是全文最值得盯着看的两行。这个类被注册成了 AutoModelForCausalLM,但它不继承 GenerationMixin。 在 transformers 4.50 之后,generate() 已经从 PreTrainedModel 挪进了 GenerationMixin——所以你用 AutoModelForCausalLM.from_pretrained() 能把 1.5B 权重正常加载进来,调 .generate() 则是干脆的 AttributeError。
它剩下的公开方法只有 forward() 和 forward_speech_features()。而 forward() 的签名把用途写得明明白白:
def forward(self, input_ids=None, ...,
speech_tensors=None, speech_masks=None,
speeches_loss_input=None, speech_semantic_tensors=None,
acoustic_input_mask=None, acoustic_loss_mask=None,
ddpm_batch_mul: int = 1, **kwargs):
acoustic_loss_mask、ddpm_batch_mul——这是训练路径的参数,不是推理路径的。留下的是算 diffusion loss 的那一半,被摘掉的是从噪声迭代还原声学特征的那一半。
demo/ 目录佐证了同一件事:6 个脚本里 4 个是 ASR 的、2 个是 Realtime 的,没有一个是 TTS 的。README 的模型表里,TTS-1.5B 那行的 "Quick Try" 一栏写着 Disabled。
所以这不是「文档没更新」或者「代码藏在别的分支」。是一次精确的外科手术:把长音频多说话人合成的推理路径整条摘掉,其余全留。
二、为什么这个缺口补不上,也不打算补
有个容易被跳过的问题:微软为什么恢复了 ASR 和 Realtime,唯独不恢复 TTS?
把三个模型的能力并排看,答案很直白:
| 模型 | 核心能力 | 被滥用时长什么样 |
|---|---|---|
| ASR-7B | 60 分钟音频转文字 + 说话人分离 | 监听/转录,与模型本身关系不大 |
| Realtime-0.5B | 单说话人流式合成 | 生成语音,但换不成特定某个人 |
| TTS-1.5B / 7B | 用几秒参考音频零样本克隆,4 人对话,90 分钟 | 就是 deepfake 本身 |
对前两个来说,「越界使用」是一种可以被围栏挡在外面的副作用。对 TTS 来说,被滥用的那个能力和产品本身是同一件事——它的全部卖点就是「拿一段参考音频,复制任何人的声音,并让复制品自然地和另外三个人对话一个半小时」。
这就是为什么那句「until we are confident that out-of-scope use is no longer possible」在 11 个月后仍然没有兑现:它设的不是一个时间条件,是一个逻辑上无法满足的条件。带水印、带 AI 声明、写进 README 的免责声明,都改变不了权重本身能做什么。
我倾向于认为这个缺口是永久的,不是待恢复的。任何基于「微软早晚会放回来」做的技术选型,都在赌一件不会发生的事。这跟我此前拆过的 huggingface/speech-to-speech 是完全相反的处境——后者把每一层都换成可插拔的开源组件,能力上限低一截,但没有任何一环挂在某家公司的合规决策上。
三、它催生的那条影子供应链
有意思的地方在于,代码被摘掉了,但权重没有被完整收回。这个不对称造出了一条现在还在正常运转的供应链。
我把四个模型仓库挨个打了一遍 Hugging Face API(2026-08-17 实测):
| 模型 | 状态 | 累计下载 | Likes |
|---|---|---|---|
| microsoft/VibeVoice-ASR | 公开 | 695,866 | 1,270 |
| microsoft/VibeVoice-Realtime-0.5B | 公开 | 666,107 | 1,271 |
| microsoft/VibeVoice-1.5B | 公开,未 gated | 114,807 | 2,459 |
| microsoft/VibeVoice-Large(7B) | HTTP 401 | — | — |
两个数字值得停一下。
第一,1.5B 是全家族 likes 最高的一个(2,459,接近 ASR 和 Realtime 之和),而它恰恰是唯一一个官方跑不起来的。 权重页面公开、未 gated、任何人 huggingface-cli download 就能拿到全量参数——只是官方不给你启动它的那 200 行代码。
第二,7B 是真的被收回了,API 直接 401。但它并没有消失:社区转存 aoi-ot/VibeVoice-Large 有 2,433 次下载、236 个 like,另有一批 AWQ-INT4、GGUF 量化版本在流通。
代码这一侧由社区 fork vibevoice-community/VibeVoice 补齐(1.5k Star / 682 Fork,MIT),它保留了 1.5B、7B 和 streaming 三条线的推理路径,还加了非官方微调脚本。但它最后一次更新停在 2025-12-04——微软后来那一整批 ASR、BitNet、vLLM 插件的工作,它一样没有。
最反直觉的一环在最下游:fal.ai 正在以 $0.04 / 生成分钟的价格,商业售卖 "VibeVoice 7B" 的推理服务,支持最多 4 个说话人。Replicate 上也有对应端点。也就是说,一个微软自己的 Hugging Face 仓库已经打不开的模型,此刻正在被按分钟计费地对外提供。
我不认为这里有谁违规——MIT 许可证明确允许商用和再分发,权重发出去的那一刻这些就都是合法的。这恰恰是重点:下架一个 MIT 模型,在法律上不构成撤回,在工程上只构成一次不便。 真正被削减的是官方支持,不是可得性。
四、如果你现在要用它,三条路怎么选
抛开治理层面的讨论,落到工程选型上是三个选项。我按「11 个月后仍然如此」这个前提给出判断:
| 路径 | 能跑什么 | 代价 | 我的判断 |
|---|---|---|---|
| 官方仓库自建 | 仅 ASR-7B / Realtime-0.5B | 无 | ASR 场景推荐。这是唯一有官方持续维护、进了 Transformers 和 Azure 的部分 |
| 社区 fork 自部署 | 1.5B / 7B 多说话人 TTS | 停更 8 个月;权重来源为第三方转存;无安全更新;许可证虽为 MIT 但供应链不可审计 | 不推荐。为了一个已被原厂放弃的能力,接一整条无人维护的依赖 |
| 托管 API(fal / Replicate) | 1.5B / 7B 多说话人 TTS | $0.04/分钟;服务方随时可能因合规下线 | 确有多说话人长音频需求时推荐。把合规风险和运维一起外包出去,比自建划算得多 |
具体建议按需求分两类:
如果你要的是长音频转录 + 说话人分离——比如把一小时会议或播客切成带时间戳的结构化文本——直接用官方 ASR-7B。这是这个项目现在最扎实的部分,60 分钟单次处理、50+ 语言、有 BitNet 量化版能落 CPU,而且它没有任何一点处在这篇文章讨论的灰色地带里。
如果你要的是多说话人对话式配音,先诚实回答一个问题:你需要的是「多说话人长音频」,还是「零样本克隆某个特定的人」?如果是前者,把内容切段、用 Realtime-0.5B 或其他单说话人 TTS 逐段合成再拼接,工程上完全可行,而且绕开了整个问题;这条路的思路和我在 Seed-Audio 深度解析 里讨论的场景化配音编排是一致的。只有当你真的需要跨 90 分钟保持四个音色的一致性时,VibeVoice TTS 才是不可替代的——这时候走托管 API。
唯一要明确避开的是社区 fork 自部署。 它同时拿到了三样东西:一个原厂已经放弃维护的模型、一份停更 8 个月的推理代码、一批来源不可审计的第三方权重。这三样凑在生产环境里,收益是省掉 $0.04/分钟,风险是整条链上没有任何人对它负责。
五、这件事真正的教训
VibeVoice 的价值不止于它自己。它把一个平时被含糊带过的问题摆到了台面上:「开源」这个词在模型时代至少指四样可以被分开发放的东西。
- 权重(VibeVoice:TTS 1.5B 给了,7B 收回了)
- 建模代码(给了,但只是训练路径)
- 推理代码(没给)
- 许可证(MIT,最宽松的那档)
许可证是最响亮、也最不重要的那一项。MIT 承诺的是「你可以做任何事」,它从来没有承诺过「你能跑起来」。当一家公司想要收回一个模型、又不想背上「违背开源承诺」的名声时,摘掉推理代码是成本最低的做法:许可证一个字没改,Star 数一点没掉,README 还在,只是那 200 行让权重变成声音的胶水没了。
所以在评估任何一个「开源模型」时,值得加一条检查:不要看它的许可证,看它 demo/ 目录里有没有对应的脚本,看它的模型类继不继承 GenerationMixin。 这两个检查各花不到一分钟,比读十遍 LICENSE 都管用。
结论
microsoft/VibeVoice 现在是两个项目共用一个仓库:一个持续演进、官方维护、值得直接用的语音识别项目;和一个权重公开、代码缺失、靠社区和第三方 API 续命的语音合成项目。
对 ASR 需求,它是当下开源里最好的选择之一,没有保留意见。
对多说话人 TTS 需求,正确的心态不是「等微软放回来」,而是承认这个缺口是设计使然、且大概率永久——然后要么走托管 API,要么换一条不依赖零样本克隆的技术路线。那句 "until we are confident that out-of-scope use is no longer possible" 不是一个进度条,是一个礼貌的否定句。
至于那条已经跑起来的影子供应链——权重在社区手里流通、商业 API 在按分钟计费——它更像是一个提前到来的结论:在权重可以被复制的前提下,模型的下架从来只是一次分发路径的改道,不是撤回。 这个事实对想开源的公司和想用开源的工程师同样重要,只是意味着完全相反的事情。
参考资料
- Microsoft — microsoft/VibeVoice GitHub 仓库(截至 2026-08-17:52,793 Star / 5,957 Fork / 140 commits)
- Microsoft — 根提交
8107244b"statement"(2025-09-05,含撤回声明原文) - Microsoft —
vibevoice/modular/modeling_vibevoice.py(495 行,无generate()) - Microsoft —
modeling_vibevoice_streaming_inference.py(906 行,generate()在第 574 行,用作对照) - Microsoft — VibeVoice Technical Report(arXiv:2508.19205,2025-08)
- Hugging Face — microsoft/VibeVoice-1.5B(下载与 likes 数据经 HF API 于 2026-08-17 核对)
- Hugging Face — aoi-ot/VibeVoice-Large(7B 社区转存)
- 社区 — vibevoice-community/VibeVoice(含推理代码的 fork,最后更新 2025-12-04)
- fal.ai — VibeVoice 7B Text to Speech API($0.04 / 生成分钟)
- Replicate — microsoft/vibevoice
- Hugging Face — VibeVoice ASR in Transformers