olami开发平台网址:https://cn.olami.ai/open/website/home/home_show
下面简单介绍下怎么在olami开放平台编写语法。
1.登录主页注册账户后,需要创建应用
2.创建应用如下图所示,填写名称,选择应用的类型,填写应用描述
3.应用创建好后,如下图所示,可以点击查看key,会有弹出窗口显示appkey,secret等信息,在olami sdk初始化的时候需要用到这几个信息。
点击NLI系统,进入grammar编写界面。
4.如下图所示点击进入模块
还可以导入系统的模块,点击上图右上角红圈位置button。
5.NLI系统编辑界面如下
上面画红线的点击,可以选择编辑grammar,rule ,slot,
如右侧红圈所示,点击可以新增grammar的编写。
6.grammar的编写界面
左侧“?”的红圈点击可以看到编写示范提示
右侧红圈点击展开如下所示:
可以在编辑grammar的同时,添加rule和slot等,这样更方便。
7.编写slot
上图添加一个songname的slot,类型选择ext表示可以是任何字符串,还可以限定长度。
8.编写rule
9.编写grammar
10.发布grammar
11.测试grammar
12.测试结果页面
13.简述一个包含rule,slot的语法
如步骤9种图所示
名称是:play_song
内容是:
want_to_listen是一个rule,其内容是:
“[]”内表示可以有,也可以去掉
“()“内的内容是有的,而中间加入了”|“表示或者的关系,即使两者或者多者中选一,比如上面的内容可以匹配的语句有:我想听,我要听,我想播放,我要播放,想听,想播放,要听,要播放等等。
songname 是一个slot,由于这个slot建立的时候,选择的是ext,表示任意字符串,那么这个songname可以匹配任何字符串。
songname后面的“[ ]”内又有一些词,但由于是在空括号内,所以可以存在,也可以不存在。所以上面的这个语法匹配的说法有:我想听三国演义,播放三国演义,我想听三国演义这本书,我要听三国演义这本书等等。
最后面有个“{@=play}”,这个是一个modifier,表示定义了这个语法的动作行为,这个语法编辑好后,比如测试的时候说我要听三国演义,那么返回的json字符串如下:
{
"data": {
"asr": {
"result": "我要听三国演义",
"speech_status": 0,
"final": true,
"status": 0
},
"nli": [
{
"desc_obj": {
"result": "正在努力搜索中,请稍等",
"status": 0
},
"semantic": [
{
"app": "musiccontrol",
"input": "我要听三国演义",
"slots": [
{
"name": "songname",
"value": "三国演义" }
],
"modifier": [
"play"
],
"customer": "58df512384ae11f0bb7b487e"
}
],
"type": "musiccontrol"
}
]
},
"status": "ok"
}
从上面可以看到json中,有定义的slot,rule是songname匹配了三国演义这个词,modifier是play,表示要求播放。type是app名称,这里代表musiccotrol这个app。解析这个json比较容易,关键在于语法的编写。
详细语法编写可以参考官方相关网页:https://cn.olami.ai/wiki/?mp=nli&content=nli2.html