电话与 PSTN:语音智能体最难啃的依赖,是一张你根本无法优化的网络。
你可以把首 token 时间再压掉两百毫秒,最后交付的电话智能体听起来仍然比 demo 时更糟——因为大约一半的轮次延迟、全部的音质,以及"这通电话到底接不接得通"这个问题,都住在一条你既不掌控也无法剖析的运营商链路里。接入电话网意味着接受一笔固定的传输税、把外呼号码当作一份会随呼叫量衰减的信誉资产来经营,并围绕一个事实做设计:一通电话没有任何元数据通道——没有认证头、没有幂等键、没有结构化结果。
传输税是固定的,而且在你的模型看到任何东西之前就已经收走了。
跑在网页上的语音智能体通过 WebRTC 与浏览器对话,整条路径都归你。跑在电话号码上的语音智能体要穿过一条链路——来电者的话机、他们的移动或固网运营商、一家或多家互联运营商、你的 SIP 中继商、你的媒体服务器——每一跳都会加上你调不动的延迟。延迟预算在这里有若干条目,是任何模型侧的功夫都碰不到的。
- 外呼的拨后延迟。从你发出 SIP INVITE 到对端开始振铃之间,是跨运营商的信令过程,通常要一到数秒。它在你的 trace 里是隐形的,因为那段时间你什么都没在跑;而用户对"智能体启动好慢"的第一印象正来自它。
- 抖动缓冲是你主动加上去的延迟。PSTN 上的数据包到达是不均匀的,所以媒体服务器要先缓冲再播出。缓冲太短意味着音频被切割、糊掉;太长则每一轮都变慢。常见的工作区间在 40 ms 到 120 ms 之间,这是一个货真价实的"音质换速度"旋钮,不是待修的 bug。
- 编解码转码要额外付一道。互联环节至今仍然大量协商到 G.711。如果你的栈偏好 Opus,那么两条腿上你都在付转码代价;如果某一条腿跑的是 G.729,你就在窄带之上又叠了一层压缩失真。
- 8 kHz 是天花板,不是地板。电话音频被限带在大约 300–3400 Hz。正是在这里,齿擦音变糊、字母之间失去声学区分度——这就是你读到的每一份识别基准对你的信道而言都偏乐观的原因。基于 Opus 或 AMR-WB 的高清语音确实存在,但只有当两条腿以及中间每一家运营商都支持时才活得下来——这是你不能假设、也不该据以设计的前提。
实际后果是一条记账纪律:把传输和模型分开测量,并且在生产而非实验室里测。给"SIP 应答到第一个入向 RTP 包"和"你的第一帧出向音频到对端真正听见"两段时间打点,把它们当作地板。在这条地板以下继续优化模型,买不到任何来电者能感知的东西。
一个只花一个下午、却会改写路线图的测试:把你现有的评测集分别跑一遍真实电话腿和 WebRTC,比较实体错误率与 p95 首段音频时间。团队常常发现,自己与 demo 之间的差距大部分来自信道,而他们写下的修复清单——换更快的模型、把提示词缩短——一条都没打中。
你的号码是一个带信誉的身份,而这份信誉就是产品本身。
这一点最让工程团队意外,因为它在整个技术栈里找不到任何类比:一个电话号码会在各运营商与号码分析厂商那里累积一份信任评分,这份评分决定你的呼叫是被送达、被静默标记成"疑似骚扰",还是直接被拦截;而它的涨落取决于被叫方的行为,与你代码里的任何东西无关。
- STIR/SHAKEN 认证等级是你的运营商替你做出的一项声明。A 级意味着起呼运营商既认证了你的身份,也确认你有权使用该号码;B 级意味着它认识这个客户但不清楚号码来源;C 级意味着它只是把这通呼叫转手传下去。认证等级是下游过滤的输入,因此它就是"接通"与"进到一块没人愿意接的标记来电屏"之间的分界。做到 A 级靠的是和中继商之间的资料与开通流程,不是工程——在上线之前把它办完,别等接通率崩了再说。
- 靠换号码来甩掉一个坏标签,是那个经典错误。它看上去管用一周。号码分析厂商会识别出轮换模式本身,而这是比原始投诉更强的负面信号,于是第二个标签来得比第一个还快。该修的是呼叫行为:少打一点、打得更准、让退订真正生效。
- 品牌来电显示比再省 50 ms 值钱得多。把号码注册好、让话机上直接显示你的企业名称,对接听率的提升远超你在智能体内部能做到的任何改动;这是逐运营商的注册流程,有前置周期。
- 信誉是你各租户之间共享的资源。如果你从一个共用号码池为多个客户提供服务,某一个客户的激进外呼会拖垮池子里所有其他人的送达率。要么按租户隔离号码,要么把呼叫行为上限写进合同条款——因为这里的"吵闹邻居"问题发生在外部,而且不可逆。
需要盯住的指标是按运营商和按号码分段的应答占用比(ASR)。汇总后的接通率会掩盖"某家移动运营商从周二开始过滤你"这件事,而这恰恰是你需要在几小时内、而非月底才发现的事件。
没有元数据通道。对方的 IVR 就是你的 API。
你在别处依赖的每一种集成范式都假定存在一条旁路通道:一个放认证的 header、一个做幂等的 key、一个装结果的结构化 body。一通电话一个都没有。整个接口就是音频,唯一可用的结构化信令是一个十六符号的键盘。
- 带外发送 DTMF,然后仍然预期会被听错。RFC 4733 的 telephone-event 是可靠路径;带内音在 G.711 下能存活,遇到压缩编解码就会被毁掉。同时也要预期反向的问题——你的语音合成可能产生被对端 IVR 判定为按键的伪音。
- 穿越别人家的电话树是检索问题,不是推理问题。菜单往往数月不变,而每通电话都重新听一遍要花掉三十秒的空转。按目的号码缓存这棵树、回放已知路径,只有当缓存路径失效时才退回到"听"。把缓存的树当作带有过期策略的数据来管——因为被叫方改动它时不会通知你。
- 结果是以一句话的形式到达的,所以抽取才是正确性被决定的地方。"嗯我们好像还剩两个吧"必须变成一个带类型的结果。用一个针对文字记录的结构化抽取步骤去做,而不是让对话模型顺手在行内断言一个结果;并且带上一个置信度字段,强制下游代码必须处理它。
- 没有任何东西是幂等的。如果通话在对端答应了某件事之后掉线,你没有可用于重试的请求 ID,也无从询问那个副作用到底发生了没有。你平时会伸手去拿的那套恰好一次机制在这里无处着力。真正的缓解只有两条:在会产生变更的那一步之前先问一个确认性问题,以及在拨号之前先落一条持久的本地意图记录,好让人事后能够对账。
值得直白地写出来,因为它塑造了整个设计:一通电话是尽力而为、未经认证、无确认、不可重放的信道。任何需要保证的工作流,都必须从别处取得那份保证——一封确认邮件、一套预订系统、一次人工核对。不要把电话通话放在任何你事后无法对账的东西的关键路径上。
转接是状态死掉的地方。
升级转人工是每个电话智能体都会做的功能,也是最容易被敷衍实现的那个。电话的原语让"把通话搬走"变得很容易,却对"把上下文搬走"毫无帮助。
- 盲转(SIP REFER)把这条腿交出去,然后把你踢出局。便宜,代价是来电者要把一切重说一遍。如果目的方占线或拒接,你已经不在通话里、无法补救——来电者只会得到一次失败。
- 协商转接会让你保持桥接,直到人工接手。中继分钟数更贵、代码更多,但它让你可以先介绍来电者、用语音交接一份摘要,并在没人接听时退回来。只要来电者已经投入了五分钟,就该建这一种。
- 先带外搬运上下文,再搬运音频。把对话摘要、已捕获的实体和升级原因以通话 ID 为键写进 CRM 或工单,然后再转接。人工坐席在电话响起时就看见这条记录,正是"良好交接"与"从头再来"之间的全部差别;这也是交接设计反复强调的那一块——因为它反复被跳过。
- 决定录音与披露在边界上如何延续。一次转接可能把通话带进另一个司法辖区的同意制度,或者带出你在开头所做披露的覆盖范围。在策略层面一次性回答它,而不是逐个集成去回答。
法律层就是架构,不是事后附上的文书。
电话是智能体能触碰的监管最重的信道,而这些规则古老、被切实执法、且代价高昂。在美国,FCC 于 2024 年 2 月的解释性裁定已经把根本问题定下来了:AI 生成的语音属于 TCPA 意义上的"人工或预录语音",因此所有为骚扰电话写下的同意规则,都原封不动地适用于你的智能体。
- 同意的要求取决于呼叫目的,营销是最严格的那一档。FCC 的规则要求:使用人工语音的营销呼叫需事先明示书面同意,信息类呼叫则需事先明示同意(可为口头)。2026 年 2 月,第五巡回法院在 Bradford v. Sovereign Pest Control 案中认定,法条原文对人工语音呼叫只要求事先明示同意——这软化了德州、路易斯安那与密西西比三州的立场,对其余四十七州毫无影响。按书面同意标准来建;巡回法院之间的分歧不是设计输入。
- 法定赔偿按通计算且无上限。每通违规呼叫 500 至 1,500 美元,乘上一个可以不间断拨号的智能体——这就是为什么节奏控制与抑制逻辑属于与急停开关同一档的 fail-closed 层,而不属于提示词。
- 每一通电话开头都要披露身份与自动化属性。截至 2026 年 8 月,FCC 关于定义"AI 生成呼叫"并强制规定具体披露措辞的立法程序仍处于提案阶段,所以把"立即披露"当作安全默认值,而不是等条文落地。在欧盟,AI 法案的透明度义务已经要求告知对方其正在与 AI 系统交互,且相关条款自 2026 年 8 月 2 日起可执行——与披露与内容溯源所讲的是同一套纪律。
- 录音同意是另一个逐州而异的问题。双方同意制的辖区要求在任何录音开始之前先行告知,也就是在你的语音转文字流水线启动之前——这意味着它是媒体路径的属性,而非提示词的属性。
- 退订必须在记录里被兑现,而不只是在对话里。一句"按 0 退订"若不写入一份被所有外呼活动共享的持久抑制名单,那就是一次带着完整文字记录的违规。把语音退订和 DNC 名单接到同一个存储上,并把抑制检查做成拨号的前置条件。
这些都不是可选的基础设施,也都不能住在系统提示里——一个能被话术劝退披露的模型不是合规控制。把同意状态、抑制名单与披露编码成智能体绕不过去的代码路径,正如外呼语音智能体所铺陈的那样。
像运维一项网络服务那样运维它,因为它本来就是。
智能体跑通之后,随之而来的故障是电信故障,而它们不会出现在你为模型搭的仪表盘上。你的供应商换了一条互联路由、某家运营商更新了过滤策略、编解码协商发生了变化——症状是某个质量指标在漂移,却挂不上任何一次发布。
- 直接监控媒体路径。按通话记录抖动、丢包与往返时延,并按运营商和中继聚合。某条路由上的丢包上升,正是一整周"智能体老是听错人说话"工单背后的根因,而任何文字记录层面的指标都点不出它的名字。
- 把应答占用比与拨后延迟当作先行指标盯住。两者都会先于业务指标动,而且它们波动的原因完全在你的发布历史之外。
- 常备并演练第二家中继供应商。中继会宕,配了却从不演练的故障转移等于没有;演练的形式是走备用路由的定时合成呼叫,而不是一份文档。
- 在法律允许的范围内录下一切,并保留音频。音频是唯一的地面真值;文字记录已经是对它的一次有损解读,而你真正需要的评测集就是录下来的通话。保留策略要与删除策略配套,因为在任何一个要紧的监管制度下,通话录音都是个人数据。
- 对空气死寂和通话时长离群值告警。中位数九十秒的场景里跑出十一分钟的一通电话,是一个卡住的循环——而且它正按分钟在两条腿上同时向你计费,这是智能体故障能直接产生线性外部成本的少数场合之一。
本周只做一件事的话:把按运营商分段的应答占用比与 p95 拨后延迟拉出来,然后向中继商确认你的 STIR/SHAKEN 认证等级。如果你还没到 A 级,仅这一项修复对接通率的提升就会超过你在智能体里能做的任何改动——而它需要的是一张支持工单,不是一个迭代周期。电话网是一个你去对接、去谈判的依赖,永远不是一个你去优化的对象。
相关:实时智能体架构讲循环相对媒体路径住在哪里,语音智能体失败模式是这套监控试图捕捉的清单,语音与实时智能体是入门地基。