跳到正文
北京时间
原文
LMSYS:Blog(Chatbot Arena 团队)· Boson AI & SGLang-Omni Team·· 2026-06-04精选AI 评分77

Boson AI 与 LMSYS 发布基于 SGLang-Omni 的 Higgs Audio v3 TTS 端到端服务

Blog Higgs Audio v3 TTS on SGLang-Omni: Real-Time, Controllable Speech for Voice Agents Today we are announcing end-to-end serving for Higgs Audio v3 TTS on SGLang-Omni. Higgs Audio v3 TTS is Boson AI's text-to-speech model for conversational voice agents: it generates natural and expres... Boson AI & SGLang-Omni Team

AI 导读

Boson AI 与 LMSYS 联合推出基于 SGLang-Omni 推理框架的 Higgs Audio v3 TTS 端到端服务。该模型约 4B 参数,基于 Qwen3-4B 骨干,支持 100 种语言(内部评测覆盖 111 种),在 Seed-TTS、CV3、MiniMax-Multilingual 及 Higgs-Multilingual 零样本语音克隆任务中达到单字级 WER/CER。开发者可通过文本内控制标签实时调整情感(20+种)、风格、韵律(语速/音高/停顿)及音效。模型支持流式合成,文本未完整时即可开始生成语音并保持一致性。SGLang-Omni 专为多阶段生成模型设计,统一调度 AR 解码与轻量计算,实现低延迟推理。

推荐理由

Higgs v3 把多语言和实时可控制整合进一个流式 TTS 模型,SGLang-Omni 为它搭好了多阶段推理的底座,做语音 Agent 的可以直接抄作业,这比多数论文落地快半拍。

正文 · AI 翻译

今天,我们宣布为Higgs Audio v3 TTS在SGLang-Omni上提供端到端服务。Higgs Audio v3 TTS 是 Boson AI 面向对话式语音智能体的文本转语音模型:它以低延迟生成自然且富有表现力的语音,支持100 种语言,WER/CER 低至个位数,并让开发者可以直接从输入文本流中控制情感、风格、韵律和音效。

对我们而言,服务 Higgs 不仅仅是增加一个 TTS 模型。Higgs 代表了一类更广泛的生成工作负载,其端到端路径不再是单一的自回归解码循环。相反,生成过程被拆分到多个阶段,每个阶段具有不同的计算模式、延迟要求和内存行为。SGLang-Omni 正是我们为这类多阶段模型构建的推理框架。

注:演示视频来自 Higgs Audio v3 TTS,其中的合成音频生成由 SGLang-Omni 提供支持。

认识 Higgs Audio v3 TTS

为真实对话而设计

一个优秀的对话式 TTS 模型不能等待一整段打磨完善的文字。在真实的语音智能体场景中,模型可能只看到半句话,甚至几个词,就需要开始说话。随着更多文本陆续到达,生成的声音仍必须在说话人身份、情感和节奏上保持连贯一致。

Higgs Audio v3 TTS 正是为这种流式交互模式而设计的。它可以在完整句子或标点符号到达之前就开始合成,然后随着文本流的增长而持续输出,同时保持稳定的表达风格。

在架构上,Higgs 是一个约 4B 参数的自回归解码器,构建在 Qwen3-4B 主干之上。它接收交错排列的文本和音频 token。音频由 Higgs Tokenizer 编码为 8 个离散码本,帧率为 25 fps,采用延迟模式交错排列,通过融合多码本嵌入映射到主干隐藏状态,再通过融合多码本头解码回 24 kHz 波形。生成过程在文本块和音频块之间交替进行,因此每个新的音频片段都同时以参考音频和此前已生成的上下文为基础。

多语言质量

