我使用MS Bot Framework创建了一个聊天机器人。我需要处理一个意图,例如:如果用户说找到一个项目,那么机器人应该询问项目ID"如果用户说找到id为1的项目或找到id 1,那么机器人不应该问项目ID,因为它已经提到过。处理这种情况的正确方法是什么?
答案 0 :(得分:2)
Luis主要由两部分组成 - intent
和entity
。意图代表话语或用户文本的意图。实体是应用程序域中的关键数据,在这种情况下,一个实体是id
。
首先,您需要训练您的LUIS以识别意图和实体。看看Create app that uses simple entity做同样的事情。所以在这里,在你的情况下,你可以创建一个名为FindItem
的意图和一个名为id
的实体,并针对各种场景进行训练。
第二部分是处理代码中的流程。触发luis意图时,将调用具有Luis意图修饰的方法,因此您需要查看实体id
是否存在于已识别的实体集中;如果没有提示相同。
您的代码如下:
[Serializable]
[LuisModel("MODEL_ID", "SUBSCRIPTION_KEY")]
public class RootDialog : LuisDialog<object>
{
[LuisIntent("FindItem")]
public async Task FindItem(IDialogContext context, LuisResult result)
{
var entities = result.Entities;
var id = entities.First(x => x.Entity == "id");
if ( id != null)
{
//Id entity is there, go ahead with your logic
}
else
{
//Id is not specified by user. Prompt for it.
PromptDialog.Text(context, UserEnteredId, "Please enter the item id.");
}
}
private async Task UserEnteredId(IDialogContext context, IAwaitable<string> result)
{
var message = await result;
//Here message contains the id entered by user.
//Proceed with your logic
}
//Rest of the logic
}