你大概经历过这样的场景:对着语音助手说「帮我查下明天去上海的高铁……嗯——就下午出发的」,刚停顿半秒它就开始播报;你连说「不对不对」,它充耳不闻,把整段答案念完才肯罢休。

这就是半双工(half-duplex):像对讲机,同一时刻只有一方能说话。而人类聊天是彻底的全双工(full-duplex):你还没说完我就「嗯嗯」附和,你犹豫时我等着,你跑题时我直接插话——换人说话的间隙通常只有 200–600 毫秒,还常常带重叠。

2024 年 5 月 13 日,OpenAI 的 GPT-4o 演示改变了行业预期:可以随时打断它,它顺滑地闭嘴让位。此后两年,Moshi、MinMo、OmniFlatten、SyncLLM、LSLM、FireRedChat……十几个系统打着 full-duplex 的旗号发布。但仔细一看,同一面旗下的能力天差地别:有的只是「喊出关键词才停」,有的靠前端检测器剪断自己,有的真的在同时听与说。

2026 年 6 月,一篇来自浙江大学、阿里 Qwen、腾讯混元与字节跳动的综述《A Survey of Full-Duplex Spoken Dialogue Systems》把这团乱麻理清了。它的判断很直接:混乱不是谁在吹牛,而是术语本身没说清三件事——

  1. 决策在哪里做? 「说还是不说、让不让位」这类双工决策,发生在模型栈的哪一层?→ 地图一:L0–L3 架构层级
  2. 该支持哪些交互? 打断、附和、犹豫、旁人插话……系统到底要应对哪几种情况?→ 地图二:T × I × R 交互本体
  3. 此刻在干什么? 任意一个瞬间,系统处于什么状态、凭什么切换?→ 地图三:五状态决策状态机

这篇博客沿着论文的思路,把三张地图和它背后的两笔实证账(数据瓶颈、评测落差)讲清楚。读完你会得到一个比「是/不是全双工」有用得多的提问框架。

一、先说清楚:全双工不是一个开关,是一族能力

先看一张对比图,建立直觉:

半双工:对讲机模式用户系统明天去上海的高铁…静音 ≈300 ms → 判定说完为您找到以下车次,第一趟是……(念完为止)不对不对!✕ 打断无效全双工:打电话模式用户系统「嗯嗯」附和今天的天气是晴,气温……等等,先说明天的≈200 ms 内让位好,明天上海……零间隙衔接✓ 附和不打断✓ 抢话即让位✓ 说完即接、不等静音时间
半双工像对讲机:静音判停、播报期间打断无效;全双工像打电话:附和不打断、抢话即让位、衔接近乎零间隙

传统语音助手的工作方式是:你说话,它攒着;你停顿约 300 毫秒,前端的语音活动检测(VAD,Voice Activity Detection)判定「你说完了」,它才开始理解和回答。这套逻辑决定了它有三个天生缺陷:

  • 它分不清「你说完了」和「你在想」——停顿超过阈值一律视为交出话语权;
  • 它播报时听不见你——要么完全不听,要么把任何人声(包括你的「嗯嗯」和旁人的说话)都当成打断;
  • 它的回应永远慢半拍——必须先等出一段静音,才敢启动回答。

全双工要修的正是这三个缺陷,所以它从来不是「能被打断」一个开关,而是一族能力:既要打得断,也要打不断(附和时)、还要不该打时不抢话(犹豫时)。后面地图二会把这族能力精确地拆成六个「试金石」场景。

二、预备知识:声音怎么进大模型

在读三张地图之前,需要一点底层背景:语音是怎么变成大语言模型能处理的东西的。这直接决定了后面 L2 层各家系统的长相。

2.1 三条路线

  • 离散 token 路线:把波形量化成整数序列,LLM 像预测文字一样预测它。这是最多人走的路,因为完全复用现成的 LLM 训练与推理栈——Moshi、OmniFlatten、SyncLLM、Mini-Omni、GLM-4-Voice 都在这条路上。
  • 连续 embedding 路线:流式语音编码器(如 Whisper 编码器)输出连续向量,经投影层对齐进 LLM 的隐空间。保留的声学细节更多,LLaMA-Omni 是代表;SALMONN-omni 在 2026 年把这条路带进了全双工。
  • 文字打头、语音跟尾:用文字 token 流驱动生成,音频 token 紧随其后。Moshi 的「内心独白」(Inner Monologue)是最典型的实例:文字轨提供语义骨架,音频轨负责声学落地。

2.2 三代音频 tokenizer

离散路线的核心部件是音频 tokenizer,它经历了三代演进:

  • 第一代:语义单元(2020–2021,HuBERT、wav2vec 2.0 等)。自监督编码器的隐状态做 k-means 聚类,得到约 25–50 Hz 的离散单元。忠于「说了什么」,丢掉「怎么说的」——重建不出说话人音色和韵律。适合理解,不适合开口。
  • 第二代:神经编解码器(SoundStream、EnCodec、DAC)。把 token 化当成信号压缩问题:编码器–解码器加残差向量量化(RVQ),典型配置 75 Hz、每帧 8 本码书,1–3 kbps 高保真重建。声学忠实但语义弱——八本码书没有主次,LLM 得先学声学细节才摸到语义。
  • 第三代:语义–声学融合(SpeechTokenizer、Mimi、CosyVoice tokenizer)。在 RVQ 里强加「语义先行」的顺序:第一本码书蒸馏成语义内容(Mimi 从 WavLM 蒸馏),其余码书装声学残差。第一本码书的行为近似一个文字 token——LLM 可以用和文字完全一样的管线读写语音。

