更新时间:2025-06-26 GMT+08:00

常见问题

智能交互SDK安装包里为什么有图片资源?

SDK里面包含图片资源,是因为智能交互的动效、背景可能需要图片资源才能展示更好的效果。所以智能交互Web SDK为了方便用户集成使用,会同时包含UI相关资源。

speechRecognized和semanticRecognized通知的流式返回有什么差异?

差异如下所示:

  • speechRecognized的流式返回是覆盖式返回。后一条通知中的text字段值包含前一条通知的内容。例如:第一条通知的text值为“你吃”,第二条新识别了“饭了么”,则第二条text值为“你吃饭了么”。
  • semanticRecognized的流式返回是分段式返回。后一条通知中的text字段值与前一条通知的内容是上下衔接关系。例如:第一条通知的text为“你吃”,第二条新返回了“饭了么”,则第二条text值为“饭了么”,需要将两条通知的text值拼接在一起才是完整的内容。

文本问答的用法

智能交互默认是语音问答,如需使用文本问答,需要切换模式。可以通过下述2种方式处理:

  • 在开始对话时设置。使用startChat接口开启对话时,设置成文本问答模式,如下所示:
    const { result } = await HwICSUiSdk.startChat({ interactionMode: 'TEXT' });
  • 在对话过程中设置。如果已经调用startChat,且处于语音问答模式下,则可以调用interactionModeSwitch接口修改为文本问答模式,如下所示:
    const { result } = await HwICSUiSdk.interactionModeSwitch({ interactionMode: 'TEXT' });

切换至文本问答模式后,就可以通过接口sendTextQuestion进行文本问答了。

数字人主动播报与文本问答的区别是什么?

智能交互同时支持数字人主动播报和文本问答两种能力,两者都是通过文字驱动数字人讲话。

区别如下所示:

  • 主动播报:主动播报是直接将sendDrivenText接口传入的文本作为数字人播报内容,来驱动数字人讲话。
  • 文本问答:文本问答是使用sendTextQuestion接口输入文本问题,将大模型返回内容作为数字人播报内容,而不是直接播报问题。

为什么要定制语音唤醒模型?

根据唤醒词定制的唤醒模型,可以提升唤醒词的准确率。

能否直接在本地修改唤醒词?

不行。模型和唤醒词是绑定的,不支持本地修改唤醒词。

集成WebSDK的网页加载时自动调用create接口创建数字人,但是后续的数字人播报为啥没有声音?

原因请参考媒体和Web Audio API 的自动播放指南,所以出现数字人没声音的问题时,建议按照下述步骤排查并做出相应处理。

  1. 添加按钮点击触发create接口后,测试是否有声音。如果有声音,就是浏览器的安全策略导致,需要引导用户在create之前点击页面。
  2. 检查扬声器设备是否正常。
  3. 如果有增删扬声器设备的行为,请刷新或重新打开挂载数字人的页面后重试。如果还不行,请参考第二条,检查设备是否正常。

自定义聊天按钮如何对应数字人聊天状态?

数字人聊天过程中,有如下状态:

上述提供的数字人聊天状态对应关系,仅为SDK提供的样例,用户可以根据实际场景自行处理。

WebSDK显示默认的按钮以及字体大小比演示页面大怎么解决?

WebSDK的CSS样式是基于两种尺寸1920*1080(PC版)和1080*1920(移动版、大屏版)进行最优布局的,CSS文件里面宽高的单位都是px。所以在移动端等屏幕尺寸较小的设备上,SDK内置字体大小、按钮大小均会比例展示失衡,字会比较大。因此提供如下两种解决方案:

  1. 不使用SDK内置的默认按钮和聊天列表等组件,通过SDK提供的接口和通知自行开发对应的操作UI界面;
  2. 使用对应编译工具中类似px2rem功能的插件,将SDK自带CSS文件中的px转为rem,在根节点上面通过控制font-size属性来调整字体、按钮等的相对尺寸。

为什么使用接口addEventListeners注册回调有时候不生效?

部分用户按照下面方式注册回调,发现回调注册没生效。

HwICSUiSdk.create({
  serverAddress: 'metastudio-api.cn-north-4.myhuaweicloud.com',
  onceCode: 'aaa',
  robotId: 'aaa',
  containerId: 'ics-sdk',
});
HwICSUiSdk.addEventListeners({
  error: (icsError) => {
    console.error('icsError', icsError);
  },
  jobInfoChange: (jobInfo) => {
    console.info('jobInfoChange', jobInfo);
  } 
});

这是因为create接口里面,有异步重置回调的操作,如果不进行接口调用时序控制的话,addEventListeners接口会先于create中重置回调的逻辑执行,这就导致刚注册上的回调又被重置了,重置的效果就是清空了。那么怎么进行有效的回调注册呢?有以下两种方式(推荐方式一):

  • 方式一:在create接口中直接注册,如下所示:
    HwICSUiSdk.create({
      serverAddress: 'metastudio-api.cn-north-4.myhuaweicloud.com',
      onceCode: 'aaa',
      robotId: 'aaa',
      containerId: 'ics-sdk',
      eventListeners: {
        error: (icsError) => {
          console.error('icsError', icsError);
        },
        jobInfoChange: (jobInfo) => {
          console.info('jobInfoChange', jobInfo);
        }
      }
    });
  • 方式二:控制接口调用的时序,在create接口执行结束后再注册,如下所示:
    async function init(){
      await HwICSUiSdk.create({
        serverAddress: 'metastudio-api.cn-north-4.myhuaweicloud.com',
        onceCode: 'aaa',
        robotId: 'aaa',
        containerId: 'ics-sdk',
      });
      HwICSUiSdk.addEventListeners({
        error: (icsError) => {
          console.error('icsError', icsError);
        },
        jobInfoChange: (jobInfo) => {
          console.info('jobInfoChange', jobInfo);
        } 
      });
    }
    
    init();

如果控制台开启静默退出时长,无对话一段时间后为什么会报错999000002,并重新开始交互?

3.3.1之前的版本不支持控制台开启静默退出时长,可参考下述解决方案处理:

  • 在MetaStudio控制台关闭静默退出时长,详细操作请参见对话配置
  • 升级Web SDK的版本至3.3.1或以上版本。