Botframework QnA Maker机器人在团队中工作私人聊天,但在团队中提到时没有答案

Botframework QnA Maker机器人在团队中工作私人聊天,但在团队中提到时没有答案,botframework,microsoft-teams,azure-bot-service,qnamaker,Botframework,Microsoft Teams,Azure Bot Service,Qnamaker,我在qnamaker.ai上配置了一个知识库,发布了它,并使用Azure机器人服务创建了一个机器人 在团队中,我创建了一个新的机器人应用程序,并将其与已部署的机器人程序相关联。允许bot进行私人聊天、团体聊天和团队聊天 如果我在私人聊天中“询问”它“部署cosmosdb”,它会给出正确的答案 如果我在团队中使用bot,通过提到它“@CS bot deploy cosmosdb”,它不知道答案 如果我在私人聊天中提到机器人,我会看到同样的行为:没有回答 但是要和机器人对话,必须提到这一点,那么

我在qnamaker.ai上配置了一个知识库,发布了它,并使用Azure机器人服务创建了一个机器人

在团队中,我创建了一个新的机器人应用程序,并将其与已部署的机器人程序相关联。允许bot进行私人聊天、团体聊天和团队聊天

  • 如果我在私人聊天中“询问”它“部署cosmosdb”,它会给出正确的答案
  • 如果我在团队中使用bot,通过提到它“@CS bot deploy cosmosdb”,它不知道答案
  • 如果我在私人聊天中提到机器人,我会看到同样的行为:没有回答
但是要和机器人对话,必须提到这一点,那么问题出在哪里呢

更新:

感谢希尔顿在下面的回答,我注意到当您下载bot源代码(在我的例子中,它是一个dotnet核心项目)时,README.MD文件说明了这个问题以及如何解决它:

Microsoft团队频道组聊天修复程序

  • 转到
    Bot/QnABot.cs
  • 添加引用
    using Microsoft.Bot.Connector;
    using System.Text.RegularExpressions;
    
  • OnTurnAsync
    功能修改为:
    public override async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default)
        {
            // Teams group chat
            if (turnContext.Activity.ChannelId.Equals(Channels.Msteams))
            {
                turnContext.Activity.Text = turnContext.Activity.RemoveRecipientMention();
            }
    
            await base.OnTurnAsync(turnContext, cancellationToken);
    
            // Save any state changes that might have occurred during the turn.
            await ConversationState.SaveChangesAsync(turnContext, false, cancellationToken);
            await UserState.SaveChangesAsync(turnContext, false, cancellationToken);
        }
    

如果检查第一条消息中返回的文本,它将是“deploy cosmosdb”。但在第二条消息中,QnAMaker正在努力解析的是“CS Bot deploy cosmosdb”。在将查询文本传递给QnAMaker之前,您要做的是从文本中完全删除“@”提及

这是一个常见的问题,因此Bot框架已经有了一种方法来处理这个问题。您还没有提到您在哪个平台上开发,但这里有一个dotnet到该方法的链接。我很确定节点上有一个等价物,等等


最后的效果是将活动的文本转换为两种情况下相同的文本,这将导致QnAMaker做出相同的响应。

正是这样。我也通过在本地调试bot解决了这个问题。这是一个遗憾,因为它的广告是“无代码”。只有在下载机器人的源代码并深入研究请求之后,人们才会发现。我现在遇到的问题,我不能在传入文本传递之前修改它,因为代码正在使用
BotFrameworkHttpAdapter
我不确定BotFrameworkHttpAdapter应该是什么问题-看起来您可能需要深入研究。您要查找的代码可能在一个名为“Dialog”的类中哦,天哪!我怎么会错过这个?如果您下载bot的源代码(.net core)项目,README.MD甚至会在“Microsoft团队频道组聊天修复”下提到这个问题!我将用这个finding.lol更新我的问题。很高兴你找到了。