Mimi(Moshi 用的 codec)是第三代的标杆:12.5 Hz 帧率、8 本码书、总共 1.1 kbps——低到一个自回归 Transformer 能实时生成语音。论文的判断是:没有第三代 tokenizer 的工程成熟,就没有 2024 年底那波 token 级全双工系统。

2.3 一帧 8 个 token 的麻烦

RVQ 带来一个直接后果:每帧音频出 K 个 token 而不是 1 个。以 Mimi 为例 K = 8:10 秒音频在 12.5 Hz 下是 125 帧,天真地按时间串行摊开就是 1000 个 token——序列长度和推理开销都乘以八。怎么在自回归序列里安放这 K 本码书,恰好催生了 L2 层的三种主流长相(第四节细讲):Moshi 用一个小的深度 Transformer 在每个时间步一口气出 8 个;OmniFlatten 顺着时间摊平;SyncLLM 把每个时间块的 token 打包成定长块。

2025–2026 年还有两个新变量:Kimi-Audio 用流匹配(flow matching)的流式解码器把 LLM 的输出侧从 RVQ 解放出来;SALMONN-omni 干脆全程不用 codec。它们都在拓宽后面 L2 的设计空间。

三、简史:三个时代,两次转折

时代一 · 模块化流水线(2018–2023)ASR → NLU → 对话管理 → NLG → TTS,静音 ≈300 ms 判停Google Duplex(2018 电话订座)· 蚂蚁外呼三模块(2021)· 达摩院 pVAD(2022)转折一(技术):语音变成 tokendGSLM 双流无文字建模 · SpeechGPT时代二 · 端到端浪潮(2022–2024)波形进 Transformer 成为可能,端到端语音对话模型井喷首波复现(Mini-Omni、LLaMA-Omni、GLM-4-Voice)按严格标准仍是半双工转折二(商业):GPT-4o 演示(2024.5)「随时可打断」成为产品预期时代三 · 全双工爆发(2024.8 至今)LSLM 与 Moshi 一月双至,重置「学出来的全双工」预期设计空间碎裂:OmniFlatten · SyncLLM · Mini-Omni2 · Freeze-Omni;MinMo 开创 L1(2025)模块化回潮:FireRedChat · FlexDuo · X-Talk(2025 底);工业并行流:Fun-Audio-Chat · Covo-Audio(2026)
全双工语音对话的三个时代:模块化流水线、端到端浪潮、全双工爆发,分界线是「语音变 token」与 GPT-4o 演示

时代一:前 LLM 的模块化流水线(2018–2023)。 全双工不是新需求。学术根基可以追到 1974 年 Sacks、Schegloff 和 Jefferson 那篇形式化「轮流说话」(turn-taking)的语言学论文——至今仍是《Language》期刊被引最多的文章;Skantze 2021 年把轮次预测重构成连续预测问题,替代了「等静音」的 VAD 阈值法。工业侧,2018 年的 Google Duplex 打电话给理发店和餐厅订位,语气和停顿逼真得像真人,六年之前就立下了「AI 能接得住一通电话」的大众预期;蚂蚁集团 2021 年(语音感知 VAD + 轮次结束分类器 + 应答规划器)和阿里达摩院 2022 年(说话人条件 pVAD、把「说完了吗」变成可学习的二分类)把这套三模块流水线部署到了生产规模。这个时代确立了 VAD + EoT + 对话管理器的蓝图——后来所有 LLM 时代的模块化系统都是它的翻新。

转折一(技术):语音变 token。 离散音频 tokenizer 让波形能像文字一样喂进 Transformer。2022 年的 dGSLM 最早示范:两条并行语音流、完全不用文字联合建模,在 2000 小时 Fisher 电话语料上学出了轮换节奏甚至笑声——但它不会听指令,是架构先声而非产品。

转折二(商业):GPT-4o(2024 年 5 月)。 演示中用户随时打断、模型顺滑让位,「端到端语音模型可以同时听和说」成了大众预期。有意思的是,论文按严格标准审视首波开源复现(Mini-Omni、LLaMA-Omni、GLM-4-Voice),结论是它们仍然是半双工:靠关键词或前端 VAD 触发打断,解码器一次只出一路音频。

时代三:全双工爆发(2024 年 8 月至今)。 LSLM(2024 年 8 月)和 Moshi(7 月演示上线、9 月放出权重与技术报告)相隔一个月,重新定义了「学出来的全双工」;六个月内设计空间就碎裂成多个流派(OmniFlatten、SyncLLM、Mini-Omni2、Freeze-Omni);2025 年 MinMo 开创隐状态层做法,年底模块化路线强势回潮(FireRedChat、FlexDuo,以及上海交大 X-LANCE 的立场论文 X-Talk:模块化在时延、可解释性和工程成本上依然能打);2026 年工业级并行流系统(Fun-Audio-Chat、Covo-Audio)与各种非主流骨干(DuplexMamba、无 codec 的 SALMONN-omni)继续涌现。这个时代远未定局。

