这篇文章上次修改于 756 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

项目测试接入讯飞AIUI开放平台,在使用技能时发现对于填槽对话类意图,在所有设置的槽都填满即意图结束后,短时再次重新进入该意图时会发生直接使用之前填好的槽直接跳过设置交互逻辑问题。

经过学习讯飞开发文档,可以为服务设置托管模式解决。

设置方法为为技能编写技能后处理脚本(java script),入口如下:
aiui-skill.png
简单示例脚本:

AIUI.create("v2.1", function (aiui, err) {
    var response = aiui.getResponse();
    var requestObject = aiui.getRequest().getObject();
    //获取当前对话的填槽状态
    var dialogState = requestObject.request.dialogState;
    //判断填槽状态是否已完成
    console.log("dialogState=" + dialogState);
    if (dialogState != null && dialogState != "COMPLETED") {
        var intentName = requestObject.request.intent.name;
        console.log("intentName=" + intentName);
        if (intentName == "service") {
            response.addDelegateDirective();
        }
        else if (intentName == "call") {
            response.setOutputSpeech("我在");
        }
        else if (intentName == "finish") {
            response.setOutputSpeech("再见");
        }
    } else {
        var intentName = requestObject.request.intent.name;
        console.log("intentName=" + intentName);
        if (intentName == "service") {
            response.setOutputSpeech("请稍候...");
        }
        else {
            response.setOutputSpeech("槽已填满,接下来我们做更多的事情吧");
        }
    }
    aiui.commit();
})

说明:
serveice 意图是前面提到的有问题的意图,在脚本中每次交互后判断是否结束,如果未结束设置为托管;
callfinish 意图是启动和结束对话的意图处理。

提示:

  1. 脚本中的console.log()打印的日志显示页面底部,日志打印只有在页面上 技能体验 功能使用文字交互方式调试使用,实际开发接入无法查看;
  2. 技能修改后需要进行技能发布,否则更新无法生效。