我的 wit.ai 应用中有三个故事:
- order_pizza: typical pizza ordering with size and toppings
- reserve_table: book a table for a specific date and time
- fav_topping: query favourite pizza topping from historical data by date
第三个,fav_topping 有点特别。用户可以询问“六月我最喜欢的浇头是什么?”。得到答案后,可以通过更改日期再次询问,例如“嗯,七月?”。
更正式地说:假设我有一个包含多个实体(X 和 Y)的故事。用户用几个参数(a 代表 X,b 代表 Y)提出一个问题,然后得到答案。然后再次询问(c 表示 X),我的机器人通过将当前参数与之前的参数混合来给出答案(c 表示 X,b 表示 Y)。
为了处理这个问题,我从头开始循环我的 fav_topping 故事: fav_topping story with a loop-back
完美运行,但我有一个问题。永无止境。所以不能阻止它,用户不能改变话题。这是来自我的 node.js 客户端的日志,使用交互模式:
> What was my favourite topping in June?
fav_topping
context in: {}
entities in: {"contact":[{"confidence":0.9965486088458536,"type":"value","value":"my","suggested":true}],"datetime":[{"confidence":0.9954243915206602,"type":"value","value":"2017-06-01T00:00:00.000-07:00","grain":"month","values":[{"type":"value","value":"2017-06-01T00:00:00.000-07:00","grain":"month"},{"type":"value","value":"2018-06-01T00:00:00.000-07:00","grain":"month"},{"type":"value","value":"2019-06-01T00:00:00.000-07:00","grain":"month"}]}],"intent":[{"confidence":0.9969200405818317,"value":"fav_topping"}]}
context out is: {"ft_answer":"Your favourite topping was tomato for sure :) *"}
sending... {"text":"Your favourite topping was tomato for sure :) "}
> and in June?
fav_topping
context in: {"ft_answer":"Your favourite topping was tomato for sure :) "}
entities in: {"datetime":[{"confidence":0.994470434703695,"type":"value","value":"2017-06-01T00:00:00.000-07:00","grain":"month","values":[{"type":"value","value":"2017-06-01T00:00:00.000-07:00","grain":"month"},{"type":"value","value":"2018-06-01T00:00:00.000-07:00","grain":"month"},{"type":"value","value":"2019-06-01T00:00:00.000-07:00","grain":"month"}]}]}
context out is: {"ft_answer":"Your favourite topping was tomato for sure :) "}
sending... {"text":"Your favourite topping was tomato for sure :) "}
> OK, I want a normal pizza with tomato and pepperoni
fav_topping
context in: {"ft_answer":"Your favourite topping was tomato for sure :) "}
entities in: {"contact":[{"confidence":0.5452832324099028,"type":"value","value":"I","suggested":true}],"pizza_size":[{"confidence":0.9769454518025678,"type":"value","value":"middle"}],"pizza_topping":[{"confidence":0.9934795348369287,"type":"value","value":"tomato"},{"confidence":0.9505825366331593,"type":"value","value":"pepperoni"}],"intent":[{"confidence":0.6669035510798399,"value":"order_pizza"}]}
context out is: {"ft_answer":"Your favourite topping was tomato for sure :) "}
sending... {"text":"Your favourite topping was tomato for sure :) "}
> Book me a table for 5 persons at 9pm
fav_topping
context in: {"ft_answer":"Your favourite topping was tomato for sure :) "}
entities in: {"contact":[{"confidence":0.8387365394318869,"type":"value","value":"me","suggested":true}],"number":[{"confidence":1,"type":"value","value":5}],"datetime":[{"confidence":1,"type":"value","value":"2016-07-07T21:00:00.000-07:00","grain":"hour","values":[{"type":"value","value":"2016-07-07T21:00:00.000-07:00","grain":"hour"},{"type":"value","value":"2016-07-08T21:00:00.000-07:00","grain":"hour"},{"type":"value","value":"2016-07-09T21:00:00.000-07:00","grain":"hour"}]}],"intent":[{"confidence":0.9997353858626356,"value":"reserve_table"}]}
context out is: {"ft_answer":"Your favourite topping was tomato for sure :) "}
sending... {"text":"Your favourite topping was tomato for sure :) *"}
问题是:我如何以手动/编程方式告诉 BE 完成故事?或者,我如何设置我的故事来处理切换?
还有一点需要注意:正如您在我的日志中看到的那样,BE 很好地理解了用户开始了一个新主题(认识到意图已更改为“order_pizza”和“reserve_table”)。如果我能明确定义故事的意图,也许会有很大帮助。你怎么看?(对我们现在的内容没有太大的改变:定义故事的第一句话)