跳到内容 跳到主导航 跳到页脚

语音大模型数据返回

支持机型及最低版本

机型版本
豹小秘≥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
}

这篇文章是否有帮助?

0