有没有人知道这三者之间的具体差异和特征,或者如果有更多功能/更灵活地用作开发人员?
artificial-intelligence wit.ai azure-language-understanding dialogflow-es
我有一个运行在Azure + Bot Framework + LUIS(通过LuisDialog)的机器人.
如果用户碰巧快速连续发送两条消息(在机器人有机会回答之前),他们会在Facebook Messenger或web embed上看到此错误消息:
对不起,我的机器人代码有问题.
通过bot通道模拟器进行调试时,我发现错误是这样的:
"text":"错误:响应状态代码未指示成功:429(请求太多).在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)处于System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) Microsoft.Bot.Builder.Luis.LuisService.d__4.MoveNext()
堆栈跟踪的结尾显示错误源自MessageController.cs中的此行:
await Conversation.SendAsync(activity, () => new LuisRootDialogEnglish());
这很奇怪,因为我使用的是付费版本的LUIS,每秒最多可以拨打10个电话.
在任何情况下,我都尝试将MessageController.cs中的整个代码包装到一个try/catch块中,并且无论异常如何都返回此值:
return Request.CreateResponse(HttpStatusCode.OK);
仍然,用户看到错误消息"抱歉,我的机器人代码有问题",这基本上意味着存在未处理的异常.
如何防止向用户显示此消息或捕获异常?
FormBuilder当我在路易斯创建时,我正试图结合我的意图.我只是找不到这样做的文档.
我想做以下事情:
我该怎么做呢?有教程吗?我看到人们在谈论LuisDialogs,但我只是不知道从哪里开始.
我试图从标记为一个方法中获得完整的原始文本LuisIntent中的LuisDialog.
文档将这些方法显示为两个参数:
IDialogContext context, LuisResult result
这两者都没有公开披露消息的原始文本.上下文对象确实包含消息但在私有属性(context.data.message.text)中是不可访问的.
有没有办法在中访问它context,还是可以将它传递给对话框构造函数?
我有一个Dialog类,它是一个FormDialog(比如,FormDialog <SandwichOrder>;根据机器人框架文档网站建立一个三明治的订单).SandwichOrder包含"价格"属性.
我还有一个派生自LuisDialog的Dialog类,它获得了价格(根据,例如,大小和/或省).
如何将Luis功能挂钩到表单对话框中?
我正在使用LuisDialog,所有我得到的回调返回的是IDialogContext和LuisResult.有没有办法从名称等等获取原始活动的信息,如频道?
我的机器人有LUIS对话框,有几个意图.我从MessageController调用LUIS对话框.如果检测到意图,我会启动一个子对话框.子对话框完成后,我调用context.Done("response from user").After该ChlildDialogDone任务被调用.  
在内部ChildDialogDone任务中我想再次调用LUIS对话框来检测用户消息的意图(来到   ChildDialogDone).现在ChildDialogDone我有内容context.Wait(MessageReceived).当执行这行代码时,没有任何反应,我的机器人正在等待来自用户的下一条消息.
这是代码:
    [Serializable]
        public partial class DefiningIntentDialog : LuisDialog<object>
        {
            [LuisIntent("")]
            public async Task NoIntent(IDialogContext context, LuisResult result)
            {        
                var dialog = new GreetingsDialog();
                dialog.InitialMessage = result.Query;
                context.Call(dialog, GreetingDialogDone);      
            }
            [LuisIntent("Email")]
            public virtual async Task ConfirmationEmail(IDialogContext context, LuisResult result)
            {
                await context.Forward(new EmailDialog, EmailDialogDone, "message", CancellationToken.None);
            }
            private async Task EmailDialogDone(IDialogContext context, IAwaitable<string> argument)
            {
                var messageHandled = await argument;
                context.Wait(MessageReceived);
            }
      }
所以在EmailDialogDone中我有一些来自用户的消息,我想再次使用此消息执行DefiningIntent对话框.我该怎么做?
我和我的同事正在使用Microsoft bot框架和Microsoft LUIS构建一个非常大的应用程序.从本质上讲,我们正在尝试创建一个机器人,来自整个组织的人员可以向机器人发送消息(通过松弛)并接收相关信息.不同类型的请求涉及不同的主题领域(销售,营销,后勤和研发).如何将多个LUIS模型,实体和子实体链接在一起,以便请求在到达正确的实体之前不会查询每个实体?
现在,如果用户询问"我们今年在研究上花了多少钱?",它首先查询销售实体,然后查询营销实体,然后查询物流实体,最后在获得响应之前查询研发实体.我正在尝试限制API请求的数量.我目前知道3个可能的解决方案来处理这个路由问题,并且它们似乎都没有依赖LUIS来路由到适当的实体.
解决方案1涉及让机器人给出对应于每个域的UI选择器.
解决方案2涉及连接NLP库以从句子中提取主题,然后使用加权字典库匹配主题.
解决方案3涉及设置纯RegEx.这是我最不喜欢的解决方案,原因很明显.
使用Microsoft bot框架和Microsoft LUIS的企业级参考应用程序的链接将是一个理想的答案.
c# azure microsoft-cognitive botframework azure-language-understanding
我正在尝试在Microsoft Bot Framework上创建一个简单的聊天机器人,我想在我的应用程序中添加LUIS应用程序ID和LUIS订阅密钥.
我在哪里可以获得订阅密钥?

我有一个具有以下意图的旅行机器人:-
BookAFlight(训练有 20 个话语)
GetTicketCopy(训练有 20 个话语)
CancelTicket(训练有 20 个话语)
无(默认)(当前未训练)
MS 文档表明,对于添加到其他意图的每 10 个话语,我对至少 1-2 个话语进行 None 训练。这意味着我需要说 6-12 个话语来训练 None。
我的问题是应该使用什么样的话语来训练 None?
除了与我的机器人相关的所有内容(例如,我想订购比萨饼、今天的天气如何、谁是美国总统?等)
与用于训练我的其他意图的话语相对应的所有否定陈述(例如,我不想预订机票,我不想打印出来,我不想取消我的机票等)
与当前未涵盖在我的范围内但用户仍然可以向旅行机器人询问的意图相对应的所有话语(例如,我想预订出租车到机场,我的航班状态如何)
长话短说,我试图确定什么样的话语应该进入我的 None 意图。None 是处理有效话语的“否定”变体的正确位置。