四、地图一:双工决策在哪一层做(L0–L3)

第一张地图回答 where。先定义「双工决策」:每个瞬间,系统都要在听、说、等、双讲之间做选择。审视这个决策发生的位置,所有已发表系统恰好落进四层:

L0 模块级场外裁判VADEoT对话管理器 ★LLM(只管内容)TTSFireRedChat · FlexDuoL1 隐状态级贴身读心音频编码器LLM隐状态 h_t预测器 ★语音解码器MinMo · Freeze-Omni(Thinker–Talker 同形)L2 token 级决策织进生成LLM 解码器UAtoken 级决策 ★Moshi · OmniFlattenSyncLLM · LSLMCovo-Audio · SALMONN-omniL3 表示级共享潜空间共享潜变量 z_t用户与助手不可分★ 决策溶入潜空间尚无已发表系统(开放前沿)★ 双工决策点:逐层深入模型内部
L0–L3 架构层级:星标是双工决策点,从 LLM 之外的模块(L0)迁移到读隐状态的旁挂预测器(L1)、再到 token 流内部(L2),最终指向尚无人实现的共享潜空间(L3)

L0 模块级:场外裁判

决策由 LLM 之外的轻量模块做:VAD 管「有没有人声」,轮次结束检测器(EoT,End-of-Turn)管「说完了没」,对话管理器管调度,LLM 只负责生成内容。这是 Google Duplex 蓝图的直系后代——LLM 时代的 L0 系统继承了 2021/2022 年那套工业拓扑,只是把生成器换成了大模型。

小红书的 FireRedChat 是最完整的当代样本:三个串行模块驱动一切转移。pVAD 带说话人条件通道,专门压制背景噪声和旁人说话;EoT 分类器在流式 ASR 的部分转写上判断「说完没有」,中文准确率约 96%;打断响应很快(90 分位约 170 毫秒)。但代价也在账上:从用户说完到系统首包发声的端到端时延,中位数约 2.34 秒。

这暴露了 L0 的结构性天花板:决策模块本身可以在约 100 毫秒内开火,但下游「LLM 前向 + TTS 首块解码」把响应时延推到约 500 毫秒起步。想更快,决策就得搬进模型——这是 L1 的物理动机。

值得强调:L0 不是遗产,而是活跃阵地。FlexDuo 和 SoulX-Duplug 把双工控制做成可插拔模块(后者能直接挂在冻结的 LLM 上);Easy Turn 和 FastTurn 是 2026 年的专职轮次检测器,后者融合韵律与流式 CTC 部分转写,在用户话没说完时就能出判断,在噪声和重叠下比纯声学 VAD 或纯文本 EoT 都稳。

L1 隐状态级:贴身读心

保留模块化分工,但把 LLM 的隐状态喂给决策模块——复用大模型的语义理解力,而不是在它门外自立门户。

MinMo(阿里 FunAudioLLM 团队,2025)是开创者:主干是语音编码器 + Qwen LLM + 语音合成通路,旁边挂一个全双工预测器(Full-Duplex Predictor)——只是个单层 Transformer,实时读隐状态输出二元决策。它有两种工作模式:系统沉默时判断「现在该接话吗」(区分正常交接与用户犹豫),系统说话时判断「这是抢话还是附和」。训练靠 4000 小时对话混合数据(3000 真实 + 1000 模拟)加启发式自动标注。速度账:语音转文字时延约 100 毫秒,但全双工决策链路理论约 600 毫秒、实测约 800 毫秒。

Freeze-Omni 展示了 L1 的低成本形态:LLM 完全冻结,只训练语音出入口和双工阶段(6 万条多轮问答、约 8 张 GPU)。

论文在这里有个漂亮的观察:L1 是个「结构吸引子」。Qwen2.5/3.5-Omni 的 Thinker–Talker(Thinker 出隐状态、Talker 读隐状态流式出语音)和 Step-Audio R1.1 的双脑设计,压根没打全双工的旗号——目标是流式的文字加语音同出——但架构形状与 MinMo 完全同构。不同团队、不同产品目标,殊途同归到同一个形状,说明「外挂模块读 LLM 隐状态」是 LLM 语音系统的一个自然稳定点。

L2 token 级:决策织进生成本身

彻底消灭显式判停模块——「此刻该不该出声」直接编码在 token 序列的生成过程里,模型预测下一个 token 时顺带决定了自己的行为。第 2.3 节那个「一帧 8 个 token」的约束,在这里分化出几个子流派:

