如何解决如何处理对话结束以在多轮QnA中启动另一个对话框-Microsoft.Bot.Builder.AI.QnA.Dialogs.QnAMakerDialog
我已经在我们的机器人中实现了多回合QnA,并使用了此类Microsoft.Bot.Builder.AI.QnA.Dialogs.QnAMakerDialog。
现在,我想扩展其功能,以便在相互转换对话后,机器人可以询问用户对话是否有帮助?如果没有,则机器人将要求在服务台上记录故障单。
我可以通过重写Dialog.EndDialogAsync方法来捕获多匝对话框的结尾,但是无法从此处启动另一个对话框。请帮忙。
public class QnAMultiTurnBase : QnAMakerDialog
{
// Dialog Options parameters
public readonly string DefaultNoAnswer = Configuration.Messages("Troubleshoot","NoAnswer");//"No QnAMaker answers found.";
public readonly string DefaultCardTitle = Configuration.Messages("Troubleshoot","DidYouMean");//"Did you mean:";
public readonly string DefaultCardNoMatchText = Configuration.Messages("Troubleshoot","NoneOfTheAbove");//"None of the above.";
public readonly string DefaultCardNoMatchResponse = Configuration.Messages("Troubleshoot","Feedback");//"Thanks for the feedback.";
private readonly BotServices _services;
private readonly IConfiguration _configuration;
//private readonly IStatePropertyAccessor<Dictionary<string,string>> troubleshootQuery;
private readonly Dictionary<string,string> qnaPair = new Dictionary<string,string>();
private readonly string qnAMakerServiceName;
/// <summary>
/// Initializes a new instance of the <see cref="QnAMakerBaseDialog"/> class.
/// Dialog helper to generate dialogs.
/// </summary>
/// <param name="services">Bot Services.</param>
public QnAMultiTurnBase(BotServices services,IConfiguration configuration,string qnAMakerServiceName) : base()
{
this._services = services;
this._configuration = configuration;
this.qnAMakerServiceName = qnAMakerServiceName;
}
protected async override Task<IQnAMakerClient> GetQnAMakerClientAsync(DialogContext dc)
{
return this._services?.QnAServices[qnAMakerServiceName];
}
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 = MessageFactory.Text(DefaultCardNoMatchResponse);
var responseOptions = new QnADialogResponseOptions
{
ActiveLearningCardTitle = DefaultCardTitle,CardNoMatchText = DefaultCardNoMatchText,NoAnswer = noAnswer,CardNoMatchResponse = cardNoMatchResponse,};
return responseOptions;
}
public override Task EndDialogAsync(ITurnContext turnContext,DialogInstance instance,DialogReason reason,CancellationToken cancellationToken = default(CancellationToken))
{
try
{
// end of multi turn convversation
// ask if conversation helped the user or not
}
catch (Exception)
{
turnContext.SendActivityAsync(MessageFactory.Text(Configuration.Messages("UnknownError"))).Wait();
throw;
}
return base.EndDialogAsync(turnContext,instance,reason,cancellationToken);
}
}
解决方法
您可以参考this文档,其中指定了如何创建自己的提示来收集用户输入。机器人与用户之间的对话通常涉及向用户询问(提示)信息,解析用户的响应,然后根据该信息采取行动。
对话框动作–控制对话框, BeginDialog,RepeatDialog,GotoDialog,EndDialog等的功能。
请按照以下说明进行多转弯。
,添加一个新对话框并启动使用BeginDialogAsync添加的对话框:
AddDialog(new MoreHelp());
return await stepContext.BeginDialogAsync(nameof(MoreHelp),UserInfo,cancellationToken);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。