文章来源于美团技术团队,作者唐锐 森彬 子丰等
当你和智能语音机器人对话交互时,你是否好奇电话背后的机器人如何“听懂”你的意思,又如何像人一样“回答”你的问题?其中比较重要的技术就是 MRCP。本文主要介绍了 MRCP 在美团语音交互中的实践和应用,基于美团自研的语音识别及语音合成能力,我们提升了外呼通话的成功率,并且保证了更好的用户体验。
一、背景
1.1 MRCP 是什么
1.2 MRCP 使用场景
1.3 美团自研的 ASR/TTS 能力
1.4 我们为什么需要 MRCP
二、设计与实现
2.1 设计目标
2.2 总体系统架构
2.3 关键技术组件
2.4 MRCP-Server 模块结构
2.5 部署方案
三、实践与应用效果
3.1 应用范围
3.2 应用效果
四、结语
一、背景
|1.1 MRCP 是什么
SPEAK指令表示发送语音合成请求,IN-POGRESS指令表示正在处理中,SPEAK—COMPLETE指令表示处理完成[3]。
MRCP/2.0 380 SPEAK 14321
Channel-Identifier: 43b9ae17@speechsynth
Content-Type: application/ssml+xml
Content-Length: 253
您好,有什么能帮助您?IN-PROGRESS 响应消息:
MRCP/2.0 119 14321 200 IN-PROGRESS
#消息长度是119 bytes,ID是14321,200 表示成功,正在处理中
Channel-Identifier: 43b9ae17@speechsynth
Speech-Marker: timestamp=857206027059MRCP/2.0 157 SPEAK-COMPLETE 14321 COMPLETE
Channel-Identifier: 43b9ae17@speechsynth
Speech-Marker: timestamp=861500994355
#表示SPEAK请求的正常处理结束
Completion-Cause: 000 normal
图2 简单呼叫中心系统示意
当分机拨打外呼用户时,需要从运营商那里获得一条电话通讯线路,FreeSWITCH 指定路由通过网关到达运营商线路,通过运营商基础网络、连接用户通讯设备终端。 智能语音服务通过 MRCP 协议与 FreeSWITCH 进行对接,用户接通电话后,智能语音服务从呼叫中心设备中实时获取声音讯号,将语音讯号转化为文本流实时输出,并将要回复的文本话术经过语音合成转化为语音讯号,交由呼叫中心进行语音播报。
|1.3 美团自研的 ASR/TTS 能力
|1.4 我们为什么需要 MRCP
1.4.1 赋能内部业务
1.4.2 支撑对外商业化
二、设计与实现
|2.1 设计目标

支持标准协议下的 TTS 和 ASR 能力对接方式,追齐业界主流厂商能力。 以横向可扩展、业务解耦的方式,支持和助力美团内部业务,在智能外呼、内呼热线等场景下提升用户体验;并为美团语音能力的对外商业化探索,提供更好的支撑。
|2.2 总体系统架构
2.2.1 系统层次架构

2.2.2 系统间调用关系

图5 MRCP服务调用关系
FreeSWITCH 电话软交换平台,负责和运营商打通通讯线路,以具备基础的电话通讯能力。 FreeSWITCH 除了以内置模块( 如 mod_java )的方式开发控制接口外,也以 ESL( Event Socket Library )的 Inbound/Outbound 方式开放接口,提供事件监听、通话控制等能力。 ESL Server 将监听到的事件、消息传递给具体的业务逻辑,可以提供通讯层所有的事件供监听和处理,籍此实现机器人的语音对话交互能力。 将调语音相关的事件和信号处理解耦以后来看,热线、在线机器人的交互逻辑则可以简化、抽象为统一的模型和系统。 管理配置台主要负责一般对话机器人所需要的意图、槽位的定义、管理和配置任务型对话流程。 配置管理也可对 ASR、TTS 引擎需要的领域知识进行管理,比如客服领域的词库、样本数据集的持续标注等。 本文所述的MRCP在系统调用中处于此位置:在FreeSWITCH 收到合成/识别请求后,发起与 MRCP-Server 的交互,MRCP-Server 调用内部实现的 MRCP-TTS Plugin 与 MRCP-ASR Plugin 分别完成相应的合成或识别结果。 ASR Engine 和 TTS Engine 指美团语音自研的语音合成和语音识别引擎,MRCP 通过 HTTP/RPC 接口与之完成通讯。
|2.3 关键技术组件
2.3.1 MRCP 协议实现
2.3.2 MRCP Server 负载均衡
|2.4 MRCP-Server 模块结构

