【问题标题】:C# Bot Framework LUIS Intents [closed]C# Bot 框架 LUIS 意图 [关闭]
【发布时间】:2018-05-20 05:22:29
【问题描述】:

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

【问题讨论】:

标签: c# .net botframework azure-language-understanding


【解决方案1】:

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
}

【讨论】:

  • id 可以是数字或字母,也可以是不同的字符串长度。如何为此场景创建实体?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-13
  • 1970-01-01
  • 2020-02-29
相关资源
最近更新 更多