一个模型跑通实时音视频对话
Wan Streamer v0.1,其实是一个实时音视频交互模型。能实时对话的 AI 现在不少,但能一边看你的脸、一边听你说话、一边开口回应、自己还自带一张会动的脸的,几乎没有延迟。
Wan Streamer 把这件事压进了一个模型里。
现在能实时对话的系统分两类一类响应快但只出声音、没有可见的脸(GPT-4o Realtime、豆包、Gemini Live),另一类有脸但靠外部 ASR、语言模型、TTS、动画一串模块拼出来。官方称 Wan Streamer 是唯一用单个端到端 Transformer 同时吐出同步音视频、且总延迟压在 1 秒内的模型。
先看一段,它长什么样
先看最日常的一段:一次中文视频通话。其余几段演示,会随后文一段段穿插着看。
旧办法为什么慢:一道道接力,每步都在等
旧办法慢,是因为它们是一串独立模型拼起来的流水线:语音先转成文字(ASR),文字喂给语言模型想答案(LLM),答案再合成语音(TTS),最后驱动一张脸动起来(动画渲染)。每过一道工序都要等上一道交货,等待时间一段段累加,识别和口型对不齐的误差也一路累积。
端到端像一个人自己听完直接开口;级联像传话游戏,每过一手都慢一拍,还可能把话传错。中间那层把语音/视频先转成文字、再用文字去驱动下游,文字就是各模块之间隐藏的中转桥(传统级联里文本是独立训练的几个模块之间的中间表示;Wan Streamer 不要这个中间桥,模态之间直接耦合),桥越多越慢、越容易错。
原文给这件事下了一个判断:实时音视频交互不是「多模态理解」加「多模态生成」的简单相加,它本质上是全双工的,所以可流式性是一种建模约束,而不只是上线后的工程优化。建在离线编码器、双向解码器、回合制对话之上的系统,光靠工程调优也补不出真正的低延迟全双工。这正是下一节要拆的核心。
它的办法:一个模型从听到说全包了
Wan Streamer 的内核只有一句话:把视觉、音频、文本的输入 token 和输出 token,交错排成同一条序列,交给一个 Transformer 处理;用 block-causal attention 协调,让它边来边算地往外吐。
单个端到端 Transformer 取消了外部的 VAD、ASR、语言模型、TTS、动画、视频生成等模块,把感知、推理、回应规划、语音与视觉生成、响应时机、轮次管理全放进同一个持久状态里联合优化。低延迟、全双工、同步音视频这三件事,根都在这里。

模型把交互看成一条连续的因果流:你的观测和它的回应,一起更新当前上下文。每个流式单元里,它编码当前能拿到的用户观测,再根据双方完整的因果历史预测下一段回应。语言回应是一串离散 token,用 next-token 预测训练;音频和视频回应活在连续的 latent 空间里,用条件 flow matching 联合生成,以同一份干净上下文为条件,让语音、动作、外观、场景演化作为一个耦合整体一起去噪,而不是各生成各的再拼。

为了撑住这条流,整栈从设计之初就是因果的:用于流式 latent 编码的严格因果音视频 VAE、因果音视频编码器、因果音视频解码器,以及由 block-causal attention 协调的时序因果 Transformer。去噪后,估计出的干净 latent 直接追加进历史,作为后续单元的上下文;因果解码器再把它们渲染成最终的音视频。被这套设计抹掉的外部模块是:
这套「一个模型全包」落到画面上是什么效果——它能聊娱乐八卦,还能即兴模仿:
怎么做到边听边说、随时能打断
人和世界的交互天生是流式、全双工的:我们不是先听完、再单独想、最后才答,而是一边看一边听一边说、随时停顿和打断,感知和表达在音视频的时间尺度上重叠发生。实时交互模型也得长成这样。
因果编码器+因果解码器+低延迟多模态 token 调度,让 25fps 下的流式单元短到 160ms:输入的语音视频立刻影响输出,生成的音频和视觉状态在解码之前就耦合好,而不是事后修补;每个吐出来的单元都写回交互历史。于是它能边听边说,你说话时它仍在听、被打断还能调整。
全双工像正常打电话:你能一边听对方说一边插话。对讲机那种「说完松手才能听」是半双工。
这套机制能成立,靠的是 block-causal attention。它把一小块(比如 160ms 的音视频片段)当成一个处理单位:块内部的 token 可以互相看(双向),但一个块只能看见过去的块、看不到未来的块。这样既保住了块内上下文,又能边来边算,不用等整段说完。
块内 token 互相看,块之间只往左看过去:块 3 一到就能开算,因为它只依赖块 1、块 2,不用等未来的块 4。这就是流式生成。
像说话时以「词组」为单位思考:一个词组内部一起斟酌,但你不能预知还没出口的下一个词组。这里还有两个配套的因果件,因果编码器/解码器(只看过去、不看未来:普通编码器要拿到完整一段才能编码,因果版可以边接收边编码,像同声传译边听边译,不必等演讲讲完),让感知和生成都能边来边走。
Wan Streamer 训练时是单个端到端模型;实时部署时,同一个模型拆成跨两张 GPU 的 thinker–performer 流水线,尽量让计算重叠。系统 prefill 完成后,thinker 把初始 KV-cache 广播给 performer,两边共享同一份全历史状态,统一模型的行为被完整保留。
thinker 负责因果音视频编码器、一次用于语言预测与状态更新的短计算、KV-cache 构建,以及把上一单元的 latent 解码成音视频并立即输出。performer 只负责 latent 生成,基于共享的全历史 KV 上下文,为下一段音视频单元跑 flow-matching 求解器。因为 performer 从不跑解码器、thinker 从不跑高成本的求解器,解码和生成互不阻塞。
只要 performer 耗时加通信耗时能塞进一个 160ms 单元,就维持实时吞吐。而「编码 → 状态更新 → latent 生成 → 解码」这条信号到信号的路径,就是约 200ms 的模型侧延迟,靠 CUDA graph 捕获、编译、优化算子压在预算内。

边听边说、随时能被打断,落到对话里就是这种自然感。这两段都是英文实时对话:
和别的系统比,快在哪、能做什么
下面两组延迟数字测的不是一回事,得分开看。上方一组是完整的端到端交互闭环(感知用户并产生回应),其中只有 Wan Streamer 同时输出视频;下方一组是数字人/音视频渲染器,只计到渲染阶段,不含它们依赖的外部语言模型、ASR、TTS,所以用户实际感受到的延迟比图里更高。
能力维度的覆盖如下,Wan Streamer 是唯一一行全部打勾的:
最后我们再看一遍一开始的那个视频,这是一个完整的真实链路:一次真实联网对话的屏幕录制,能看到从感知到回应的全过程。
夜雨聆风