在 Boson AI 内部的 Higgs-Multilingual 测试套件上(覆盖 111 种语言和方言),Higgs Audio v3 TTS 在 100 种语言上达到了个位数 WER/CER。在公开的多语言声音克隆基准上,v3 在 Seed-TTS、CV3 和 MiniMax-Multilingual 上也取得了宏平均个位数 WER/CER。零样本声音克隆只需要一段简短的参考音频,且同一参考音频可跨语言使用。

下表报告了零样本声音克隆的 WER/CER(↓,%)。每个数值均基于相应基准的语言集合进行宏平均,采用可复现的指标和归一化方法。

基准语言WER/CER ↓
Seed-TTS21.11
CV394.41
MiniMax-Multilingual232.74
Higgs-Multilingual1113.61

各语言的 Seed-TTS 细分结果以及 WavLM 说话人相似度可在 SGLang Omni Higgs Cookbook 中查看。

从文本流控制表达方式

Higgs Audio v3 TTS 同样在设计上支持可控性。开发者可以将控制标签直接放入输入文本中,从而在同一句话内改变情绪、切换说话风格、调整语速和音调、插入停顿或触发音效:

<|emotion:amusement|><|prosody:expressive_high|>Wait, wait, that was kind of hilarious. <|sfx:laughter|>Hehe, no, seriously, I was not ready for that.

这些标签族涵盖 20 多种情感(<|emotion:elation|>、<|emotion:anger|>、<|emotion:sadness|>、……)、风格(<|style:singing|>、<|style:whispering|>、<|style:shouting|>)、韵律(<|prosody:speed_very_slow|>、<|prosody:pitch_high|>、<|prosody:pause|>、<|prosody:long_pause|>)以及音效(<|sfx:cough|>、<|sfx:laughter|>、<|sfx:sigh|>、……)。不同类别的标签可以组合使用。完整目录见 SGLang Omni Higgs Cookbook。

用 SGLang-Omni 服务 Higgs

Higgs 在 SGLang-Omni 上进行服务和优化。与标准 LLM 不同,Higgs 以及许多现代 TTS 或全模态模型并不能自然地适配到单一统一的 autoregressive 解码循环中。它们的端到端生成路径包含多个阶段:有些看起来像标准的 AR 解码,有些是轻量级的函数式计算,还有些则持续消费数据块并流式返回音频。

SGLang-Omni 的目标是以清晰的运行时结构来服务这类模型:每个阶段按照自身的计算模式进行调度,各阶段之间通过低开销通道通信,而 GPU 分配、进程拓扑和内存预算则由框架统一管理。

基于高性能 SGLang 后端的多阶段解码

单阶段模型已经拥有成熟的服务路径:自回归 LLM 由 SGLang 主项目优化,扩散模型由 SGLang-Diffusion 支持。SGLang-Omni 关注的是另一种情形:端到端生成被拆分为多个阶段、且各阶段具有不同计算特征的模型。Higgs 就是一个例子。Qwen3-Omni 的 Thinker → Talker → MTP 流水线、Fish Audio S2-Pro 串行嵌套的 Dual-AR 设计,以及 Ming-Omni 和 LLaDA2.0-Uni 等全模态模型,都属于同一类别。

这就是 SGLang-Omni 运行时围绕阶段抽象构建的原因。模型配置会静态声明流水线中的各个阶段、它们的 GPU 放置以及进程拓扑。放置层和拓扑层负责准备 worker。Coordinator 在各阶段之间路由请求。每个 Stage 充当一个 IO 外壳:它接收来自上游阶段的数据,将工作交给其内部 Scheduler,并将输出流式传输到下游阶段。

不同阶段可以使用不同的调度器。AR 阶段,例如 Qwen3-Omni Thinker,通常使用 OmniScheduler,它保留了 SGLang 的连续批处理、混合 prefill/decode 调度、KV cache 管理、树缓存和 CUDA Graph 支持,同时将其适配到全模态原生的请求对象和流式输出。非 AR 阶段,例如小型编码器和聚合器,可以使用 SimpleScheduler,它本质上就是一个清晰的 get → forward → put 循环。流式阶段使用 StreamingSimpleScheduler 来管理 chunk 和 done 生命周期,例如流式模式下的 Higgs 声码器。