约束的来源:一帧 = K 个 token80 ms 一帧码书 1:语义(从 WavLM 蒸馏)码书 2–8:声学残差Mimi:12.5 Hz × 8 本码书 = 1.1 kbps10 秒音频 = 125 帧 × 8 = 1000 个 token这 8 个怎么排?→ 三种子设计并行多流(Moshi)文字用户助手深度 Transformer 一步出整帧每 80 ms 三流同出:时刻在预测用户 → 无需 VAD摊平单流(OmniFlatten)文字用户助手虚线格:silent_speech_token四条流摊进一条序列,「该沉默」显式写成 token,标准 GPT 架构零改动分块轮转(SyncLLM)S0A 块U 块S1A 块U 块……160–240 ms助手块与用户块交替预测,同步标记对齐真实时间;块内无法响应 → 表观全双工
同一个 K-token 约束下的三种 L2 排布:Moshi 的并行多流(时间 + 深度双 Transformer)、OmniFlatten 的摊平单流、SyncLLM 的定长分块轮转
  • 并行多流(Moshi)。每个 80 毫秒的帧,模型同时吐三样东西:文字 token(内心独白)、对用户音频的预测、自己的音频 token;深度 Transformer 在每个时间步内部把 8 本码书一次出齐。妙处在于:因为它时时刻刻都在预测用户那条流,「用户开始说话了」这件事被自然吸收进建模本身——不需要任何 VAD 或 EoT 模块;想沉默时,把自己的音频流坍缩成静音 token 即可。理论时延 160 毫秒,实测约 200 毫秒。训练配方本身就是历史文献:约 700 万小时公开音频预训练 → 说话人分离数据驱动的多流后训练 → Fisher 语料全双工微调 → 自家 TTS 合成对话的指令微调。
  • 摊平单流(OmniFlatten)。把四条流(用户/助手 × 语音/文字)摊平进一条序列,用专门的 silent_speech_token 表示「此刻该沉默」,然后用一个不改架构的标准 GPT 训练。它证明了全双工行为不需要定制解码器——精心的 token 设计就够。
  • 分块轮转(SyncLLM)。把时间切成 160–240 毫秒的定长块,助手块和用户块在单条序列里交替预测,周期性同步标记 [S0]/[S1] 对齐真实时间。软肋很本质:状态切换只能发生在块边界,块内无法对用户当前的音频做因果响应——论文把它定为「表观全双工」(apparent,相对 substantive)的典型样本。
  • 通道融合(LSLM)。说话通道是 token 化的解码器 TTS,聆听通道是流式自监督编码器,两者逐层融合(论文比较了早/中/晚三种融合位置,中层最优)。

这一层还有几个值得记住的点:Mini-Omni2 的打断靠喊 “Stop Omni” 关键词触发(内部用 irq/n-irq 状态 token),关键词之外对用户音频没有因果响应——典型的表观全双工;Covo-Audio 把决策直接暴露在输出流上(听的时候持续吐 THINK token,开口时打一个 SHIFT,收尾打一个 BREAK);DuplexMamba 用 Mamba 换掉 Transformer,证明 L2 模式与注意力机制无关;SALMONN-omni 去掉 codec 全程用连续 embedding,但决策仍在逐 token 的输出层——L2 不要求「离散」,只要求「决策在 token 流上」。

L3 表示级:还没人到达的一层

把用户和助手编码进同一个连续潜变量,感知与生成之间不再有 token 边界——「双讲」不再是需要处理的特殊情况,而是潜空间的原生区域。这一层目前是空的,论文给了三个原因:离散 tokenizer 生态太成熟(换成连续表示等于放弃「音频当语言」的全部管线复用);连续潜变量的流式自回归生成还不够快;甚至连 L3 该是什么数学形式都没有共识。第九节回来讲三条候选路线。

一览与一个教训

决策位置可达状态(五状态机)代表系统
L0 模块级LLM 之外的调度模块双讲态不可达,观望态也受限FireRedChat、FlexDuo、X-Talk、SoulX-Duplug
L1 隐状态级旁挂预测器读 LLM 隐状态双讲态受限MinMo、Freeze-Omni
L2 token 级token 流内部五态全可达Moshi、LSLM、OmniFlatten、SyncLLM、Fun-Audio-Chat、Covo-Audio、DuplexMamba、SALMONN-omni
L3 表示级共享连续潜空间——尚无系统——(开放前沿)

这张表要配一句关键警告读:架构可达 ≠ 行为可得。两个同样「理论上五态全可达」的 L2 系统,在「用户附和」场景上的实际表现可以天差地别——能不能到是架构的事,走不走得对是训练数据的事。这个落差是第七、八节的主线。

五、地图二:该支持哪些交互(T × I × R 与六个试金石)

第二张地图回答 which。论文把任何一个全双工瞬间拆成三元组 (T, I, R):

  • T 时间关系:T1 顺序 / T2 零间隙衔接 / T3 重叠 / T4 持续同说 / T5 静默
  • I 用户意图:I1 传递信息 / I2 附和 / I3 自我修正 / I4 抢话权 / I5 让话权 / I6 犹豫结巴 / I7 旁人或噪声
  • R 系统应对:R1 继续说 / R2 停下 / R3 等待 / R4 附和 / R5 无视 / R6 发起

三条轴刻意正交:时机(T)、语义(I)、策略(R)是三个独立的设计问题,混在一起说正是当前系统描述含糊的根源。5 × 7 × 6 名义上有 210 个格子,绝大多数物理上不可能(系统没在说话时谈何「继续说」)或语用冗余,剩下几十个有意义的格子就是全双工系统的需求清单。

其中六个格子被论文选为「试金石」(acid test):每条轴都被用到,且各自暴露一类现役系统的失败模式。合在一起,足以把真全双工从半双工里筛出来。

