繁体   English   中英

Bot Framework C#v4的动态提示

[英]Dynamic Prompt with Bot Framework C# v4

我正在建立一个聊天机器人来安排与人们的会议,截至目前,我已经建立了一个简单的瀑布模型。 第一个查询找到意图,然后完成任务

  1. 几点了?
  2. 与谁?
  3. 主题是什么?

但这感觉就像这个人正在填写表格。 我还构建了一个没有瀑布模型的基本机器人,但用户必须在一个查询中包含所有上述信息。

例如,“安排与Aditya和Jhon在明天上午10:30举行会议,明天作为早餐”

我的目标是根据第一个查询中缺少的内容询问动态提示例如,“明天上午10:30安排会议”,将提示输入名称和主题。 或者“安排与Aditya早餐会议”会提示时间。

我打电话给路易斯,因为它比用户更好,因为它比Hardcode好,而且“明天上午10:30”会给我一个DateTime Formate,我也不用知道明天的日期基于今天。

Aditya,为您需要的实体设置状态对象。 这些将是谁,什么,什么时候我猜? 看起来你已经在训练路易斯了,所以一定要训练它来从话语中挑选实体。 当Luis带回您的新约会意图时,它也将拥有它能够提取的实体。 将找到的实体保存在状态对象中。 现在,当您浏览瀑布步骤时,首先检查状态对象。 如果您已经拥有该实体,则跳过提示。 如果不这样做,请继续提示。 看看github上的这个示例 它相当复杂,但显示了我在说什么。 特别要注意'GetAllRequiredPropertiesAsync'方法。 那是同一个人正在做我刚才描述的事情。 你是100%正确的轨道,这应该让你到达你想去的地方。

我正在编辑添加一些示例代码。

在来自github的代码中,构造函数声明了两个瀑布步骤:

var waterfallSteps = new WaterfallStep[]
{
    GetAllRequiredPropertiesAsync,
    BookTableAsync,
};

方法'GetAllRequiredPropertiesAsync'正在检查每个所需数据以预订表。 这个方法真的很长,所以我只会展示一小段相关的代码。

经过一系列设置后,这段代码最终会提示用户输入表格预留中缺少的任何内容

 var options = new PromptOptions()
    {
        Prompt = MessageFactory.Text(reservationResult.NewReservation.GetMissingPropertyReadOut()),
    };
    // Start the prompt with the first missing piece of information.
    return await stepContext.PromptAsync(GetLocationDateTimePartySizePrompt, options);

现在,看看'GetLocationDateTimePartySizePrompt'。 该对话框在第53行的同一页面上声明。它检查预约是否完成,如果不是,它会读出它已经知道的内容,然后要求其余的。 这种情况发生在101左右,然后在此代码的第109行await promptValidatorContext.Context.SendActivityAsync(newReservation.GetMissingPropertyReadOut());

这个方法在这里声明 这很容易理解。 它会被重复调用,直到它返回空字符串,表示所有属性都已填入。

我希望这有帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM