语音大模型数据返回
支持机型及最低版本
| 机型 | 版本 |
| 豹小秘 | ≥7.0 |
| 豹小秘 mini | ≥9.2 |
| 豹小秘 Plus | ≥9.5 |
| 招财豹 | ≥9.2 |
注意:orionos-eve-core支持的版本为2.49.0及以上
第一步:接收流式意图
当收到intent为 stream&events或 stream&streaming时候,接下来会收到大模型的流式数据。
建议:当收到这两个意图时候,表示是一个新query的起始,初始化相应的数据,保存此次query的sid、streamType以便在close此次query时使用,接着等待几百ms便会收到此次query的流式数据,在等待的几百ms时间内可自定义等待UI(例如:“AI正在思考中”)来填补过渡响应真空期。
意图接收详情查看“应用基础知识”文档,在onListenCallback 方法里回调意图。
第二步:接收流式数据
注册监听,接收数据
示例代码
this.speechCallback = new SpeechCallbackListener();
this.speechCallback.addListener(
'onSpeechStreamData', (e) => {
if (e.message) {
console.log(TAG, 'onSpeechStreamData: ' + e.message);
// 对返回的流式数据处理并展示
let result: ChatStreamInterface = JSON.parse(e.message);
}
});
//退出的时候需removeListener,以防多次addListener
this.speechCallback.removeListener()
停止接收流式数据
当用户手动关闭交互对话框,或此次query被别的query打断之后,需调用speechApi的closeStreamDataReceived方法通知服务端停止发送此次的query的流式数据,减少资源消耗。
示例代码
/**
* sid: 此次query的sid
* streamType:此次query的连接方式(如intent为'stream&events',则streamType对应‘events’;如intent为'stream&streaming',则streamType对应‘streaming’)
* closeType:此次query的close原因
*/
let data = {sid: sid, stream_method: streamType, closeType: closeType}
let paramJson = JSON.stringify(data);
speechApi.closeStreamDataReceived(paramJson)
export enum StreamType{
STREAM_INTENT_SSE = 'events',
STREAM_INTENT_WS = 'streaming'
}
export enum CloseType {
CLICK = 1, //点击
INTERRUPT = 2, //被别的query中断
TIMEOUT = 3, //流式数据传递结束之后5s无操作关闭对话框
DATA_TIMEOUT = 4 //连续两包流式数据之间的间隔超过5s
}
流式数据结构
export interface ChatStreamInterface {
sid: string; // 会话唯一标识
idx: number; // 当前包索引, 1为第一包, -1为最后一包
domain: string; // 领域信息,例如所属业务领域
intent: string; // 意图标识,用于识别当前消息的目的
client_id: string; // 业务线ID
group_id: string; // 行业ID
enterprise_id: string; // 企业ID
tts: boolean; // 是否需要播放 TTS
type: string; // 消息类型,例如 text、image、audio 等
version: string; // 协议或消息版本号
content: string; // 消息内容
sender: Sender; // 发送人信息
extra: Extra; // 扩展字段
}
/**
* 扩展字段
*/
export interface Extra {
trace_id: string; // 全链路ID,用于链路追踪
follow_up_question: string[]; // 相关问题列表,用于推荐追问
}
/**
* 发送人信息
*/
export interface Sender {
logo: string; // 服务logo
source: string; // 数据来源,例如 chatGPT
}