各阶段之间的接口是统一的,但每个阶段都可以选择与其自身计算模式相匹配的执行策略。为了让这一点既实用又快速,我们聚焦于三部分基础设施:

  • 分层通信。轻量级控制消息,包括 submit、data-ready、stream、complete、shutdown 和 abort,通过 ZMQ/msgpack 控制平面传输。张量负载通过中继数据平面传输,可使用 shm、nccl、nixl 和 mooncake 后端。同进程的边可以使用本地分发,符合同一 GPU 条件的流式分块可以使用 CUDA IPC,跨进程的边则保持相同的阶段级契约。
  • 进程-GPU-阶段拓扑。流水线在配置中声明阶段、路由、流式边、进程组、GPU 放置、张量并行规模以及可选的融合阶段组。非 TP 阶段显式声明其进程组。TP 阶段展开为每个 rank 一个进程,其中 rank 0 负责外部阶段 IO。紧凑的同机部署和更大的拆分/TP 部署是同一拓扑描述的不同实例,而非各自独立的服务栈。
  • 内存隔离。在多阶段运行时中,GPU 内存是阶段级的资源契约,而非全局调度器的一个分配比例。每个由 GPU 支持的阶段都可以声明 runtime.resources.total_gpu_memory_fraction;放置验证会在启动前按 GPU 汇总预算。当多个进程组共享同一张卡时,这些预算必须显式声明,这样一个阶段就无法悄悄消耗为另一个阶段预留的内存。

复用 Omni 专属优化

在集成 Higgs 的过程中,我们还把反复出现的全模态优化提取为可复用的框架模块。相似的计算模式不应在每个模型中重复实现,性能优化工作应当位于运行时之中,而不是分散在各个模型专属的流水线里。

  • 对 CUDA Graph 友好的反馈 runner。Higgs 的 tts_engine 默认启用 CUDA Graph 捕获,并使用专为 AR + 多码本反馈循环设计的模型 runner。该 runner 负责静态缓冲区分配、延迟捕获,并对 Python 侧的 gather/scatter 格外小心。同一 runner 接口还支持 Qwen3-Omni、Fish Audio S2-Pro 及其他 SGLang-Omni 模型的单步前瞻异步解码。
  • 流式声码器调度器。Higgs、Qwen3-Omni、Fish Audio S2-Pro 及相关模型都需要类似的流式音频生命周期:初始化每个请求的状态、累积传入的 code 块、一旦有足够上下文就立即输出音频窗口、在 stream_done 时刷新,并向流式客户端返回紧凑的最终载荷。编解码器和分窗逻辑仍因模型而异,但服务生命周期是共享的。

有了这些抽象,新的多阶段模型不再需要一套散落着 if-else 分支的专属流水线。开发者只需将模型划分为调度段、选择合适的调度器和模型 runner 钩子、声明拓扑与内存契约,然后让框架处理路由、流式传输、数据搬运、进程放置以及阶段级资源隔离。

不断壮大的多阶段模型生态

Higgs 现已加入 SGLang-Omni 已支持的 TTS 和全模态模型行列:

模型类型备注
Higgs Audio v3 TTSTTS声音克隆、流式、100 种语言
Fish Audio S2-ProTTS声音克隆、流式
Voxtral TTSTTS命名音色、流式、9 种语言
Qwen3-TTSTTS声音克隆、流式、10 种语言
MOSS-TTSTTS声音克隆、流式传输、31 种语言
Qwen3-Omni全模态文本/图像/音频/视频 → 文本 + 音频
Ming-Omni全模态流式 TTS
LLaDA2.0-Uni多模态文本 + 图像理解与生成

