大语言模型一般都是流式返回文字,如果等全部文字返回了一次性去TTS,那么延迟会非常严重,常用的方法就是通过标点符号断句,返回了一句话就提交给TTS。随着流TTS的出现,就可以直接把大模型返回的文字灌给流TTS,实现低延迟的,文本到语音转换。
下图是我们电话机器人接口适配流TTS的原理,完整的接口说明可以看 请点击这里 https://www.ddrj.com/callcenter/httpflow.html
主要涉及到的技术点,就是FreeSWITCH通过websocket流TTS放音。
现在很多大模型直接支持语音输入和语音输出,顶顶通电话机器人中间件也都有对应的接口 ,可以通过TCP和UDP协议 输出声音流, 对接任意大模型。
流对接(推流到第三方接口和同时播放流)
app: cti_audio_stream
参数 remote-ip:remote-port
- native 可选参数 如果不设置,流格式为 8000hz 16位,如果设置了,就是原始的音频格式
- param 自定义参数
推流协议
- 前面4字节 引导数据长度 网络字节顺序
- 时间戳 8字节
- 引导数据
{"uuid":"","codec":"","param":"自定义参数"}
- 数据流
连接断开后会自动重连,并且重发引导数据。
返回的放音流需要和推流的编码一样,不需要引导数据。
流对接(旁路)
app: cti_unicast_start 启动推流
参数 tcp|udp remote-ip remote-port <local-ip> <local-port> <play|mix>
- tcp|udp 使用tcp还是udp协议推流
- remote-ip 远端 ip
- remote-port 远端端口,不设置用0.0.0.0
- local-ip 本地端口,不设置好用0,随机端口
- play|mix
- play 支持播放远端返回的流,发送方必须是远端IP和远端端口
- mix 把远端的流和本地放音混音
api uuid_cti_unicast_start 启动推流
参数 uuid tcp|udp remote-ip remote-port <local-ip> <remote-ip> <play|mix>
api uuid_cti_unicast_stop 停止推流
参数 uuid