欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

百度自定义技能真机测试

程序员文章站 2022-07-13 14:41:23
...

       再有2天就过年了,终于在过年前调通了百度DuerOs自定义技能接口,可以初步实现语音交互功能.

       调试的过程非常坎坷.

  1.        开始根据文档和自己的判断,不知道在线调试的代码语音调用的事件需要自己编写.所以对于测试结果不知道怎么处理,群里问,回复说是要修改这个事件的代码.官网下载的代码粘贴过来,始终不能出现目标结果
  2.        官方群却不能给与具体的指导
  3.        因为是node.js,语言不熟悉
  4.        没有其他办法,今天在年前倒数第三天,终于2位前端熟悉js的同事帮助调整了js代码

       在线编辑代码方式的接口对接终于跑通了.充分验证了一句话,远亲不如近邻,2位js开发的同事很好,在以前的公司,很多同事是事不关己,不会伸出援手的.这是猪年一件很幸运的事情.也是我在年会感谢大家的一次回应.

        感悟是:

  1.      看似贫瘠的地方也有温暖,看似繁荣的地方也有荒芜.
  2.      多会一些知识,自信就多一些,尤其其他语言的代码,读懂,简单改写
  3.      不必再一个地方纠结时间太久,及早改变处理问题的策略,这次转变不算晚,很多意外,多种解决问题的方案.


开始调试不同的原因:


1.目前的自定义字典和百度官方文档不一样,开始以为是自定义词典配置的问题,调试不通,
后来经过学文和小乔调试node.js代码,而不是直接采用官方sdk的例子代码,测试才能跑通,注意事项参见下文红色标识。

下载的代码中没有这个分支:

if (this.request.isDialogStateCompleted())

每个分支的判断代码做了修改,目前都改成了card

2.一些坑,例如:表达式中不要使用“查个税”、“查询个税”等网络通用词汇

参考文档:


https://developer.dueros.baidu.c ... loy-sample_markdown


测试步骤:


1.创建自定义技能

选择入门模式,填写技能名称等信息

百度自定义技能真机测试
2.创建意图

其中包含了创建字典,创建表达式,创建槽位,测试意图,注意:表达式中不要使用“查个税”、“查询个税”等网络通用词汇,这个环节花费时间多,因为创建的自定义槽位和官网资料中的不一样,调试不通以为是这里的问题.后来放弃纠结这里,请同事帮忙测试.熟悉js的同事帮忙调试了代码

.百度自定义技能真机测试
3.配置服务

选择在线调试模式,本案例采用node.js作为开发语言,注意:槽位标识不要使用location ,mothsalary,原因目前未知,换成其他测试通过。另外官网下载的源代码缺少结果返回的内容,根据说明文档做了代码修改.

“退出”指令能执行

//目前的输入表达式是写死的,音响只认识表达式中的内容,之外的不认识.后续需要写成活的.

代码:
const Bot = require('bot-sdk');
const privateKey = require("./rsaKeys.js").privateKey;

class DuerOSBot extends Bot {
    constructor(postData) {
        super(postData);

        this.addLaunchHandler(() => {
            this.waitAnswer();
            let card = new Bot.Card.TextCard('欢迎使用技能');
            return {
                card: card,
                outputSpeech: '欢迎使用技能'
            };
        });

        this.addSessionEndedHandler(() => {
            this.endSession();
            return {
                outputSpeech: '感谢您的使用'
            };
        });

        this.addIntentHandler('tax', () => {
            let loc = this.getSlot('city');
            let monthlySalary = this.getSlot('number');
            if (!monthlySalary) {
                this.nlu.ask('number');
                let card = new Bot.Card.TextCard('你工资多少呢');

                // 如果有异步操作,可以返回一个promise
                return new Promise(function (resolve, reject) {
                    resolve({
                        card: card,
                        outputSpeech: '你工资多少呢'
                    });
                });
            }

            if (!loc) {
                this.nlu.ask('city');
                let card = new Bot.Card.TextCard('你在哪呢');
                return {
                    card: card,
                    outputSpeech: '你在哪呢'
                };

            }
            if (this.request.isDialogStateCompleted()) {
                let card = new Bot.Card.TextCard('你需要缴纳税款167.40元,缴纳社保及公积金1776元,税后工资是6056.60元');
                return {
                    card: card,
                    outputSpeech: '<speak>你需要缴纳税款<say-as type="number">167.40</say-as>元,缴纳社保及公积金<say-as type="number">1776</say-as>元,税后工资是<say-as type="number">6056.60</say-as>元</speak>'
                };
            }

        });

    }
}

exports.handler = function(event, context, callback) {
    try {
        let b = new DuerOSBot(event);
        // 0: debug  1: online
        b.botMonitor.setEnvironmentInfo(privateKey, 0);
        b.run().then(function(result) {
            callback(null, result);
        }).catch(callback);
    } catch (e) {
        callback(e);
    }
}


4.模拟测试

 

百度自定义技能真机测试

百度自定义技能真机测试
5真机测试

注意:数字的语音输入如果是0,需要读“零”,例如:6000,应该读:“六零零零”,“退出”指令发出后,无语音回复

百度自定义技能真机测试

相关标签: 语音识别