这些模型从外部看各不相同,但在推理系统层面,它们面临同一个底层问题:如何将多个异构阶段组织成一条稳定、高效且可扩展的生成流水线。这正是为什么在 SGLang-Omni 上接入 Higgs 主要只是声明其流水线(preprocessing → audio_encoder → tts_engine → vocoder)并添加模型特定的钩子,而无需从零构建一套服务栈。

端到端优化 Higgs

除了框架层面的抽象之外,我们还对 Higgs 流水线进行了端到端优化。主要部分列在下面;实现细节和进展记录在 Higgs 优化路线图(#478) 和 代码仓库 中。

性能

我们在完整的 Seed-TTS EN 数据集上评估 Higgs(N=1088每次运行)。客户端对--max-concurrency与配置为以下参数的 Higgs 服务器进行扫描测试:max_running_requests=16、bf16,并启用 CUDA Graph。每一行报告的是3 次运行的均值在1× H100.

并发吞吐量(请求/秒)平均延迟RTF(每请求)audio_s/s
11.62617 ms0.1476.89
22.70742 ms0.18011.37
45.45733 ms0.17722.84
88.91898 ms0.21737.38
1614.741079 ms0.26261.84
  • 并发数:在途客户端请求的最大数量(--max-concurrency)。
  • 吞吐量(req/s):已完成的请求数除以基准测试的总挂钟时间。
  • 平均延迟:每个请求的平均端到端时间,从发送请求到接收完整响应。
  • RTF(每请求):每个请求的处理时间与生成音频时长的平均比值。低于 1 的数值表示比实时更快。
  • audio_s/s:生成的音频总秒数除以基准测试的总挂钟时间。

要复现这些结果,请按照基准测试脚本操作。

自己动手试试

详细说明见SGLang Omni Higgs Cookbook。下面的命令展示了搭建可用环境的最短路径。

安装与部署

docker pull lmsysorg/sglang-omni:dev
docker run -it --gpus all --shm-size 32g --ipc host --network host --privileged \
  lmsysorg/sglang-omni:dev /bin/zsh

git clone git@github.com:sgl-project/sglang-omni.git && cd sglang-omni
uv venv .venv -p 3.12 && source .venv/bin/activate
uv pip install -v -e .
hf download bosonai/higgs-audio-v3-tts-4b

sgl-omni serve \
  --model-path bosonai/higgs-audio-v3-tts-4b \
  --port 8000

零样本合成

curl -X POST http://localhost:8000/v1/audio/speech \
  -H "Content-Type: application/json" \
  -d '{"input": "Hello, how are you?"}' \
  --output output.wav

参考输出:

对于声音克隆,我们建议同时提供参考音频和参考文本(text),这通常能提升克隆质量:

curl -X POST http://localhost:8000/v1/audio/speech \
  -H "Content-Type: application/json" \
  -d '{
    "input": "Have a nice day and enjoy south california sunshine.",
    "references": [{
      "audio_path": "https://sgl-project.github.io/sglang-omni/_static/audio/male-voice.wav",
      "text": "Hey, Adam here. Let'\''s create something that feels real, sounds human, and connects every time."
    }],
    "temperature": 0.8,
    "top_k": 50,
    "max_new_tokens": 1024
  }' \
  --output output.wav

参考输入:

参考输出:

流式传输

将 "stream": true 设置为通过 Server-Sent Events 接收音频。客户端可以在完整生成结束之前就开始播放,因为声码器会增量输出 WAV 数据块。-N 标志会禁用 curl 的输出缓冲,使 SSE 事件在到达时即时打印:

curl -N -X POST http://localhost:8000/v1/audio/speech \
  -H "Content-Type: application/json" \
  -d '{
    "input": "Get the trust fund to the bank early.",
    "references": [{
      "audio_path": "https://sgl-project.github.io/sglang-omni/_static/audio/male-voice.wav",
      "text": "Hey, Adam here. Let'\''s create something that feels real, sounds human, and connects every time."
    }],
    "stream": true
  }'

