全双工系列前三篇拆了三个系统:Moshi 用 17 条并行流改架构,LSLM 用双通道融合做机制研究,OmniFlatten 用分块摊平改数据。三家路数各异,却共用一个地基:把语音离散成 token、塞进 LLM 的词表。这篇拆的两个新系统,都开始拆这块地基——

  • SALMONN-omni(清华 + 字节跳动 + 剑桥,2025 年 5 月,arXiv:2505.17060):第一个词表里完全没有音频 codec 的独立全双工语音 LLM;
  • Covo-Audio(腾讯,2026 年 2 月,arXiv:2602.09823):7B 端到端工业级系统,输入侧回归连续特征、输出侧保留离散 token 的混合双流,并把全双工直接做进预训练。

一个是学术界的彻底派,一个是工业界的折中派,但两家在关键处殊途同归。合在一篇里拆,比分开更能看清这条新趋势。

一、旧地基的裂缝:智能税

先算 codec 路线欠下的账。把语音 token 塞进词表后,模型必须用同一套参数同时精通两种「语言」,代价有三:

  1. 知识退化。 Moshi 从 Helium 的 MMLU 54.3 掉到 49.7——这还是靠一半训练步穿插纯文本才守住的;OmniFlatten 的 0.5B 版本对话评分距同款纯文本模型差了两分多。SALMONN-omni 论文里补了一刀:在口语问答上,Moshi 的成绩(Llama Questions 60.8%)远低于同期靠文本智能吃饭的半双工模型。
  2. 数据饥渴。 弥合模态鸿沟要海量配对数据——Moshi 用了 700 万小时,某些半双工系统(如 Kimi-Audio)报到 1300 万小时。
  3. 对齐枷锁。 Moshi 的内心独白需要 Whisper 词级时间戳把文字铺上时间轴,Covo-Audio 点名批评了这类「词级细对齐」的脆弱:强制对齐一错,数据就脏。

裂缝的根源在于一个不对称:LLM 的智能长在文本表示上,语音 token 是外来户。两篇新工作给出的修法方向一致——离 LLM 的文本世界越近越好,能不离散就不离散。

codec 全进全出Moshi · OmniFlatten离散 token离散 token词表 =文字 + 音频(词级对齐)智能税高:MMLU 掉分、百万小时级数据饥渴混合双流Covo-Audio(2026)连续特征离散 token耳朵保真嘴巴好训(短语/句级交错)800B 纯文本 + KL 蒸馏保卫文本智能无 codecSALMONN-omni(2025)连续嵌入连续嵌入词表 = 文字+ 状态 token(零音频 token)冻结主干 + LoRA,小数据保住智能离 LLM 的文本世界越来越近,智能税越交越少离散(过量化)连续(免量化)
从「codec 全进全出」到「无 codec」的谱系:Moshi/OmniFlatten 把离散 token 塞进词表;Covo-Audio 输入侧改连续特征、输出保留离散 token;SALMONN-omni 两侧都用连续嵌入,词表里只有文字和状态 token

二、SALMONN-omni:把 codec 彻底请出去

2.1 三件套:编码器、LLM、合成器,全靠嵌入连接

SALMONN-omni 的架构宣言写在标题里:standalone(单模型独立完成全双工,不像 VITA、Freeze-Omni 那样跑两个 LLM 进程轮班)、without codec injection(词表零音频 token)。三个部件用隐藏嵌入直连:

  • 流式编码器:32 层 Mamba(2048 维),从 Whisper-large-v3 蒸馏而来——老师是非流式的,学生用 L1 损失贴近老师的表示,天生流式(Mamba 的状态空间结构不需要回看)。输出 25 Hz 的连续嵌入。
  • LLM 主干:Llama-3-8B-Instruct,只加 LoRA(秩 32),主干冻结——文本智能被物理性地保护起来。
  • 流式合成器:CosyVoice2-0.5B 改造。原版吃文字,这里改成直接吃 LLM 的输出嵌入(过几层线性变换对齐),继承其「N 个文字 token 配 M 个语音 token」的交错生成。

听和说都不过量化关:输入是编码器嵌入,输出是给合成器的嵌入。LSLM 曾在听觉一侧用过连续特征,SALMONN-omni 把这个选择推广到了两侧。

