繁体   English   中英

使用 Bot Framework SDK V4 的 QnA Maker 的 Azure Bot 问题

[英]Problem with Azure Bot with QnA Maker using Bot Framework SDK V4

我试着按照这个做同样的事情,对我来说有 2 个问题 Nr.1 我仍然在 Bot Frame Emulator 中得到一个 Echo 和 Nr.2 我不会从 azure 的 Webchat 收到消息。 这是我的 EchoBot.cs 代码

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
//
// Generated with Bot Builder V4 SDK Template for Visual Studio EchoBot v4.15.2

using Microsoft.Bot.Builder;
using Microsoft.Bot.Schema;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using System.Linq;
using Microsoft.Bot.Builder.AI.QnA;


namespace EchoBot1test.Bots

{

    public class EchoBot : ActivityHandler
    {

        public QnAMaker EchoBotQnA { get; private set; }
        public EchoBot(QnAMakerEndpoint endpoint)
        {
            EchoBotQnA = new QnAMaker(endpoint);
        }

        protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
        {
            var replyText = $"Echo: {turnContext.Activity.Text}";
            await AccessQnAMaker(turnContext, cancellationToken);
            await turnContext.SendActivityAsync(MessageFactory.Text(replyText, replyText), cancellationToken);
        }

        protected override async Task OnMembersAddedAsync(IList<ChannelAccount> membersAdded, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
        {

            var welcomeText = "are you a member of ...?";
            foreach (var member in membersAdded)
            {
                if (member.Id != turnContext.Activity.Recipient.Id)
                {
                  
                    await turnContext.SendActivityAsync(MessageFactory.Text(welcomeText, welcomeText), cancellationToken);
                }
            }
        }

        private async Task AccessQnAMaker(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
        {
            var results = await EchoBotQnA.GetAnswersAsync(turnContext);
            if (results.Any())
            {
                await turnContext.SendActivityAsync(MessageFactory.Text(results.First().Answer), cancellationToken);  
            }
            else
            {
                await turnContext.SendActivityAsync(MessageFactory.Text("Sorry, could not find an answer in the Q and A system."), cancellationToken);
            }
        }




    }

}


我想我尝试了所有想法...我不知道我还能尝试什么。

如果有人有想法,我会很高兴,如果问题表述不当,我可以更改它。 我真的很难解释这个。

QNA 创客门户

首先,我添加了一个简单的 QNA 对,并在 QNA Portal 上进行了如下测试:

在此处输入图像描述

在 Postman 上测试

如果您认为您在 QNA Portal 上获得了预期的响应,则可以跳过此部分:

在此处输入图像描述

在模拟器上测试

在此处输入图像描述

注意:一旦您按预期完成了这一点,您就可以在 Azure 上部署您的机器人了。

Azure 上的机器人 Web 应用服务

在此处输入图像描述

注意:复制已标记为红色的URL 它应该像https://YourBotServiceName.azurewebsites.net

从 Visual Studio 发布你的机器人

在此处输入图像描述

注意:您之前创建的应用服务应该在“应用服务实例”菜单项上获得该服务,如下所示。 选择您的应用程序服务,然后单击“完成”。

在此处输入图像描述

Azure Active Directory 应用程序注册

如果您有现有的应用程序,只需复制overview中的“应用程序(客户端)”和证书和机密中的app secrets ,如下图所示。

在此处输入图像描述

如果您没有现有的应用程序,请创建新的应用程序,如下面的屏幕截图所示。

在此处输入图像描述

Azure 机器人

现在您需要在 Azure 机器人注册面板下注册您的 Azure 机器人。 像下面这样:

在此处输入图像描述

步骤: 1转到 Azure 门户创建资源刀片

在此处输入图像描述

步骤: 2键入 Azure Bot。 点击 Create 然后填写如下表格: 然后点击 Review + Create 然后点击 Create。 等待部署完成。

在此处输入图像描述

注意:appIdapp secret将来自 Azure Active Directory 应用程序注册,如上所示

在此处输入图像描述

注意:您可以通过在 Azure Active Directory 中创建 App Registration 来获取appIdApp Secret ,如下所示:

在此处输入图像描述

步骤: 3部署完成后,单击“go to resource”,它将带您进入以下页面。

在此处输入图像描述

注意:请记住,您遵循的文档似乎没有遵循此步骤。 因为最近 Azure bot 有一个更新“Azure Web App Bot is deprecated”但是你关注的文档有点旧。 所以你可能错过了这个非常重要的步骤。 可以在这里找到更新

在此处输入图像描述

配置 Azure 机器人服务 URL

这是您在 bot 上错过的步骤,这对于与您的 Web 应用程序服务交互非常重要,除 bot 之外的 Azure Bot 无法识别 Web 应用程序服务与 Bot 之间的交互。

因此,现在单击“设置”菜单下的“配置”,您之前从 Bot Web 应用服务复制的 URL,如下所示

在此处输入图像描述

粘贴到这里应该是这样的格式: https://YourAppService.azurewebsites.net/api/messages ://YourAppService.azurewebsites.net/api/messages。 应该像下面这样:

在此处输入图像描述

Azure Web Chat 的最终测试

在此处输入图像描述

注意:如果您仍然遇到问题,请转到您的 Bot 上的频道并检查您是否收到任何此类错误。 在这种情况下,请检查您的 Azure Active Directory app Id ,并且app secret是正确的。

在此处输入图像描述

在此处输入图像描述

此外,如果您需要官方 QNA 示例,您可以从此处下载

为了让你开始,你也可以尝试这种方法:

  1. 使用至少一对问答创建一个新的 QnAMaker 知识库。
  2. 训练知识库并发布它。
  3. 发布 KB 后,您将看到一个标有“创建机器人”的按钮
  4. 单击此按钮,它将创建一个网络应用程序机器人。 您将能够选择您喜欢的语言
  5. 打开 Web 应用程序机器人并使用 Webchat 中的测试对其进行测试。

完成这些步骤后,您将拥有一个在 Azure 上运行的工作聊天机器人。 之后你可以下载源代码并添加你需要的东西。

备注:Web 应用程序机器人已正式弃用,但此快捷方式仍然有效。 并且将支持现有的网络应用程序机器人。

我已经通读了这里所说的大部分内容,我可以看出它有点令人困惑,所以让我提出一个让基本机器人工作的替代途径。

  1. 下载示例 QnA 机器人
  2. 在示例的appsettings.json中,填写您的 QnA 详细信息(我假设您已经准备好基本的 QnA 知识库。如果没有,请按照QnA 快速入门创建一个)
  3. 在本地测试(本质上是运行机器人),使用 Bot Framework Emulator 验证机器人是否正常工作
  4. 按照最新的发布到 Azure步骤创建一个新的多租户机器人(UAMI 和单租户更复杂,所以暂时把它们放在一边)。 我建议创建所有用于测试的新资源,只是为了让事情变得更简单
  5. 创建新的应用程序注册后,将您创建的应用程序密码和 Azure 提供的应用程序 ID 添加到appsettings.json文件
  6. 按照其余步骤部署机器人
  7. 最后一步后,等待部署端点返回 JSON 确认部署成功
  8. 几分钟后,转到 Azure,单击你的 Azure Bot,然后在左侧菜单中单击“在 Web 聊天中测试”并尝试与 bot 通信
  9. 完成该过程后,如果您不打算使用此机器人,请删除资源组以避免收费

部署文档最近已更新,因此如果您仔细阅读并遵循概述的说明,您应该有一个可以构建的工作机器人。 如果您完全按照这些步骤操作,然后在按照这些步骤操作时遇到问题,将更容易确定到底是哪里出了问题。

暂无
暂无

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

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