设为首页 加入收藏

TOP

如何使用OLAMI自然语言理解开放平台API制作自己的智能对话助手小程序(二)
2017-10-10 16:33:23 】 浏览:5664
Tags:如何 使用 OLAMI 自然语言 理解 开放 平台 API 制作 自己 智能 对话 助手 程序
的返回,比如status就不再介绍了。

? ?说白了,开发平台解析你的语法之后,就是会告诉你这句话中的Slot和modifier,以及你的模块名称。
? ?Slot根据你选择的类型不同,你获取的内容不同。比如ext类型的,你可以拿到slot的名称和slot的值。

? ?Datetime类型,即你的Slot是时间,你还可以拿到时间的毫秒数,起始时间等。

? ?Number类型,表示你只会抓取数字,会得到数字的计算值等。

? ?Modifier就是你自己定义的要支持的操作,只要按照他们规定的格式命名就好。

? ?2.创建应用

? ?应用可以包含多个模块,具体包含哪些模块也是由你自己决定。OLAMI默认支持了“聊天”,“百科”,“查询日期”三个模块。如果你不需要可以去掉。内置模块的说明见

? ?点击下图中的配置模块添加自己写的模块和你希望添加的内置模块。比如对话系统模块中的nonsense就是聊天用的。你可以点配置模块右边的”测试”,输入要查询的句子就可以看到结果。

? ?如果测试结果能正确返回,就表明API接口也可以获取同样的结果。

? ?比如我在输入框中“查快递”就可以看到JSON格式的输出,如下图显示:

3.查看应用的key

? ?这个key就是你访问API 接口的钥匙,在你的应用中点击”查看key”就可以看到了。

4.访问自然语言解析API接口

? ?API接口是https协议,相关说明,我就不再赘述了。

? ?我使用的是小程序访问,相关代码如下,你代码下载包的input.js里可以看到:

function parseCorpus(corpus,object) {
    var usekey = Appkey;
    var usesecret = Appsecret;
    if (object.data.dialogtype == chat_type){
    usekey = ChatAppkey;
    usesecret = ChatAppsecret;
    }

  //获取sign的MD5值
  object.setData({
    text: '请稍后......'
  })
  var timestamp = new Date().getTime();

  var originalSign = usesecret + "api=" + api + "appkey=" + usekey + "timestamp=" + timestamp + usesecret;
  var sign = MD5.md5(originalSign);

  var rqdata = { "data": { "input_type": 1, "text": corpus }, "data_type": "stt" };
  console.log(JSON.stringify(rqdata))
  console.log('\r\n')
  wx.request({
    url: requestUrl,
    data: {
      appkey: usekey,
      api: api,
      timestamp: timestamp,
      sign: sign,
      rq: JSON.stringify(rqdata),
      cusid: userId,
      changebuttoncolor: "#d0e0e3"
    },
    header: {
      'content-type': 'application/x-www-form-urlencoded'
    },
    method: 'POST',
    success: function (result) {
      var data = result.data.data;
      if (result.data != null && result.data.status!=null&&result.data.status=='ok'){
        HandleOLAMIresponseData(data.nli[0], corpus, object);
        console.log('欧拉蜜有效数据', result.data);
      }else{
        console.log('欧拉蜜返回失败', result.data.status);       
        object.setData({
          text: API_data_error
        })
      }
    },

    fail: function ({errMsg}) {
      console.log('request fail', errMsg)
      object.setData({
        text: API_data_error
      })
    }
  })


};
  1. 根据获取到的Semantics内容提供服务

我的处理逻辑是根据不同的modifier进行相应的操作,不同的操作下又要检查slot,代码如下:

    function HandleOLAMIresponseData(data, corpus, object)
    {
         var textData='';  //text文本框要show的内容
         var semantics = data.semantic;
         if (semantics == null || semantics.length==0){
           if (data.desc_obj.result != null && data.desc_obj.result.length != 0 && data.desc_obj.status==0)  {
             if (data.type == 'joke' || data.type == 'cooking'){
               textData = data.data_obj[0].content;
             }else
               textData = data.desc_obj.result;
    
           }else
              textData='抱歉,我还理解不了你说的话。';
           object.setData({
             expresshead: '',
             text: textData
           })
           
         }else {
    
           for (var i = 0; i < semantics.length; i++) {
             var tempSem = data.semantic[0];
             if (tempSem.app == expressAPPname) { //仅处理快递模块的语义
               //处理modifier
               var mods = tempSem.modifier;
               if (mods.indexOf("query") > -1)
                 expAppinfo.OPT = OPT_QUERY;
               else if (mods.indexOf("query_num") > -1)
                 expAppinfo.OPT = OPT_QUERY_NUM;
               else if (mods.indexOf("query_name") > -1)
                 expAppinfo.OPT = OPT_QUERY_NAME;
               else if (mods.indexOf("query_name_num") > -1)
                 expAppinfo.OPT = OPT_QUERY_NUM_NAME;
    
               //获取slots,即快递公司名称和运单号
               var slots = tempSem.slots;
               if (slots != null) {
                 for (var j = 0;
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇pc端的企业网站(IT修真院test8).. 下一篇JavaScript 值类型和引用类型的初..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目