1 · 标准轮换T1 顺序 · I1 传信息 · R6 发起用户系统200–600 ms干净交接,人人都会2 · 零间隙衔接T2 零间隙 · I1 传信息 · R6 发起用户系统δ ≈ 0话音未落,接话已出:要语义预判 + 投机合成3 · 合作式打断T3 重叠 · I4 抢话权 · R2 停下用户系统≈200 ms 内闭嘴让位;分块/关键词设计在此现形4 · 附和不打断T3 重叠 · I2 附和 · R1 继续说用户系统「嗯嗯」「对」…………继续说,不停…………最高频翻车点:被当成打断,话说一半断掉5 · 旁人声音T3 重叠 · I7 旁人 · R5 无视旁人系统电视 / 同事喊话…………继续说,不接茬…………不是对它说的 → 过滤掉;需要说话人条件 VAD(pVAD)6 · 犹豫长停顿T5 静默 · I6 犹豫 · R3 等待用户系统我想要…静默 1.8 sWAIT:等着,不抢话静默 ≠ 说完;固定阈值VAD(~500 ms)必然抢跑
六个试金石场景:标准轮换、零间隙衔接、合作式打断、附和、旁人声音、犹豫长停顿——每格标注 (T, I, R) 坐标

1. 标准轮换 (T1, I1, R6)。 干净的一问一答,换人间隙 200–600 毫秒。级联时代就人人都会,是任何评测的基线。

2. 零间隙衔接 (T2, I1, R6)。 你话音未落它已开口。这要求系统在你还没说完时就语义预判「快说完了」并投机启动合成。Moshi、MinMo、FireRedChat 能做到;级联基线做不到——等静音出现再决策,物理上就晚了。

3. 合作式打断 (T3, I4, R2)。 它说话时你开口抢话权,它应在约 200 毫秒内闭嘴让位。GPT-4o 演示让这格出了名。表观全双工系统在这里现形:分块设计要等到块边界才停,关键词设计不喊口令不停。

4. 说话中的附和 (T3, I2, R1)。 它说话时你「嗯嗯」「对」两声——这是听者支持,不是抢话,它必须接着说。这是用户反馈中最高频的单一翻车点:天真的声学 VAD 把任何人声都当打断,句子说一半戛然而止,你还得说「诶你继续」。区分 I2 和 I4 需要意图理解,光测音量不够。

5. 旁人声音 (T3, I7, R5)。 电视声、你旁边同事喊你吃饭——和它重叠但不是对它说的,必须过滤掉当没听见。需要说话人条件 VAD 或 LLM 级的相关性门控。论文审计里只有 FireRedChat 明确宣称覆盖(靠 pVAD 模块)。

6. 犹豫长停顿 (T5, I6, R3)。 「我想要……那个……」然后是 1.8 秒的沉默。声学静默不等于说完了——语义上这句话明显没完,系统该等,而不是把停顿当让位。固定阈值 VAD(比如 500 毫秒)在这格必然抢跑;需要语义级的「说完没」预测。

还有第七格,论文单独拎出来:持续同说 (T4, I1, R1)——双方各说各的、同时还都听着对方(想想两人一起数数、抢答、激烈争论)。没有任何受审系统宣称稳定支持这格,公开训练数据里它也几乎不存在。这是整个本体的开放边疆。

各代表系统在七个格子上的覆盖(提炼自论文 Table 1,✓ 明确宣称或评测过;△ 部分或有限支持;· 论文未宣称):

系统标准零间隙打断附和旁人犹豫同说
FireRedChat··
MinMo··
Freeze-Omni·····
Moshi··
LSLM·····
OmniFlatten···
SyncLLM····
Mini-Omni2·····

三点值得注意:没有任何论文明确宣称「持续同说」(OmniFlatten 和 SyncLLM 的 ✓ 指宣称支持「重叠语音」这一架构行为,并非稳定的双向同说);旁人过滤只有 FireRedChat 一家宣称;附和的覆盖比想象中好——MinMo 报告了约 70–80% 的附和识别准确率。另外注意「格子空着」只说明论文没宣称、综述作者也没找到独立评测证据,不等于系统一定做不到。

论文还配了一个交互式演示站,六个场景都有真实音频和实时的 (T, I, R) 轨迹可视化,值得点开听一遍。

六、地图三:此刻系统在干什么(五状态决策状态机)

第三张地图回答 how:把系统的逐时刻行为建模成一台五状态、十一条转移的状态机。

五个状态很直觉:

  • IDLE:无人出声;
  • LISTEN:只有用户在说,系统安静地编码;
  • SPEAK:只有系统在说;
  • WAIT:系统在自己回合内暂停观望——察觉用户话没说完,等着;
  • DUAL:双方同时出声,且系统在主动整合(持续的附和、正在过滤的旁人声音、或真正的同说)。
τ1 用户开口τ2 主动发起τ3 确认说完 → 接话τ7 说完收尾τ4 察觉犹豫τ6 用户继续τ5 确认真说完了τ8 检测到重叠τ9 抢话 → 让位τ10 附和 → 继续τ11 旁人 → 无视T4 持续同说自环(无人区)IDLE无人出声LISTEN用户在说SPEAK系统在说WAIT回合内观望DUAL双方同时出声重叠族 τ8–τ11:全双工的分水岭虚线:无人稳定实现半双工 = 把 τ8 实现成「无条件让位」,从而分不清 τ9 / τ10 / τ11
五状态决策状态机:十一条转移按触发分三族——起步族、交接族、重叠族。重叠族(τ8–τ11)是全双工与半双工的分水岭

