【发布时间】:2018-05-20 05:22:29
【问题描述】:
我使用 MS Bot Framework 创建了一个聊天机器人。我需要处理一个意图,例如:如果用户说找到一个项目,那么机器人应该询问项目 ID“,如果用户说找到一个 ID 为 1 的项目或找到一个 ID 1,那么机器人不应该询问项目 ID已经提到过。处理这种情况的正确方法是什么?
【问题讨论】:
标签: c# .net botframework azure-language-understanding
我使用 MS Bot Framework 创建了一个聊天机器人。我需要处理一个意图,例如:如果用户说找到一个项目,那么机器人应该询问项目 ID“,如果用户说找到一个 ID 为 1 的项目或找到一个 ID 1,那么机器人不应该询问项目 ID已经提到过。处理这种情况的正确方法是什么?
【问题讨论】:
标签: c# .net botframework azure-language-understanding
Luis 主要由两部分组成——intent 和entity。 Intent 代表话语或用户文本的意图。实体是应用程序域中的关键数据,在您的例子中,一个实体是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
}
【讨论】: