周三下午三点,一个后端工程师正对着监控面板发愣。他刚把语音代理的测试环境推上线,邀请了几位同事在公司内网试试效果。结果出乎意料:所有来自办公网的呼叫,音频流全部经过TURN中继。没有一个数据包是直连。

他反复检查了WebRTC的统计接口,relay标志位纹丝不动地锁在“是”上。这位工程师的困惑,恰好踩中了一个被供应商反复传播的口号:AI语音代理的流量,百分之百依赖中继服务器。事实真的如此吗?答案比那句口号复杂得多——也更能解释为什么任何生产环境下的语音代理,都不敢把TURN服务器从架构图里删掉。

打开网易新闻 查看精彩图片

理解这个问题,得先看清语音代理的连接模型。一个AI语音代理从来不是点对点的通话。它的架构是单向的:浏览器通过一条WebRTC连接,把麦克风里的音频推到云端的模型服务器上,模型再合成语音流送回来。整个过程中,只有一个远程端点——就是那个跑在公有云上的AI大脑。

这个模型决定了备选路径的稀缺性。人和人之间的WebRTC通话,双方可以尝试在局域网内找到直达对方的路径,找不到再走中继。语音代理则不同,它没有第二个对等方可供试探。当浏览器发现UDP洞打不通时,只剩下一条路:通过TURN服务器,把媒体数据封装在TCP协议里,从443端口绕出去。因为企业防火墙的行为是针对整个网络生效的,不是针对单个会话,所以一旦某个办公网屏蔽了UDP流量,所有从里面发出的通话都会变成中继依赖。这种情况下,TURN就是唯一的选择,不是锦上添花的备胎。

如果你搜过“语音代理 TURN”,大概率会撞上一句被十几个厂商博客反复搬运的断言:AI语音代理的流量是百分百中继,没有例外。这句话简洁有力,适合做营销标语,但把它当成技术真相来用,会掩盖一些关键的细节。问题出在哪儿?出在对网络环境的假设太绝对了。一个在家用Wi-Fi上打开浏览器的用户,面对的云代理有公网IP,通常可以直连成功,根本不需要经过任何中继。业界公认的独立WebRTC技术专家Tsahi Levent-Levi在TURN术语条目里给出过更准确的估算:根据网络环境不同,实际走中继的比例大致在“0到50%”之间浮动,远不是100%。

更有意思的是,这个“100%中继”的口号经常拉着OpenAI的实时语音工作做背书,但OpenAI自己的架构设计恰恰给出了相反的参照。OpenAI在构建低延迟语音链路时,明确拒绝了传统TURN风格的中继,理由是这类中继作为媒体路径上的中间节点太重了。他们另起炉灶,基于ICE-TCP协议设计了一套私有的中继转发机制,专门处理他们描述的“大多是1对1”场景下的负载。这等于说,即便在最追求极限延迟的语音交互前沿,直接认定全量中继也不是默认解,而是一个需要被设计绕过的低效选项。

那么,“100%中继”这句话在什么范围内才立得住?只对那部分被公司网络屏蔽UDP的用户成立。对这些人来说,TURN确实不是帮他们优化体验的增值服务,而是保证语音代理还能出声的基础设施。如果你的产品不做企业场景,或许可以暂时忽略TURN;但一旦用户群包含任何在防火墙背后办公的人,TURN服务器就是生产环境部署清单上删不掉的一行。一些平台,比如AWS的Bedrock AgentCore,索性在接入规范里强制要求配置TURN,直接切掉了争论空间。

回到那位工程师的监控面板。他后来搞明白了原理:只要他自己在家用宽带测试,relay标志就是关着的。公司内网那个结果,不是代码bug,不是配置错误,恰恰是他的系统在如实反映网络的拓扑限制。这件事本身也成了他做架构评审时的一个论点:不要把“大部分用户可能不需要”简化成“所有用户都不需要”,更不要用一句营销标语替代架构上的冗余设计。因为一旦防火墙放下UDP的闸门,语音代理能依赖的,就只剩下TCP 443端口上那座事先搭好的中继桥。