流式文本驱动指令

最近更新时间:2024-10-16 15:29:11

我的收藏

接口说明

创建长连接通道后,可以通过 websocket 长连接发送流式文本驱动数智人。
流式文本驱动指令分为子句模式与非子句模式,区别如下:
1. 服务端是否会重新组句:非子句模式下服务端会重新组句,子句模式下服务端不会重新组句。例如非子句模式下,依次发送流式文本数据包:“您”、“好”、“我是”、“数”、“智”、“人”,那么服务端收到后就会重新组句为“您好,我是数智人”;子句模式下则不会重新组句,所以需要发送一句连贯的话语例如“您好,我是数智人”。
2. 是否支持插播:非子句模式不支持插播,子句模式支持插播能力,设置字段 IsInsertSentence=true 即可。
3. 是否会补 final:非子句模式下,若在2s内未发送流式文本驱动指令,那么服务端就会自动补充 final 数据包,建议在一段文本内容结束后及时发送 final 数据包避免出现数智人卡顿的情况。

服务端是否会重新组句
服务端是否会补 final
是否支持插播
子句模式
非子句模式

请求参数

参数名称
类型
必选
描述
ReqId
String
单次驱动的唯一标识。每一段流式文本指定一个32位 uuid 值(不包含‘-’)。
注意:
每一段流式文本序列指定一个 ReqId,而不是每一次请求指定一个。
值得注意的是,在发送 final 包时仍然使用的是指定的这一个 ReqId,不需要再生成一个。
SessionId
String
会话唯一标识。
Command
String
SEND_STREAMTEXT,发送流式文本。
Data
Data
数据对象

Data

名称
类型
必选
描述
Text
string
流式文本内容,只需要发送增量的文本。每个片包字符串长度限制2000字节。
注意:
子句模式发送要求:
1. 输入文本应为完整的句子序列,例如以,。!?等标点符号分割的文本。
2. 单个子句长度应大于10个汉字或单词。
非子句模式发送要求:
1. 流式非子句不支持Text中带SSML标签
2. 发送速度不能过慢,过慢会导致出现非预期的 SpeakStatus,推荐发送速度与大模型返回数据的速度一致。
Seq
int
流式文本片包序号,序号必须从1开始。
IsFinal
bool
用于标记本次流式文本驱动是否结束,默认值 false。
注意:
1. 发送 final 包的时机
当流式文本驱动指令的文本内容 Text 都已发送完毕后,需要再发送一个 IsFinal=true 的驱动指令(这里简称 final 包,Text 字段可带有文本内容也可以是空串),来结束当次流式文本驱动,使数字人回到静默状态。
2. 没有及时发送 final 包会出现的问题:
对于流式文本驱动指令,包含子句模式与非子句模式,都可能会出现数智人播报期间卡顿的问题。
Interrupt
bool
强制打断标记,缺省值:false。传入 true 并且 Text 为空,表示打断流式文本。
注意:
对于如何发送强制打断的驱动指令(Interrupt=true),在 Data 中只需要填充 Seq 以及 Interrupt 的数据,其他字段置空处理即可,注意不可省去 Seq(设置为非0即可),不然会打断无效,参考示例三。
SmartActionEnabled
bool
是否开启智能动作,缺省值:false。为 true 并且输入的文本或者话术增强后的文本没有动作标签则会生成智能动作。
IsSentence
bool
是否是子句模式,缺省值:false。为 true 服务端不会做重新组句。
IsInsertSentence
bool
是否是插入的子句,缺省值:false。为 true 并且是子句模式则表示当前分片需要插播。
VideoSeiInfo
string
需要在视频流 SEI 中携带的信息,字符串内容为 json 格式。发送后会在视频流播报本次响应时在 SEI 中携带。当前仅支持 2D 形象,视频流中信息说明参见:视频流嵌入信息说明

请求示例

示例一:正常的流式文本片包
{
"Header": {},
"Payload": {
"ReqId": "d7aa08da33dd4a662ad5be508c5b77cf",
"SessionId": "m318552187863054171",
"Command": "SEND_STREAMTEXT",
"Data": {
"Text": "流式文本内容",
"Seq": 1,
"IsFinal": false
}
}
}
示例二:流式文本结束包
{
"Header": {},
"Payload": {
"ReqId": "d7aa08da33dd4a662ad5be508c5b77cf",
"SessionId": "m318552187863054171",
"Command": "SEND_STREAMTEXT",
"Data": {
"Text": "流式文本结束了",
"Seq": 60,
"IsFinal": true
}
}
}
示例三:打断正在播报的非子句模式或子句模式的流式文本
{
"Header": {},
"Payload": {
"ReqId": "d7aa08da33dd4a662ad5be508c5b77cf",
"SessionId": "m318552187863054171",
"Command": "SEND_STREAMTEXT",
"Data": {
"Seq": 40,
"Interrupt": true
}
}
}
示例四:正常的流式文本子句模式片包
{
"Header": {},
"Payload": {
"ReqId": "d7aa08da33dd4a662ad5be508c5b77cf",
"SessionId": "m318552187863054171",
"Command": "SEND_STREAMTEXT",
"Data": {
"Text": "流式文本子句模式内容",
"Seq": 1,
"IsFinal": false,
"IsSentence": true,
"IsInsertSentence": false//如果是需要插播的子句,则设置该值为true
}
}
}