图6 MRCP服务模块结构
MRCP-TTS Plugin 和 MRCP-ASR Plugin 两个为核心的模块,以插件的形式加载到 MRCP-Server。
MRCP-TTS Plugin 和 MRCP-ASR Plugin 抽象出公共的模块:
事件/接口管理:订阅和注册 MRCP-Server 收到事件和消息,如信道建立事件、请求消息等等。 会话管理:管理会话的创建、打开、关闭、销毁过程。 线程池管理:管理调用 TTS 和 ASR 引擎服务接口所需的任务线程池。 配置管理:读取配置文件对各自 Plugin 定义的配置项。 语音数据处理:包括语音数据缓冲、时长计算等。 服务注册:负责将服务注册到 OCTO,支持 MRCP 服务实例激活、摘除的自动发现。 应用日志模块,将插件这一层的日志与美团的日志框架打通,将应用日志接入美团日志中心。
监控打点模块,将合成首包延时、状态事件等支持,接入美团 Raptor 监控平台。
鉴权模块,使用美团语音开放平台的统一认证服务,完成调用 TTS 和 ASR 引擎前的鉴权过程。
|2.5 部署方案
统一的服务入口:使用美团 MGW( 美团内部自研的四层负载均衡网关 ) 创建固定的虚拟 IP (VIP),提供唯一的服务访问入口。 资源隔离:为了减少语音合成和语音识别服务彼此间的影响,我们将 MRCP Server 拆分成两个服务,即 MRCP-TTS 和 MRCP-ASR,对二者进行隔离部署。 跨地域、多机房部署:将 MRCP-TTS 和 MRCP-ASR 服务部署在多个机房,并且跨地域部署,以提高服务稳定性。 Kamailio 热备:为了防止 Kamailio 出现故障以影响整个链路,我们对 Kamailio 也采用了跨地域、多机房的部署,并且由 MGW 完成对 Kamailio 的多机热备。 负载均衡:显而易见地,需要对 MRCP-TTS 和 MRCP-ASR 进行负载均衡。如何进行负载均衡?起初我们打算直接使用 MGW 对 MRCP-TTS 进行负载均衡,MGW 是支持到传输层的四层负载均衡,可以路由分发到具体的服务。在我们场景中所使用的 SIP、MRCP 均属于应用层的协议,数据传输基于 TCP/UDP,理论上四层负载均衡能够满足需要。但实际协议交互过程中,支持七层负载均衡的 Kamailio 能够在 SIP 协议经过的路由点时,在协议头中加入 和等字段,层层路由能够始终保持与同一台机器进行交互。比如,客户端通过 SIP-INVITE 经由 Kamalio 与 MRCP服务完成握手后,结束服务、客户端发送 SIP-BYE 消息时,Kamailio 可以准确路由到当时接受 INVITE 消息的同一个 MRCP 服务。因此,最终使用 Kamailio 完成对 MRCP-TTS 和 MRCP-ASR 的负载均衡。

三、实践与应用效果
|3.1 应用范围
3.1.1 美团内部业务赋能
美团外呼业务语音合成:结合小美智能外呼与木星自动外呼,在美团内部的太平洋客服坐席辅助外呼、营销类外呼、通知触达类外呼等场景,逐步接入 MRCP 协议下的流式语音合成。目前已接入 MRCP 的外呼机器人日均百万次合成调用,峰值约千路并发。
美团内呼业务语音合成:内呼主要是支持美团呼入热线的语音合成,包括:10107888-美团客服热线、10109777-外卖客服热线、10105777-美团商服热线、10101777-美团骑手热线以及其他长尾业务热线。目前已接入 MRCP 的热线呼入机器人日均近千万次合成调用量,峰值千余路并发。
3.1.2 外部商业化应用
|3.2 应用效果
在美团电话热线的呼入场景,使用 MRCP-TTS 升级原来的语音播报服务后,不满意度下降 0.25pp~3.92pp,平均电话服务时长缩短 2.19s~5.3s,可见 MRCP-TTS 的应用带来了更好用户体验。 在美团的智能外呼场景,结合 MRCP-TTS 提供流式语音合成服务后,对外呼机器人进行替换自研音色「美凡楠」的 A/B 试验,数据表明智能外呼通话成功率有效提升了 15% 。
四、结语
五、名词解释

六、本文作者
唐锐、森彬、子丰、亚男、王程、国桥、俞涛等,均来自美团平台/语音交互部。
七、参考文献
[1] Media Resource Control Protocol (2022) Wikipedia. Wikimedia Foundation. Available at: https://en.wikipedia.org/wiki/Media_Resource_Control_Protocol.
[2] 史俊波,詹舒波 (2010) MRCPv2协议及其在分布式语音资源解决方案中的应用, 中国科技论文在线-科技论文. Available at: http://www.paper.edu.cn/releasepaper/content/201009-322.
[3] zhu, james (2018) MRCP概要, CTI. Available at: http://www.ctiforum.com/news/guonei/534456.html.
[4] UniMRCP Introduction (no date) Home. Available at: https://www.unimrcp.org/.
[5] Kamailio Introduction (2022) The Kamailio SIP Server Project | The Open Source SIP Server. Available at: https://www.kamailio.org/w/.
