gpt4 book ai didi

node.js - wit.ai runActions 如何处理后续消息中的上下文

转载 作者:太空宇宙 更新时间:2023-11-04 02:08:07 27 4
gpt4 key购买 nike

我正在使用 node-wit 开发聊天机器人应用程序。这大部分工作正常,但我在使用上下文时遇到了问题。

我正在使用 runActions 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不会将上下文保留在消息之外(我一开始就这么认为,因为我正在传递 session key )。

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

意思是这样的:

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

这是正确的处理方式吗?

最佳答案

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

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

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

关于node.js - wit.ai runActions 如何处理后续消息中的上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43413859/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com