wit.ai 运行操作如何处理后续消息中的上下文



我正在使用node-wit来开发一个聊天机器人应用程序。 这在大多数情况下都工作正常,但我在使用上下文时遇到了问题。

我正在使用运行操作 api:

this.witClient.runActions(customer._key, messageText, witContext).then((newContext => {}
)).catch(reject);

我已经定义了许多操作,这些操作设置了上下文。

只要上下文发生在一条消息上,这就可以正常工作。 例如,如果我要调用一个名为 addProduct 的操作:

addProduct({sessionId, context, text, entities}) {
return new Promise((resolve, reject) => {
context.product = `myNewProduct';
resolve(context);
});
},

然后,它将使用"产品"上下文键显示一条消息。

但是,当我尝试在 2 条消息上使用它时,它似乎丢失了上下文(例如,在询问多项选择题然后处理该响应时)。

如果我了解它是如何正常工作的,那么 node-wit 不会将上下文保留在消息之外(我一开始假设这是因为我正在传递会话密钥)。

我看到的解决方案是以会话/用户特定的方式存储生成的上下文(在本例中为 newContext),然后在用户发送新消息时恢复并再次传递它。

意思是,像这样:

witContext = getContextFromSession();
this.witClient.runActions(customer._key, messageText, witContext).then((newContext => { setContextInSession(newContext) } )).捕获(拒绝);

这是正确的处理方式吗?

当然,你必须存储你的上下文状态,你决定如何存储它。但是,如果您要拥有大量用户,请考虑最有效的方法是什么,并且您的资源可用。

正如您在nodeJs的官方示例中所看到的,在调用wit操作之前获得会话 https://github.com/wit-ai/node-wit/blob/master/examples/messenger.js,有一个名为findOrCreateSession的方法。

在我的特殊情况下,我将其存储在数据库中,因此我在调用操作之前获取会话,以便我可以发送上下文,然后在操作中我再次查询会话以修改生成的上下文并再次存储它,尝试满足您需求的最佳实现。

最新更新