如需原始 PCM 流式传输(非 SSE JSON),请参阅 Higgs TTS cookbook。

参考输出:

内联控制 token

控制 token 可以直接嵌入 input 字段中,并且不同类别的 token 可以组合使用。一般来说,将情感、风格、语速、音高或富有表现力的韵律等表达类 token 放在每一轮的开头;将 <|prosody:pause|> / <|prosody:long_pause|> 放在需要停顿的位置;并将每个 <|sfx:…|> 与其后紧跟的匹配拟声词配对。完整目录见 cookbook。

情感:愉悦 + 笑声

curl -X POST http://localhost:8000/v1/audio/speech \
  -H "Content-Type: application/json" \
  -d '{
    "input": "<|emotion:amusement|><|prosody:expressive_high|>Wait, wait, that was kind of hilarious. <|sfx:laughter|>Hehe, no, seriously, I was not ready for that.",
    "temperature": 0.8,
    "top_k": 50,
    "max_new_tokens": 1024
  }' \
  --output output.wav

参考输出:

情感:愤怒 + 喊叫

curl -X POST http://localhost:8000/v1/audio/speech \
  -H "Content-Type: application/json" \
  -d '{
    "input": "<|emotion:anger|><|style:shouting|>No, that is not okay! We cannot ship something that sounds broken, delayed, and unnatural.",
    "temperature": 0.8,
    "top_k": 50,
    "max_new_tokens": 1024
  }' \
  --output output.wav

参考输出:

情感:惊讶 + 尖叫

curl -X POST http://localhost:8000/v1/audio/speech \
  -H "Content-Type: application/json" \
  -d '{
    "input": "<|emotion:surprise|><|prosody:pitch_high|><|sfx:screaming|>Ah! Wait, I almost forgot! Higgs Audio v3 also supports over one hundred languages.",
    "references": [{
      "audio_path": "https://sgl-project.github.io/sglang-omni/_static/audio/ref_voice.wav",
      "text": "It was the night before my birthday. Hooray! It’s almost here! It may not be a holiday, but it’s the best day of the year."
    }],
    "temperature": 0.8,
    "top_k": 50,
    "max_new_tokens": 1024
  }' \
  --output output.wav

参考输出:

组合示例:

下面的示例在一段高考风格的英语听力对话中,将情感、音效和韵律 token 组合在一起,对话发生在两位说话人之间:

命令

第 1 部分——她询问缺课的事:

curl -X POST http://localhost:8000/v1/audio/speech \
  -H "Content-Type: application/json" \
  -d '{
    "input": "<|emotion:contemplation|>Hi David, I missed the biology class today because I caught a cold. <|sfx:cough|>Ahem! Sorry, Could you tell me what the teacher covered?",
    "references": [{
      "audio_path": "https://sgl-project.github.io/sglang-omni/_static/audio/female-voice.wav",
      "text": "By repeating what students say, teachers can demonstrate that they are listening. By extending what students say."
    }],
    "temperature": 0.8,
    "top_k": 50,
    "max_new_tokens": 1024
  }' \
  --output part1.wav

第 2 部分——他解释讲了什么内容:

curl -X POST http://localhost:8000/v1/audio/speech \
  -H "Content-Type: application/json" \
  -d '{
    "input": "<|emotion:enthusiasm|>Sure, no problem! We learned how plants make food through photosynthesis, and <|prosody:long_pause|> there will be a quiz this Friday.",
    "references": [{
      "audio_path": "https://sgl-project.github.io/sglang-omni/_static/audio/male-voice.wav",
      "text": "Hey, Adam here. Let'\''s create something that feels real, sounds human, and connects every time."
    }],
    "temperature": 0.8,
    "top_k": 50,
    "max_new_tokens": 1024
  }' \
  --output part2.wav

第 3 部分——她向他道谢:

