C#Bot框架LUIS意图

时间:2018-05-20 05:22:30

标签: c# .net botframework luis

我使用MS Bot Framework创建了一个聊天机器人。我需要处理一个意图,例如:如果用户说找到一个项目,那么机器人应该询问项目ID"如果用户说找到id为1的项目或找到id 1,那么机器人不应该问项目ID,因为它已经提到过。处理这种情况的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

Luis主要由两部分组成 - intententity。意图代表话语或用户文本的意图。实体是应用程序域中的关键数据,在这种情况下,一个实体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
}