十一条转移按触发分三族:

  • 起步族:τ1 IDLE→LISTEN(听到用户开口);τ2 IDLE→SPEAK(沉默够久,系统主动发起)。
  • 交接族:τ3 LISTEN→SPEAK(确认用户说完,接话);τ4 LISTEN→WAIT(察觉犹豫,转入观望);τ5 WAIT→SPEAK(确认真说完了);τ6 WAIT→LISTEN(用户接着说了);τ7 SPEAK→IDLE(自己说完收尾)。
  • 重叠族:τ8 SPEAK→DUAL(说话时检测到重叠,先感知、不动作);然后按重叠音频的意图分流——τ9 DUAL→LISTEN(判定抢话,闭嘴让位);τ10 DUAL→SPEAK(判定附和,继续说);τ11 DUAL→SPEAK(判定旁人,无视继续)。

重叠族是全双工的分水岭,论文在这里给出了半双工的形式化定义:半双工系统把 τ8 实现成「无条件快速让位到 LISTEN」,因此根本不区分 τ9、τ10、τ11——这正是「分不清打断和附和」的精确表述。你的「嗯嗯」和你的「停停停」在它眼里是同一个事件。

状态机与地图二的格子恰好互相锁定:每个试金石格子对应一小段转移序列——

  • 合作式打断 = τ8 + τ9;
  • 附和 = τ8 + τ10(一段短暂的 DUAL 远足,几帧后回到 SPEAK);
  • 旁人声音 = τ8 + τ11(同样的形状,不同的意图判定);
  • 犹豫 = τ4 + τ5(或 τ6);
  • 持续同说 = τ8 + 在 DUAL 上的自环。

于是每条转移都成了独立可测的行为单元:某个评测格子挂了,可以定位到缺了哪条边。这就是把「这系统全双工吗」变成「它走得通哪几条边」。

用三条真实系统的轨迹感受一下这套语言的表达力:

Moshi 的打断轨迹(SPEAK → DUAL → LISTEN)。 Moshi 永远在并行预测用户音频流,等于常驻一种广义的 DUAL;τ8 是隐式的,τ9 让位就是把自己的音频流坍缩成静音 token、同时继续注意用户。切换时延的下限由 codec 帧率决定:12.5 Hz 意味着至少 80 毫秒。

OmniFlatten 的附和轨迹(SPEAK → DUAL → SPEAK)。 用户「嗯」出现在摊平序列的用户流上,助手流用显式的 silent_speech_token 标记短暂静默,随后接着自己的话头继续——整段远足在摊平序列的粒度上只有几个 token 长。缺了 τ10 的系统会把这条轨迹坍缩成 τ8 + τ9:把附和当抢话,错误让位。

FireRedChat 的旁人轨迹(SPEAK → DUAL → SPEAK)。 pVAD 判定重叠音频不来自主用户,对话管理器走 τ11 而非 τ9。有意思的是:决策发生在模块层而非 token 层,但 FSM 轨迹和 Moshi 的结构一模一样——差别只在「谁负责判定 I7」。这正是状态机作为跨系统通用语言的价值。

至于 DUAL 自环(持续同说),状态机允许,现实里无人稳定驻留:分块设计压根表示不了;多流设计表示得了但学不出来——几帧之内不是塌回让位就是音质劣化。这是状态机上的无人区。

最后记住论文的三个「免责声明」,避免把这套形式化读过头:状态机是描述工具不是控制器(它不规定系统怎么算出下一步);十一条边难度极不均匀(τ3、τ7 人人都过,τ10、τ11 和 T4 自环没人过);它也不封闭——将来若引入新意图(比如 I8 长笑声),加一条对应的边就是。

七、数据瓶颈:架构给上限,数据定实貌

三张地图摆好,两笔实证账开算。第一笔:为什么架构可达的格子,实际走不到?

论文给了三条证据链:同属 L2、可达格子完全相同的五个 token 级系统(Moshi、LSLM、OmniFlatten、SyncLLM、Mini-Omni2),实际格子覆盖差异巨大,且差异与子设计流派不对齐——对齐的解释变量是各自的后训练数据;Moshi 的技术报告明说全双工微调阶段用的是 Fisher 语料,并把轮换能力归功于这一阶段;MinMo 那个单层预测器之所以好使,靠的是 4000 小时标注对话——同样的预测器没有这个量级的数据就不行。结论:在 L0–L2 范围内,卡住系统级全双工行为的不是架构选择,而是训练数据的格子覆盖分布

按「携带多少对话结构」把训练数据分三类,问题立刻清晰:

  • A 类:单流语音(ASR 语料)。教发音,不教对话。
  • B 类:单流问答/指令(如 VoiceAssistant-400K)。教「用语音回答」,不教时机。
  • C 类:双流时间同步对话——用户和助手分轨录制、帧级时间对齐。唯一直接教全双工的数据类型,也贵一个数量级:要两个真人、双通道硬件、帧级时间戳和隐私合规。