curl -X POST http://localhost:8000/v1/audio/speech \
  -H "Content-Type: application/json" \
  -d '{
    "input": "<|emotion:relief|>Oh, that is really helpful. Thank you!",
    "references": [{
      "audio_path": "https://sgl-project.github.io/sglang-omni/_static/audio/female-voice.wav",
      "text": "By repeating what students say, teachers can demonstrate that they are listening. By extending what students say."
    }],
    "temperature": 0.8,
    "top_k": 50,
    "max_new_tokens": 1024
  }' \
  --output part3.wav

拼接(各行之间间隔约 0.6 秒):

ffmpeg -y \
  -i part1.wav -f lavfi -t 0.6 -i anullsrc=r=24000:cl=mono \
  -i part2.wav -f lavfi -t 0.6 -i anullsrc=r=24000:cl=mono \
  -i part3.wav \
  -filter_complex "[0:a][1:a][2:a][3:a][4:a]concat=n=5:v=0:a=1" \
  gaokao_listening.wav

参考输出:

演示

你也可以用一条命令同时启动后端和浏览器 UI:

CUDA_VISIBLE_DEVICES=0 ./playground/higgs/start.sh

路线图

对于 SGLang-Omni 而言,端到端地服务 Higgs 是一个重要的里程碑,但这并不是终点。我们正在继续推进多个方向:

  • 跟进上游 SGLang(#658):迁移到最新的 SGLang,使 AR 骨干网络能够持续继承主线 SGLang 的改进,包括 CUDA/PyTorch 构建更新、kernel 改进、调度以及投机解码。
  • 按模型重构(#661):延续 RFC #188 的方向,提供更清晰的按模型抽象。我们希望新模型的集成看起来更像是"声明拓扑并接入 hooks",而不是在整个框架中到处添加特殊分支。
  • 端到端 RL(#663):使用 SGLang-Omni 作为 omni 和 TTS 模型的高吞吐 rollout 后端,并带有明确的奖励目标,进一步连接服务与后训练。

跨节点多阶段流水线以及更完整的扩散阶段支持也在推进中。随着阶段抽象、统一调度器接口、分层通信以及跨阶段内存预算已经就位,这些能力可以在同一框架内生长,而无需再引入另一套服务栈。

加入我们

SGLang-Omni 仍在快速演进。我们希望它成为多阶段生成模型的通用推理基础:新模型不应需要从零搭建服务栈,也不应把特例逻辑散落在十几个文件里。它们应当能够以清晰的阶段、拓扑声明和模型专属钩子来表达,而调度、通信、内存管理和流式处理则由框架负责。

如果你对多阶段推理、TTS、全模态模型、多模态生成、推理系统或 RL rollout 后端感兴趣,我们非常乐意与你合作。无论你的强项是 kernel、调度、通信、模型接入还是基准测试,都欢迎贡献和讨论。

致谢

SGLang-Omni — Haoguang Cai、Shangming Cai、Qiujiang Chen、Jiaxin Deng、Wenyao Gao、Yifei Gao、Jingwen Gu、Yitong Guan、Chenchen Hong、Hao Jin、Xinli Jing、Shenggui Li、Junrong Lin、Xinyu Lu、Yuan Luo、Ratish Palanisamy、Mick Qian、JinTao Qu、Shuai Shi、Chao Wang、Richard Wang、Shuwen Wang、Zijie Xia、Yuhao Yang、Xuesong Ye、Yue Yin、Fan Yin、Gaokai Zhang、Xiaoyu Zhang、Yichi Zhang、Chenyang Zhao。

Higgs Audio v3 TTS(Boson AI) — Mu Li、Alex Smola、Lindsey Allen。Silin Meng、Ke Bai。Ruskin Raj Manku、Huapeng Zhou、Dongming Shen、Jonah Mackey、Erik Li、Weisu Yin、Yizhi Liu、Xinyu Wang、Hao Yu。

了解更多

来源:LMSYS:Blog(Chatbot Arena 团队) · lmsys.org