Websocket API
WebAPI 接口描述
大模型互动客户端API接口采用websocket协议的连接方式, 直接进行语音聊天。
主要流程
- 连接
- 连接成功后发送数据, 接收数据
- 关闭连接
- 名词解释:
- 连接: 这里指TCP连接及握手(Opening Handshake), 一般WebSocket库已经封装,用户不必关心
-
发送数据帧:Sending Data Frame, 类似包的概念,指一次发送的内容 。从客户端到服务端。
- 文本帧:Opcode 0x1 (Text), 文本指令等
- 二进制帧:Opcode 0x2 (Binary), 音频数据帧
-
接收数据帧: Receiving Data Frame, 类似包的概念,指一次发送的内容 。从服务端到客户端。
- 文本帧:Opcode 0x1 (Text), 识别结果和事件
- 二进制帧:Opcode 0x2 (Binary), 实时语音的回答数据
- 关闭连接:Closing Handshake。 关闭连接后就停止了对话
通常WebSocket库用需要用户自己定义下面的3个回调函数实现自己的业务逻辑。
1连接成功后的回调函数:
2{
3 #通常需要开启一个新线程,以避免阻塞无法接收数据
4 1.1 实时发送音频数据帧
5 1.2 发送文本
6}
7
8接收数据的回调函数
9{
10 2.1 实时返回音频数据帧
11 2.2 实时返回文本消息
12}
13
14服务端关闭连接的回调函数
15{
16 3. 关闭客户端连接。
17}
在线调试&示例代码
目前提供如下demo及演示功能.
语言 | 收发音频 | 采集音频 | 播放音频 |
---|---|---|---|
javascript | Y | Y | Y |
Go | Y | ||
C | Y |
webAPI SDK(javascript)
webAPI SDK(Go)
webAPI SDK(C)
请求说明
连接地址:wss://rtc-aiotgw.exp.bcelive.com/v1/realtime?a=XXXX&id=YYYY&t=ZZZZ&ac=pcmu
如果连接成功,一般WebSocket库会发起回调。
连接具体参数说明
参数 | 类型 | 选项 | 说明 |
---|---|---|---|
a | string | 必填 | 控制台上的大模型互动应用ID |
id | int | 必填 | 大模型互动实例 ai_agent_instance_id 值, 创建大模型互动实例API |
t | string | 必填 | 连接大模型互动实例的context.token值, 创建大模型互动实例API |
ac | string | 可选 | 音频格式,取值有raw,raw16k,pcmu, g722,opus; 默认是raw16k |
发送音频数据帧
注意帧的类型(Opcode)是Binary
内容是二进制的音频内容。 除最后一个音频数据帧, 每个帧的音频数据长度为20-200ms。 建议最佳160ms一个帧,有限制的也建议80ms。
计算方式:
16000采样率: 1s音频 16000采样点
16bits: 一个采样点 16bits = 2 bytes
1s : = 1000ms
即 160ms 16000 2bytes / 1000ms = 5120bytes
实时语音识别api 建议实时发送音频,即每个160ms的帧之后,下一个音频数据帧需要间隔160ms。即:文件,此处需要sleep(160ms)。
发送文本对话信息
注意帧的类型(Opcode)是Text
示例:
[T]:你好!
返回说明
接收数据帧
正常音频数据
注意帧的类型(Opcode)是Binary
WebSocket opcode:binary
WebSocket消息体:音频二进制数据, 具体格式是由连接参数ac确定的
正常文本响应数据
1// 互动智能体事件
2[E]:[AGENTID]:2233343116640256
3[E]:[VOICE_COMING]
4[E]:[TTS_BEGIN_SPEAKING]
5[E]:[TTS_END_SPEAKING]
6
7// ASR的返回结果
8[Q]:[M]:上海
9[Q]:[M]:上海有多少
10[Q]:[M]:上海有多少人
11[Q]:上海有多少人?
12
13// 大模型回答结果
14[A]:[M]:人口数量啊。
15[A]:[M]:上海有
16[A]:[M]:2487.4万人。
17[A]:人口数量啊。上海有2487.4万人。