环境流用户语音 + 噪声 + 回声助手流自己此前说的话(听见自己)Mamba 流式编码器(32 层)从 Whisper-large-v3 蒸馏 · 25 Hz 连续嵌入连续嵌入,不过量化Llama-3-8B-Instruct主干冻结 + LoRA(秩 32)——智能受保护每 80ms 时间块:读两路嵌入 → 出 1 个 tokenthinkshift文字文字词表 = 文字 + 状态 token,没有一个音频 tokenLLM 输出嵌入流式合成器CosyVoice2 改造:吃嵌入助手的声音节拍凑满 4 个文字 token →合成器一次出 12 个语音 token(480ms)开口延迟约 320ms自己的声音回灌为助手流(轮换成功率 70% → 90%)standalone:一个 LLM 同时听与说——不像 VITA / Freeze-Omni 需要两个 LLM 进程轮班
SALMONN-omni 架构:环境流(用户语音 + 噪声 + 自己的回声)与助手流(自己此前的输出)经 Mamba 流式编码器变成连续嵌入,按 80ms 时间块与文字 token 交错进入 LLM;说话状态下,LLM 的输出嵌入直接驱动流式合成器出声——词表里没有一个音频 token

2.2 时间感:80 毫秒一个块

没有 codec 的帧率作节拍器,时间感需要显式构造。SALMONN-omni 把对话切成 80ms 的时间块:每块先灌入环境流与助手流的语音嵌入,再让 LLM 生成一个文字 token。凑满 4 个文字 token,合成器一次产出 12 个语音 token——480ms 的声音。从决定开口到声音出来,延迟约 320ms。

注意「助手流」这个细节:模型把自己刚说过的话(含回声信息)也作为输入流灌回来。消融显示这一手非常关键——只有环境流时轮换成功率约 70%,加上助手流跳到约 90%。模型需要「听见自己」,才能判断自己说到哪了、该不该停。这与 Moshi 的多流建模思路一脉相承,只是从离散 token 换成了连续嵌入。

2.3 think 策略:状态切换就是下一个 token

全双工的灵魂问题——什么时候开口、什么时候闭嘴——SALMONN-omni 不设任何外挂预测器,而是让 LLM 用生成来回答。论文口号:your LLM is secretly a full-duplex predictor(你的 LLM 偷偷就是个全双工预测器)。具体试了两种:

  • 隐式 think:每个时间块基于语音嵌入预测一个状态 token(听 / 说),但状态 token 不回喂输入;
  • 显式 think:把 <think><shift> 混进输入序列——听的时候每块生成一个 <think>(模拟人「边听边琢磨什么时候接话」的过程),状态切换(双向)都用 <shift> 标记,生成完文字等语音追上时也用 <think> 占位。

显式完胜。AlpacaEval 上 GPT 评分 4.48 vs 3.73——差距不在架构,在于让状态决策成为自回归序列的一部分,与 LLM 的生成本能对齐;隐式方案的状态预测游离在序列外,少了从输出回到输入的反馈闭环。这和 LSLM 的 IRQ token、Moshi 的静音坍缩是同一哲学的第三次胜利:双工行为不是模块,是词表里的公民。

显式 think:状态 token 与文字 token 同在一条序列里(每格 = 80ms 时间块)用户语音用户在说安静(助手在说)用户再开口模型输出thinkthinkshift文字文字文字文字thinkthinkshiftthink听:每块一个 think说:每块一个文字 token,驱动合成器等语音追上文字凑满 4 个文字 token → 12 个语音 token(480ms 声音)显式 vs 隐式(AlpacaEval,GPT 评分):4.48 显式(token 回喂输入)3.73 隐式(状态游离在序列外)状态决策进入自回归闭环才有效
显式 think 策略的时间块序列:听的状态下每块生成 <think>;用户说完,模型生成 <shift> 切入说话状态,逐块产出文字 token 驱动合成器;说完等待时再以 <think> 占位,直到下一个 <shift> 切回听。状态 token 与文字 token 同场竞技,都是普通的下一个 token

2.4 用 RL 调教「被打断的分寸」

三阶段训练的前两步中规中矩(先接编码器练理解,再接合成器端到端练对话),第三步是首创:用 DPO 调全双工行为。SFT 之后的模型有个毛病——太容易被打断,精确率低,说明它对「这句插话是不是真的冲我来的」理解不深。DPO 训练过程还有个有趣的动态:模型先矫枉过正变得极度保守(几乎不让打断),随后逐渐回弹,最终超过 SFT 水平。

上下文相关打断(context-dependent barge-in)是这套评测里最有区分度的场景:插话内容与当前话题相关才算真打断,无关问题和第三人闲聊都该无视。再叠加回声干扰:让模型听到 1 倍音量的自己,SALMONN-omni 的打断判别 F1 保持 0.88,Moshi 0.80,而依赖外挂 VAD 的 Freeze-Omni 从 0.68 崩到 0.17——VAD 分不清回声和人声,独立建模的全双工可以。这是「standalone」价值最硬的一条证据。

2.5 成绩:既要智能,也要双工