三类训练数据A 类 · 单流语音(ASR 语料)教发音,不教对话B 类 · 单流问答 / 指令教「用语音回答」,不教时机C 类 · 双流时间同步对话用户/助手分轨 + 帧级对齐唯一直接教全双工的类型· 采集成本比 A 类高一个数量级· 中文公开合计 < 300 小时· 同说(T4)与旁人(T3·I7)两格:公开覆盖 ≈ 零公开 C 类语料的全部家底 ≈ 5000 小时FisherEasy TurnCANDORSwitchboardMagicData-RAMCHumDial T2AMIICSICallHome≈2000 h · 2003–04 年的英语电话录音1145 h · 轮次标签≈850 h · Zoom≈260 h(1992)180 h · 中文手机107 h · 中英双通道≈100 h · 会议≈72 h · 会议≈60 h · 电话工业界内部语料(呼叫中心 / 音箱 / App)规模未公开 · 产品偏置 · 可复现性为零
公开的 C 类语料总共约五千小时:主力 Fisher 是 2003 年的英语电话录音;中文公开语料不足三百小时;持续同说与旁人声音两个格子几乎为零

公开 C 类语料的全部家底约 5000 小时,且分布触目惊心:主力 Fisher(约 2000 小时)是 2003–2004 年采集的英语电话录音——二十多年后仍是 dGSLM 和 Moshi 的全双工训练支柱;现代场景靠 CANDOR(约 850 小时 Zoom 通话)和 Easy Turn(1145 小时,带轮次标签)补充;中文只有 MagicData-RAMC(180 小时手机对话)加 HumDial Track 2(107 小时),合计不到 300 小时。而工业界的内部数据(呼叫中心、智能音箱、App 语音)规模不公开、带产品偏置、复现性为零。论文对这条鸿沟的判断很冷静:短期内,只用公开数据训练的开源系统,整体行为追不上工业系统,也没法与之逐格对比审计。

真数据不够,大家都在合成。论文按「能点亮哪些格子」把五种配方排了个序:双角色 TTS(LLM 写剧本、多说话人 TTS 合成两轨——只覆盖干净轮换 T1)→ 重叠注入(在轮次边界随机注入起始重叠,补上 T2 和部分打断;MinMo 的轮次间隙就按均值 0.6 秒、标准差 0.4 秒的正态分布采样)→ 附和插入(从源对话检出「嗯嗯」插进助手说话段——但要求源对话本来就有附和,绕回了对 C 类数据的依赖)→ 静音 token 增强(OmniFlatten 把「该沉默」显式写进序列)→ 时间锚自监督(SyncLLM 的周期同步标记)。

配方点不亮的恰好是最难的两格:持续同说 T4(合成两条既连贯又互相纠缠的同时话语,本身就是未解问题)和旁人声音 T3·I7(要么真实环境录音,要么复杂的三方注入管线)。数据缺哪里,系统就死哪里——这两格正是第八节里所有系统的评测重灾区。

对开源社区,论文列了六个数据方向,其中杠杆最高的一条不需要采集任何新数据:用更好的训练目标补数据——比如给对话质量和轮换稳健性同时打分的生成式奖励模型,用强化学习把轮次结构「印」到普通数据上。

八、评测与「实现落差」

第二笔账:怎么知道一个系统真的做到了?

先看旧指标为什么集体失效:WER 测的是 ASR 模块,MOS 测 TTS,BLEU 测回答内容,轮次结束时延测的是调度器——它们全都默认「对话 = 离散的你一句我一句」,没有一个能回答全双工的定义性问题:用户还在说话的此刻,系统这一帧该做什么?

论文在这里给出全文最有用的概念工具:实现落差(realization gap)——架构容量(设计原则上可达哪些格子)与示范行为(评测里真的做出来哪些格子)之间的差。这不是理论担忧:Mini-Omni2 和 OmniFlatten 同属 L2 摊平家族、架构可达性一模一样,但在 Full-Duplex-Bench 上前者附和与同说两格都没展示出来,后者两格都宣称支持。原因在架构下游、评测上游:训练数据的格子覆盖。一句话总结整条因果链:

架构定上限,训练数据兑现其中几成,评测报告兑现率。

标准零隙打断附和旁人犹豫同说架构容量设计可达的格子训练数据点亮其中几格数据兑现语料真正覆盖的评测只报告它测到的示范行为基准上测出来的逐层缩水,就是「实现落差」(realization gap)——报告系统时应三层都报,而非一个总分
实现落差:架构可达的格子,经训练数据点亮一部分,再经评测报告一部分——三层之间的缩水就是落差所在

评测生态本身也需要一张地图。先消个歧:领域里同时活跃着两个名字撞车的基准系列——Full-Duplex-Bench(FDB,Lin 等人,v1 到 v3 演进)和 FD-Bench(Peng 等人,可配置的场景生成管线),量的东西不同、数字不可比,引用时必须点名版本。主要资源一览:

