一、引言
2026年7月8日,OpenAI在发布GPT-5.6 Sol的前一天,悄然推出了新一代语音模型GPT-Live。这并非一次常规的产品更新——它标志着AI语音交互从\”回合制\”迈入\”全双工\”时代。
GPT-Live基于全双工(Full-Duplex)架构构建,能够同时听和说。在对话中,它可以用\”嗯嗯\”或\”是啊\”表示正在专心听,进行快速来回交流,也可以在用户需要思考时保持安静。更重要的是,它将连续交互与深度推理解耦——GPT-Live前台维持语音对话流,同时将复杂推理任务委派给GPT-5.5后台执行。
每周超过1.5亿人通过语音功能与ChatGPT交互,GPT-Live的发布意味着语音已经从一个\”附加功能\”升级为AI的核心交互入口。
二、语音模型的演进之路
2.1 第一代:级联式语音系统(Cascaded Pipeline)
最初的ChatGPT Voice采用三个模型串联的方式工作:
这种架构虽然首次实现了与前沿AI模型的语音对话,但代价巨大:信息在模型之间传递时可能丢失(语调、情绪、背景噪音),响应缓慢而生硬,且无法处理笑声、歌声或情感表达。
2.2 第二代:轮次式语音模型(Turn-Based Voice)
ChatGPT Advanced Voice Mode将音频处理整合到单个模型中,降低了延迟,使对话更流畅。但它仍然通过离散的轮次运作——模型必须等用户停止说话后才能回应。由于轮次检测基于静默,即使短暂的停顿或背景噪音也可能被误认为一轮结束,导致模型在不自然的时机插话。
2.3 第三代:GPT-Live全双工架构
GPT-Live通过两项关键架构变化解决了前两代的根本性限制。
三、GPT-Live的核心架构创新
3.1 连续交互(Continuous Interaction)
GPT-Live不再处理一连串彼此独立的消息,而是在生成输出的同时连续处理输入。模型每秒可以做出多次交互决策:是说话、继续倾听、暂停、打断,还是调用工具。
// Go实现:全双工语音模型的交互决策引擎
package fullduplex
import (
\”context\”
\”fmt\”
\”sync\”
\”time\”
)
// InteractionDecision 表示模型每秒做出的交互决策
type InteractionDecision int
const (
Speak InteractionDecision = iota
Listen
Pause
Interrupt
InvokeTool
)
// AudioStream 表示音频输入/输出流
type AudioStream struct {
Data []float32
SampleRate int
IsSpeech bool
Intent string
}
// FullDuplexEngine 全双工引擎 – 同时处理输入和输出
type FullDuplexEngine struct {
inputStream chan AudioStream
outputStream chan AudioStream
decisions chan InteractionDecision
mu sync.RWMutex
isSpeaking bool
isListening bool
}
// NewFullDuplexEngine 创建全双工引擎实例
func NewFullDuplexEngine() *FullDuplexEngine {
return &FullDuplexEngine{
inputStream: make(chan AudioStream, 100),
outputStream: make(chan AudioStream, 100),
decisions: make(chan InteractionDecision, 10),
}
}
// ProcessStream 每秒多次处理音频流,做出交互决策
func (e *FullDuplexEngine) ProcessStream(ctx context.Context) {
// 决策频率:每秒约10次
ticker := time.NewTicker(100 * time.Millisecond)
defer ticker.Stop()
for {
select {
case <-ctx.Done():
return
case <-ticker.C:
decision := e.makeDecision()
e.decisions <- decision
e.executeDecision(decision)
case input := <-e.inputStream:
e.handleInput(input)
}
}
}
// makeDecision 每秒多次做出交互决策
// 核心逻辑:基于当前输入流状态、输出流状态和对话上下文综合判断
func (e *FullDuplexEngine) makeDecision() InteractionDecision {
e.mu.RLock()
defer e.mu.RUnlock()
// 1. 检查是否有用户输入
if len(e.inputStream) > 0 {
select {
case latest := <-e.input



