【发布时间】:2021-10-09 14:17:22
【问题描述】:
我是 Microsoft 服务的新手,并且已经通过向其提供包含问题和答案的 excel 文件构建了我的 QnAMaker。发布 QnA Maker 后,我下载了代码并在 Bot Framework Emulator 上对其进行了测试。该文件包含作为答案的产品名称和作为问题的产品描述。当用户给出产品描述时,如果它与文件中的描述之一匹配,产品名称将作为答案生成。 该机器人要求用户提供有关产品的一些详细信息,然后它会查找一些触发 QnA 答案的关键字。但是如果机器人找不到任何答案,我希望它再次询问用户(至少 3 次),如果 3 次后没有任何问题,它应该只说“对不起......”。
谁能指导我如何做循环部分。是否应该在代码中完成?
namespace Microsoft.BotBuilderSamples.Dialog
{
/// <summary>
/// QnAMaker action builder class
/// </summary>
public class QnAMakerBaseDialog : QnAMakerDialog
{
// Dialog Options parameters
public const string DefaultNoAnswer = "Sorry, I couldn't find any
match. Could you please give me more details?";
public const string DefaultCardTitle = "Did you mean:";
public const string DefaultCardNoMatchText = "None of the
above.";
public const string DefaultCardNoMatchResponse = "Thanks for the
feedback.";
private readonly IBotServices _services;
private readonly IConfiguration _configuration;
/// <summary>
/// Initializes a new instance of the <see
cref="QnAMakerBaseDialog"/> class.
/// Dialog helper to generate dialogs.
/// </summary>
/// <param name="services">Bot Services.</param>
public QnAMakerBaseDialog(IBotServices services, IConfiguration
configuration) : base()
{
this._services = services;
this._configuration = configuration;
}
protected async override Task<IQnAMakerClient>
GetQnAMakerClientAsync(DialogContext dc)
{
return this._services?.QnAMakerService;
}
protected override Task<QnAMakerOptions>
GetQnAMakerOptionsAsync(DialogContext dc)
{
return Task.FromResult(new QnAMakerOptions
{
ScoreThreshold = DefaultThreshold,
Top = DefaultTopN,
QnAId = 0,
RankerType = "Default",
IsTest = false
});
}
protected async override Task<QnADialogResponseOptions>
GetQnAResponseOptionsAsync(DialogContext dc)
{
var noAnswer = (Activity)Activity.CreateMessageActivity();
noAnswer.Text = this._configuration["DefaultAnswer"] ??
DefaultNoAnswer;
var cardNoMatchResponse =
(Activity)MessageFactory.Text(DefaultCardNoMatchResponse);
var responseOptions = new QnADialogResponseOptions
{
ActiveLearningCardTitle = DefaultCardTitle,
CardNoMatchText = DefaultCardNoMatchText,
NoAnswer = noAnswer,
CardNoMatchResponse = cardNoMatchResponse,
};
return responseOptions;
}
}
}
【问题讨论】:
-
到目前为止你有什么尝试?
-
不确定你面临什么问题和你尝试了什么,在bot框架中浏览对话框提示和瀑布对话框的概念。根据情况,您可以在聊天机器人中使用此对话框。
-
所以首先我在 QnAMaker 中创建了一个 KB,包括多轮对话。然后我用 C# 发布并下载了源代码。我在我的知识库中创建了一个问题,要求用户对他/她正在寻找的产品进行一些描述。如果找到匹配项,机器人将给出结果。但如果机器人找不到任何匹配项,我希望它要求用户提供更多详细信息。现在,机器人一直在说,当用户输入错误时,它一遍又一遍地找不到匹配项。我希望它在 3 次尝试后停止。我应该在哪里做?提前致谢。
-
我不知道您的机器人是如何设置的,但通常是的,您会在代码中执行此操作。每次 QnA Maker 返回默认答案时,您都可以增加一个状态变量(对话状态最有意义)。然后对您的输出活动设置一个条件,即如果您的“noAnswer”变量 > 3,则执行其他操作。如果您能展示一些您的特定代码,我或许可以帮助您将一些特定于您的设计的东西放在一起。
-
遗憾的是,我同时使用了 nodejs,而且我相信一种较旧的问答方法。这与我的实现完全不同。我可以尝试根据我在回答中的方法提供一些指导,但它不会是您的应用程序的 1:1 解决方案。
标签: azure azure-web-app-service botframework qnamaker