基准一句话定位
FDB v1四轴静态测试:停顿、附和、轮换、打断
FDB v1.5把重叠拆成四景(打断/附和/对旁人说/背景人声),stop-latency 指标是现存最接近「实质全双工」判据的度量
FDB v2静态测试集换成自动考官,多轮驱动、快慢两速
FDB v3语音 agent 在用户不流利、打断下的工具调用
FD-Bench管线式场景生成器,侧重吞吐、时延、工程稳健性
MTR-Duplex多轮内容质量:FDB v2 测「何时说」,它测「说了什么」
Talking Turns用 Switchboard 训裁判模型,逐帧对比系统行为与真人分布
HumDial 2026ICASSP 挑战赛:双通道真人语料 + 公开榜单,年度开放评测事件

两个发现值得转述。FDB v1.5 发现现役系统分裂成两派策略:抢答派响应快但被附和搞糊涂,守场派稳定但该让位时磨蹭——没有系统两头都占。FDB v2 的自动考官发现受审系统普遍栽在同说、话中纠正和多轮实体跟踪上——恰好与公开训练数据的缺格重合,是数据瓶颈论最直接的独立证据。

当前评测制度还有三个结构性缺口:几乎所有测试音频是预录静态的,而真实对话是双方互相适应的递归过程;声学分布偏向英语的电话与 Zoom 音质,工业界面对的手机麦克风、嘈杂环境和中文场景没有标准化报告方式;以及最关键的——没有任何公开基准包含「因果影响探针」:一个反事实实验,检验系统话说到一半的行为是否真的受用户音频影响,还是只是在跑固定日程。没有这个探针,分块轮转类设计能在 stop-latency 上拿好分,却从未真正整合过块中间的用户音频。

对应地,论文的评测建议不是新指标,而是报告规范:每个全双工系统报三样——架构 L 层、训练数据的格子覆盖、基准上的逐格行为。单一总分会把「输在架构、输在数据、还是输在评测口径」这三个诊断问题压扁成一个数。

九、前沿:通往 L3 的三条候选路线

L0–L2 框架内的最后缺口(T4 同说)理论上是数据问题;更深的边疆是那行空着的 L3。论文没有停留在「未来可期」,而是给出三条有上游证据支撑的具体路线:

路线一:连续潜变量自回归流式生成。 图像生成领域的 MAR 已经证明:自回归 Transformer 可以借一个小的扩散/流匹配头直接预测连续值 token——不再需要离散码书,「一帧 K 个 token」的约束连同它催生的全部子设计一起消失。搬到对话:用户与助手共享一条连续潜流,「两路同时活跃」不再是外挂机制而是潜空间的常态。Kimi-Audio 的流式流匹配解码器和 SALMONN-omni 的去 codec 化是合成侧的先声。

路线二:JEPA 式双流预测。 JEPA 家族(I-JEPA、V-JEPA)的要义是不重建原始信号,而从可见上下文预测被遮蔽部分的潜表示。设想一个双流音频 JEPA:从用户加助手的联合上下文预测助手的潜表示——重叠天然是建模对象而非「停/让」决策,而且能从无标注的双通道音频里自监督学出全双工动力学。注意这一条正打在第七节的痛点上:它不需要轮次标注。

路线三:世界模型条件对话。 Genie 一系的生成式世界模型学的是「世界可控状态」的潜编码。移植到对话:潜变量编码对话状态本身——谁持有话语权、刚说了什么、接下来期待什么——音频只是从这个状态条件生成的表面信号。地图三的五个状态不再是外部标签,而是潜空间里的区域。

三条路线共享三块路障:离散 tokenizer 生态已成事实基底,连续潜变量设计要取而代之;流匹配和连续自回归的流式生成还达不到现役系统 200–500 毫秒的实时水准;以及最根本的——L3 的对话潜变量该编码什么,连共识形式都还没有。所以它们暂时是三个假设,不是三张路线图。

十、结语:换一个问法

这篇综述最大的贡献,是把「这个系统是不是全双工」这个注定吵不出结果的二元问题,换成三个可以逐一检验的问题:

  1. 双工决策在哪一层做?(L0 模块 / L1 隐状态 / L2 token 流 / L3 潜空间)
  2. 七个关键格子各覆盖了几个?(标准、零间隙、打断、附和、旁人、犹豫、同说)
  3. 状态机的十一条边走得通哪几条?(尤其重叠族 τ8–τ11)

对不同的读者,各有一句带得走的话:

  • 选型或评测语音产品:用三连挑衅测试代替官方宣传——你「嗯嗯」附和时它停不停?旁边有人说话它接不接茬?你说到一半犹豫时它抢不抢话?三个问题分别对准 τ10、τ11 和 τ4,比任何演示视频都诚实。
  • 构建系统:按论文建议报三件套(L 层、数据格覆盖、逐格评测行为),别只报一个总分。另外记住 L0 没有死:FireRedChat 们证明了模块化路线在时延可控、行为可解释上依然能打。
  • 做研究:最稀缺的不是新架构而是 C 类数据(尤其中文、尤其同说与旁人两格);开源社区杠杆最高的方向是拿对话奖励做强化学习、用训练目标补数据;风险最高、天花板也最高的是 L3——那里现在一个系统都没有。

回到开头那个被你打断了三次、依然自顾自念完答案的语音助手——现在你可以精确地说出它输在哪里:决策卡在 L0 的声学 VAD 上,格子只覆盖了标准轮换一格,状态机上重叠族的三条边一条都没有。这比「它不够智能」有用多了。

参考