和语音助手聊过天的人都体会过那种尴尬:你说完一句话,它沉默两三秒,再用一成不变的播音腔回答你。而新一代的端到端语音模型(GPT-4o、Qwen-Omni、MiniCPM-o……)几乎是你话音刚落就接上,语气还会跟着内容走。
这背后的关键设计之一,就是 Qwen2.5-Omni 提出、后续版本一路沿用的 Thinker-Talker 架构。这篇文章把它拆开讲清楚:为什么需要它、它怎么工作、以及它是怎么把「开口延迟」压到 0.2 秒量级的。
一、先看老办法:三段流水线
在端到端模型出现之前,语音对话系统几乎都是三段式级联:
- ASR(语音识别):把你的话转成文字;
- LLM:读文字,写出文字回复;
- TTS(语音合成):把回复念出来。
这条管线工程上很省心,每一段都有成熟组件,但毛病是结构性的:
- 信息漏斗。语音转成文字的那一刻,语气、情绪、停顿、背景音全被扔掉了。同一句「你可真行啊」,是夸你还是阴阳你,文字上根本看不出来;到了 TTS 那一端也一样,它只拿到干巴巴的文字,用什么语气念全靠猜。
- 延迟累加。三段串行,每段都要等上一段出完整结果,首包延迟动辄好几秒。
- 错误传递。ASR 听错一个词,后面两段只能将错就错。
问题的根源不是某一段做得不好,而是模块之间只用文字这一根细管子传信息。
二、那让一个模型直接输出语音呢?
级联不行,那走另一个极端:让一个 LLM 直接生成语音,行不行?也不太行,至少有三个麻烦:
- 两种能力互相干扰。 语音 token 序列长、「语义密度」低——一秒钟的声音要几十个 token,信息量却抵不上几个字。把它和文字混在同一个输出流里训练,容易把模型的文本智商拉下水。
- 没法同时给两种输出。 很多场景需要文字和语音双输出(屏幕上显示文字,扬声器同时播语音),单一输出流只能二选一或者串行。
- 优化目标不同。 生成文字追求的是「说什么」(语义正确),生成语音追求的是「怎么说」(音色、韵律、自然度)。让一个脑袋同时精通两件事,不如让两个模块各干各的。
所以理想的结构浮出水面:分工,但不分家。级联的教训是「分家」——模块之间信息断流;单流的教训是「不分工」——两种能力互相拖累。
三、Thinker-Talker:大脑和嘴的分工
Qwen2.5-Omni 技术报告用了一个很形象的比喻:Thinker 是大脑,Talker 是嘴。
- Thinker(大脑):一个多模态 LLM。音频编码器、视觉编码器把声音和画面变成向量序列,和文字一起送进 LLM 主干。它负责全部的「理解」和「思考」,产出文字回复——决定说什么。
- Talker(嘴):一个小得多的自回归 Transformer。它不做理解,只负责把 Thinker 的「想法」变成一串语音 token——决定怎么说。
两个设计细节,让它和级联方案有了本质区别。
第一,Talker 共享 Thinker 的全部上下文。 嘴不需要重新听一遍大脑在想什么——Talker 直接读取 Thinker 的内部状态和完整对话历史,两者端到端联合训练,是一个模型,而不是两个模块的拼接。用户语音里的情绪、前几轮聊过的内容,Talker 都「知道」,所以语气能贴合语境。
第二,Talker 同时接收两条通道的信息,这是整个架构里最巧、也最容易看糊涂的一处。
要看懂它,先看清一个事实:Thinker 每生成一个词,其实分前后两个半拍——
- 前半拍:上下文过完所有网络层,得到一个隐层向量 h。它是 Thinker 此刻「全部想法」的浓缩——想表达的意思、带着的情绪、这句话往下走的趋势,都在里面。再由 h 算出下一个词的概率分布,比如「开心 45%、高兴 33%、愉快 22%」;
- 后半拍:从这个分布里抽签,落定一个具体的词,比如「高兴」——这就是文本 token,也是屏幕上显示的字。
所以 ① 和 ② 不是两个信息源,而是同一次选词的前半拍与后半拍:② 是从 ① 里抽出来的结果,① 是 ② 的来源。关键在于,这层母子关系在两个方向上都是「有损」的,谁也替代不了谁:
- 从 ① 推不出 ②——分布不等于结果,落定哪个词是随机抽的。只看隐层的话,Talker 多半会照概率最高的「开心」发音,而这一次偏偏抽中的是「高兴」,语音和屏幕文字就对不上了;
- 从 ② 推不回 ①——token 只是词表里的一个编号,「兴奋、上扬、带点调侃」这些潜台词全不在里面。只看 token 的话,Talker 就得像级联 TTS 一样自己从头猜语气。
打个比方:Talker 是配音演员,Thinker 每说一个词都递给它两样东西——台词本(token:一个字都不能念错)和情绪批注(隐层:「这句念得雀跃些,句尾上扬」)。只有批注没有台词,演员会自由发挥、念错词;只有台词没有批注,念得字正腔圆却毫无感情。token 定词,隐层定调,说的就是这个。
至于图里说隐层「采样前就可用」:h 在抽签前的一瞬就已经算好,而且 Talker 是逐 token 跟着 Thinker 走的,不必等整句话想完——这也是下一节那条流式流水线能转起来的前提。
四、从语音 token 到真正的声音
Talker 输出的还不是波形,而是离散的语音 token——可以理解成「声音的拼音」,其词表由一个语音 codec(Qwen 用的是自家的 qwen-tts-tokenizer)定义。所以还差最后一步:把 token 解码成波形。
这一步最怕「等」。传统合成要拿到完整语句才开始,流式体验就毁了。Qwen2.5-Omni 用的是滑动窗口 DiT:解码当前块时只看少数几个相邻块(回看两块、前瞻一块),感受野被刻意限制住,于是不必等全句——第一小块 token 一到就能出声(DiT 先生成梅尔频谱,再由 BigVGAN 声码器还原成波形)。
把整条链路串起来看:Thinker 吐出第一个文字 token 的同时,隐层表征已经流向 Talker;Talker 落后几个 token 开始产语音 token;解码器攒够一小块就开始出声。三级流水线同时在跑,首包延迟从「一整句话的时间」缩到了「几个 token 的时间」。
顺带一提,输入侧同样是流式的:音频、视频按 2 秒一块送进编码器,再由专门设计的位置编码 TMRoPE 把画面和声音在时间轴上对齐——那是输入侧的另一个故事,这里不展开。
五、架构的进化,与殊途同归
Thinker-Talker 不是一锤子买卖,这两年一直在迭代——分工从没变过,变的是接口和实现。
Qwen3-Omni(2025.09),在生成侧做了三处升级:
- Thinker 和 Talker 都换成 MoE,高并发下吞吐更好;
- Talker 从单码本改成多码本:主干每步预测当前帧的第 0 层码本,再由一个超轻量的 MTP 模块补齐其余码本层——一步出一帧;
- 波形解码抛弃扩散模型,换成轻量因果卷积网络 Code2Wav,逐帧出声。
三管齐下,端到端首包延迟做到了 234 ms(音频、单并发)——已经落在人类对话自然停顿的范围里。
还有一个容易被忽略但很有味道的改动:Talker 不再读 Thinker 的隐层表征,改为直接接收流式的文本 token,外加来自编码器的原始多模态特征。官方给的理由有三层:就文本内容而言,token 和隐层向量的信息量其实等价;语气、音色线索改由多模态特征直接提供(比如语音翻译时保留原说话人的韵律);更重要的是解耦——大脑和嘴之间的接口变成了明文文本,RAG、函数调用、安全过滤这些外部模块都能插在中间、改写 Thinker 的输出之后再交给 Talker 念出来。
Qwen3.5-Omni(2026.04),继续沿用 Thinker-Talker:主干换成 Hybrid Attention + MoE,把上下文推到 256K;语音侧引入 ARIA 机制,动态对齐文本单元和语音单元,进一步改善流式合成的稳定性和韵律。
可以停下来品一下这条演化路径:从「共享隐层」到「明文接口」,恰好复刻了软件工程里从紧耦合走向松耦合的经典剧本。
MiniCPM-o 4.5(2026.04),则是另一家的印证。面壁智能这个主打端侧的模型没有用 Thinker-Talker 这个名字,但拆开一看,形状惊人地一致:
- 大脑:Qwen3-8B 作 LLM 主干,负责全模态理解、产出文字和隐层状态;
- 嘴:一个只有约 0.3B 的轻量语音 token 解码器,自回归产出语音 token;
- 最后由流匹配解码器流式还原波形(还能按系统提示里给的参考音频克隆音色)。
连第三节那个双通道的小心思都在:每个文本 token 送进语音解码器时,会把对应的 LLM 隐层状态(过一层 MLP)直接加到 token 嵌入上——token 定词,隐层定调,殊途同归。有意思的是,它保留的是 Qwen2.5-Omni 式的「隐层」路线,而不是 Qwen3-Omni 的「明文」路线——两个流派都还活着,活下来的是那个分工本身。
MiniCPM-o 4.5 真正的差异化在全双工:它把连续的交互切成约一秒的时间片(时分复用,TDM),每片之内先消化新看到、听到的内容,再生成这一片的输出。于是模型能边说边听——被打断会停下,甚至会主动开口提醒你。加上 8B + 0.3B 的小身板,一张消费级显卡就能跑出 0.59 秒的首 token 延迟。
当两个团队在完全不同的约束下——一个卷云端能力上限,一个卷端侧实时全双工——收敛出同一个形状:大脑管想、小嘴管说、解码器管出声,这个模式基本就算站住了。
六、写在最后
Thinker-Talker 值得记住的不是名字,而是三条朴素的设计原则:
- 分工:「说什么」和「怎么说」是两种能力,让两个模块各自精进,互不拖累;
- 不分家:模块之间不要用有损的窄接口断流,该共享的上下文要共享;
- 为流式而设计:低延迟不是事后优化出来的,而是从自回归结构、滑动窗口感受野到卷积解码器,一层一层设计出来的。
下次语音助手秒回你、还听出了你话里的阴阳怪气,你就知道:那是一颗大脑和一张嘴,在三级流水线上的默契配合。
参考
- Qwen2.5-Omni Technical Report(arXiv:2503.20215,Thinker-Talker 的出处)
- Qwen3-Omni Technical Report(arXiv:2509.17765)
- Qwen3.5-Omni Technical Report(arXiv:2604.15804)
- MiniCPM-o 4.5: Towards Real-Time Full-Duplex Omni-Modal Interaction(arXiv:2604.27393)
- Qwen2.5-Omni 官方博客、MiniCPM-o GitHub