我正在尝试实现一个使用Qna服务和Azure搜索的机器人。
我正在使用C# QnA Maker sample github代码的帮助。
它使用BotServices.cs类,该类在其构造函数中接受QnA服务。此Botservice对象将传递给QnABot类构造函数。
我想在QnABot的构造函数中使用对话框集,该对话框集需要添加访问器。我真的不明白如何添加accessor类并在startup.cs中使用它们。
我试图从其他示例中复制一些代码,但是没有用。
请帮助我向BotServices构造函数添加访问器,以便可以在其中使用对话框集。
出于我的目的,我想扩展QnA示例。
答案 0 :(得分:1)
您能告诉我们为什么要通过botservices类的对话框集吗?此类仅用于引用外部服务,例如QnAMaker和LUIS。如果要启动对话框,请在QnABot.cs类的OnTurnAsync方法中启动。请记住,在此特定示例中创建的this方法将对用户发送的每条消息都发送响应,即使用户正在通过对话框进行工作。您可以通过以下方式更改OnTurnAsync:对话框的第一步是检查QnAMaker。请参阅enterpriseBot示例,以了解如何启动对话框以及向子对话框添加访问器。请参见下面从MainDialog.cs类中摘录的内容,他们如何添加访问器:
protected override async Task OnStartAsync(DialogContext innerDc, CancellationToken cancellationToken = default(CancellationToken))
{
var onboardingAccessor = _userState.CreateProperty<OnboardingState>(nameof(OnboardingState));
var onboardingState = await onboardingAccessor.GetAsync(innerDc.Context, () => new OnboardingState());
var view = new MainResponses();
await view.ReplyWith(innerDc.Context, MainResponses.Intro);
if (string.IsNullOrEmpty(onboardingState.Name))
{
// This is the first time the user is interacting with the bot, so gather onboarding information.
await innerDc.BeginDialogAsync(nameof(OnboardingDialog));
}
}