自主轮换(predicted turn-taking,模型自己决定何时开口)下,SALMONN-omni 全面刷新开源全双工的纪录:Llama Questions 79.3%、TriviaQA 63.6%,对 Moshi、Freeze-Omni 平均相对提升 35.9%。更狠的是 oracle 设定下和半双工大模型同台:总分压过 GLM-4-Voice、Qwen2.5-Omni、Kimi-Audio——后者训练数据多达 1300 万小时,而 SALMONN-omni 的训练量不过 ASR 48 万条 + 问答 73 万条 + 对话 8 万条的量级。冻结主干 + 连续嵌入,让它用零头的数据保住了文本智能。轮换时机预测同样领先:短促快问的 TriviaQA 上成功率 92.8%,Moshi 只有 37.1%。

三、Covo-Audio:工业版的折中与野心

Covo-Audio 是腾讯的 7B 端到端音频语言模型(LALM)技术报告,野心覆盖语音理解、音频推理、共情对话、全双工的全家桶。这里聚焦与本系列相关的主线:它怎么处理离散与连续之争,以及全双工怎么落地。

3.1 混合双流:连续进,离散出

Covo-Audio 没有 SALMONN-omni 那么决绝,选了不对称方案:

  • 输入侧连续:Whisper-large-v3 编码(50 Hz)后,过一个三级降采样 adapter 压到 6.25 Hz——每秒才 6 个多向量,极其紧凑,却保留了完整的声学细节。论文说这是「更高效、更无损地感知用户表达与意图」的通路。
  • 输出侧离散:自研 tokenizer(WavLM-large + 单层 VQ,16384 码本、25 Hz),训练目标是 ASR 损失 + TTS 重建损失 + 音高损失三合一——语义声学一肩挑,韵律显式保底。解码走流匹配 + BigVGAN 两级还原 24 kHz 波形。

为什么不对称?听的一侧,离散化是纯损失(信息丢了还要多训一个「翻译层」);说的一侧,离散 token 是自回归生成的自然接口,配上文字交错(下述)就能稳住语义。耳朵要保真,嘴巴要好训——这个分工日后很可能成为常识。

3.2 三模态分层交错:预训练就把账算清

Covo-Audio 的底座是 Qwen2.5-7B-Base,预训练两阶段共 2T token(音频池 800 万小时、文本池 3T token)。配方里两个设计值得说:

  • 三模态交错。序列里同时出现连续特征 a_c、离散 token a_d、文字 t 三种元素,组合成 a_c→t→a_d(链式)和 a_c→t|a_d(文字与离散 token 耦合)等模式——连续、离散、文字三个表示空间在预训练里就互相校准,而不是留到微调再补。
  • 分层交错。GLM-4-Voice、Moshi 式的词级交错对强制对齐的错误极其敏感;Covo-Audio 改在短语级 + 句级两个粒度交错,保住长句的语义完整性和韵律连贯,也顺便甩掉了词级时间戳的依赖。

同样重要的是「智能保卫战」的配比:纯文本任务占了预训练的 800B token,后训练里还引入 KL 在线蒸馏——用更强的文本 LLM 的 top-20 logits 当软目标,把文本智能钉死在原地。Moshi 用「一半文本批次」交的税,Covo-Audio 用蒸馏交,手段升级但问题意识相同。

3.3 原生全双工:不改多阶段课程,直接进预训练

全双工版 Covo-Audio-Chat-FD 的构建方式是对 OmniFlatten 的一次正面翻案。OmniFlatten 用四阶段课程渐进逼近全双工;Covo-Audio 反其道:把全双工数据(5B token)直接放进预训练,微调时半双工、全双工数据一锅端、一步训成——论文明说「比多阶段渐进方案效果更好」。全双工从「后天补课」变成「先天能力」,前提是预训练阶段就见过双流交错的世界。

排布上它是 OmniFlatten 的直系后代:用户流与模型流分块交错,块比 1:4(输入特征 6.25 Hz、输出 token 25 Hz,每块 0.16 秒);模型块内先出 1 个文字 token 再出 4 个语音 token——文字打头稳语义,块级内心独白。状态控制则和 SALMONN-omni 神同步:听的时候持续输出 THINK,用户说完立刻 SHIFT 进入说话态,边说边听,检测到打断(或说完)就吐 BREAK 回到听——状态机的三个态,三个词表里的 token

