如何从Microsoft团队消息中检索提及实体以及 LUIS 意向实体?



我目前正在处理一个机器人,它利用LuisRecognizer来匹配模型中定义的意图。启动机器人的初始消息使用提及来标识后续操作的目标。

LUIS 模型正确标识意向的主题,但其实体显然仅引用已标识用户的原始字符串值。从文档中,我被告知原始消息应该有自己的实体数组,其中包括原始提及。我应该能够在我的 NodeJS 机器人实现中session.message.entities访问它。但是,与 LUIS 意向匹配的任何传入消息上都不存在session.message

如何检索原始邮件的实体列表?

以下是我的机器人的初始化方式:

const recognizer = new builder.LuisRecognizer(config.get('bot.model'))
const intents = new builder.IntentDialog({ recognizers: [recognizer] })
intents.matches('reward', '/reward')
bot.dialog('/', intents)
bot.dialog('/reward', [(session, context, next) => {
// session.message does not exist here
}])

为了解决您关于实体列表的问题,您是否尝试过使用 context.entities 而不是 session.message.entities?虽然 session.message 确实具有"实体"属性,但与上下文对象不同,会话对象本身不会从 LUIS 调用接收数据。

作为瀑布步骤中的第二个参数传入的上下文(或参数或结果)对象包含从 LUIS 生成的意向和实体。

我创建了一个机器人,该机器人为其 LUIS 应用合并了 Cortana 的预生成警报应用。 下面是对话框"/set_alarm"的第一个瀑布步骤的代码。它将控制台记录 LUIS 调用中的 session.message 和上下文对象(此处称为 args):

bot.dialog('/', intents);
intents.matches('builtin.intent.alarm.set_alarm', '/set_alarm');
bot.dialog('/set_alarm', [
function (session, args, next) {
if (session.message) {
console.log('===n1st waterfall step, session.message object found:');
console.log(session.message);
} else {
console.log('session.message object not found.');
}
if (args) {
console.log('===nargs object found:');
console.log(args);
}
...
}, 
// additional waterfall steps
])

下面是第一个瀑布步骤的控制台输出的输出。这是通过模拟器进行聊天机器人交互的屏幕截图。

如果您仍然遇到问题,是否可以记录上下文对象,以便我们查看它包含的内容? 关于缺少session.message对象,您是否收到任何错误消息?您发布的代码看起来没有任何问题。

您可以在github上找到此聊天机器人的存储库:https://github.com/stevengum97/SO_Q43146320

最新更新