Wit.ai似乎在故事之间随意跳跃

时间:2016-12-05 18:54:55

标签: wit.ai

我的Wit.ai机器人上有两个单独的简单故事,

第一个接受单词" Debug",发送" test"然后运行一个函数,将上下文内容输出到控制台,名为test_context()

第二个接收地址,运行一个更改名为new_session()的上下文的函数,然后向用户发送更改确认信息,如#34;您的位置已更改为{address}&# 34;

当我直接输入wit.ai测试控制台时,它似乎正确地检测故事并运行相应的功能,但是当我尝试通过Node.js API使用它时,它似乎完全随机地行动。

有时输入地址时会运行test_context()后跟new_session(),然后输出没有文本,有时输出测试文本后跟地址文本并且不运行任何函数,有时它会正常运行。

输入" Debug"时会发生同样的行为。同样。

后端设置正确,因为其他2个故事似乎完美无缺。

这两个故事今天早些时候都运行良好,我对机智故事本身没有任何改变,后端的变化甚至没有触及调试功能。

这是一个已知问题吗?

1 个答案:

答案 0 :(得分:0)

我也遇到了这个问题。

在我看来,当你没有正确地从wit.ai处理故事中的设置上下文变量时(例如通过将它们设置为null),它会弄乱故事。作为一名开发人员,你有责任正确地处理故事“客户端”,所以我可以理解wit.ai让你发生奇怪的事情。也许wit.ai决定跳楼子以防止他们的机器人崩溃,对我来说仍然有点神秘。也许你的问题是另一种类型,只是分享一个类似的观察和我的解决方案。

正是出于测试原因,我创作了三个故事;

  1. 处理问候
  2. 告诉x市的天气是什么
  3. 确定您何时计划会议
  4. 机器人连接到Facebook,我在我的nodejs express服务器上处理动作(比如计划会议)。

    我对机器人说:“我想明天安排一次会议”,结果是机智日期/时间。顺便说一句时间。这没关系。然后我发了一条消息“我想今天早上计划开会”。这导致了wit.ai上下文中的两个日期/时间变量。反过来,我的代码无法处理这个问题;两个时间戳导致null(可能json消息变得更复杂,我试图得到错误的字段)。这反过来导致必须返回的上下文变量为null。

    所以我做的是捕获上下文变量未填充时的错误,只填写[wit.js找不到日期]。这解决了这个问题,尽管我现在当然需要更好地处理这个错误。

    旧代码:

    'createAppointment': ({sessionId, context, text, entities}) => {
    return new Promise(function(resolve, reject) {
        const myDateTime = firstEntityValue(entities, 'datetime');
        console.log('the time trying to send ',myDateTime);
        createAppointment(context, myDateTime)
        context.appointmentText = myDateTime
        return resolve(context);
     },}
    

    新的,有效的代码:

    'createAppointment': ({sessionId, context, text, entities}) => {
    return new Promise(function(resolve, reject) {
        const myDateTime = firstEntityValue(entities, 'datetime');
        console.log('the time trying to send ',myDateTime);
        if(myDateTime){
          createAppointment(context, myDateTime)
          context.appointmentText = myDateTime
          return resolve(context);
        } else {
          context.appointmentText = '[wit.js could not find date]'
          return resolve(context);
        }
      });
    },
    

    希望这有帮助