块交错序列(每块 0.16 s;用户块 1 个连续特征 : 模型 1 文字 + 4 语音 token)用户块THINK用户块THINKSHIFT用户块语音 ×4用户块语音 ×4BREAK听:持续 THINK,等待合适的接话点边说边听:模型块内文字打头稳语义,同时继续收用户块打断/说完1:4 的由来:输入连续特征 6.25 Hz(每块 1 个),输出语音 token 25 Hz(每块 4 个);全双工数据直接进预训练,一步微调训成四项全双工行为成功率(%):停顿处理成了新战场轮换99.7 Covo-FD96.8 Moshi | 99.1 Freeze-Omni停顿处理97.6 Covo-FD53.2 Moshi | 51.2 Freeze-Omni——都在抢答打断96.81 Covo-FD附和93.89 Covo-FD(附和不打断,继续说)「该不该等」正在取代「等多久」成为全双工的新区分度
Covo-Audio-Chat-FD 的块交错与状态 token:用户流(连续特征块)与模型流(1 文字 + 4 语音 token 块)按 1:4 交错;听的状态持续输出 THINK,用户说完输出 SHIFT 切入说话态,被打断或说完输出 BREAK 切回听

3.4 生产细节:智能与音色解耦

技术报告里最「工业」的一笔:intelligence-speaker decoupling。痛点是换音色的成本——端到端模型里音色和对话能力纠缠在同一批合成对话数据里,想上新声线就得重造几千小时对话语料。Covo-Audio 的解法分两步:训练时用数千个随机说话人把「说什么」与「谁在说」解耦;想用某个高质量 TTS 音色时,把现成的 TTS 录音改造成伪对话格式(配上下文),且文本响应部分不算损失——声学上学到新音色,语义上不被 TTS 语料的非对话文本带偏。效果:换音色版(Covo-Audio-Chat-TTS)在 URO-Bench 上几乎无损。

对话能力本身也过硬:URO-Bench 中文赛道的四项推理、两项口语对话全部第一(压过 Qwen3-Omni 与 Fun-Audio-Chat),VCB-Bench 的指令遵循与全部三项鲁棒性(变声、噪声、内容扰动)登顶——7B 参数做到这个覆盖面,预训练配方功不可没。

3.5 全双工成绩:停顿处理成了新战场

全双工行为四项成功率:轮换 99.7%、停顿处理 97.6%、打断 96.81%、附和 93.89%。最扎眼的是第二项的对比:Moshi 53.2%、Freeze-Omni 51.2%——都在「用户话说一半停顿喘口气」时抢答,唯独 Covo-Audio-Chat-FD 能沉住气。

这个指标值得单独抬进系列的评价框架。轮换快不快(OmniFlatten 那篇的战场)之后,「该不该等」正在取代「等多久」成为区分度所在:抢答的模型响应时延再低也是负体验。Covo 自己也没满分——报告承认在含长停顿的测试集(GaokaoEval)上仍有早抢话导致的掉分,全双工版对话分数比半双工版略低的主要来源就是它。停顿是语义问题,不是声学问题:「嗯……让我想想」和「说完了」的区别,只有懂内容的模型才判得动——这恰是全双工模型相对外挂 VAD 的根本优势所在。

四、合流:五个共同选择

把两家放一起,对照出的共性比差异更有信息量:

维度SALMONN-omniCovo-Audio-Chat-FD
输入表示连续嵌入(Mamba 编码器)连续特征(Whisper + adapter,6.25 Hz)
输出表示连续嵌入 → 合成器离散 token(25 Hz)→ 流匹配解码
状态控制<think> / <shift>THINK / SHIFT / BREAK
节拍80ms 时间块,每块 1 文字 token0.16s 块,1 文字 + 4 语音 token
智能保卫冻结主干 + LoRA800B 纯文本 + KL 蒸馏
全双工习得SFT + DPO 行为调优预训练原生 + 一步微调
规模路线8B、小数据(百万条级)7B、大数据(800 万小时)

五个共同选择——输入不离散化、状态即 token、文字打头稳语义、显式保卫文本智能、RL 进场(SALMONN-omni 用 DPO 调双工分寸,Covo 用 GRPO 调音频推理)——勾勒出 codec 全盛期之后的新共识。放回综述的地图:双工决策依然在 token 流内部(L2 没有变),变的是流里装什么——离散 token 的垄断被打破了,钟摆从「一切皆 token」摆向「智能留在文本域,声学各回各家」。

而两家的分歧——输出侧要不要离散——本质是「合成器信不信得过嵌入」之争。SALMONN-omni 证明了嵌入直驱合成器可行;Covo-Audio 的离散输出则换来了与预训练语料(a_d 序列)的统一和生成接口的简洁。这个分歧大概率不会很快收敛,但输入侧的连续化,看起来已经赢了。

系列至此,五篇拼出了一条完整的弧线:Moshi 证明全双工能造出来(改架构),LSLM 讲清它为什么能行(拆机制),OmniFlatten 证明不改架构也行(改数据),SALMONN-omni 和 Covo-Audio 则开始回答下一个问题——怎么造得既会说话,又不变笨

参考资料