我有一个现有的QnA机器人(C#,SDK-v4),现在我希望向其中添加LUIS,而无需使用LUIS模板创建新的机器人。
我的QnABot.cs文件-
public class QnABot : ActivityHandler
{
private readonly IConfiguration _configuration;
private readonly ILogger<QnABot> _logger;
private readonly IHttpClientFactory _httpClientFactory;
public QnABot(IConfiguration configuration, ILogger<QnABot> logger, IHttpClientFactory httpClientFactory)
{
_configuration = configuration;
_logger = logger;
_httpClientFactory = httpClientFactory;
}
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
var httpClient = _httpClientFactory.CreateClient();
var qnaMaker = new QnAMaker(new QnAMakerEndpoint
{
KnowledgeBaseId = _configuration["QnAKnowledgebaseId"],
EndpointKey = _configuration["QnAAuthKey"],
Host = GetHostname()
},
null,
httpClient);
_logger.LogInformation("Calling QnA Maker");
// The actual call to the QnA Maker service.
var response = await qnaMaker.GetAnswersAsync(turnContext);
if (response != null && response.Length > 0)
{
awaitturnContext.SendActivityAsync(
MessageFactory.Text(response[0].Answer), cancellationToken);
}
else
{
await turnContext.SendActivityAsync(MessageFactory.Text("No QnA Maker answers were found."), cancellationToken);
}
}
private string GetHostname()
{
var hostname = _configuration["QnAEndpointHostName"];
if (!hostname.StartsWith("https://"))
{
hostname = string.Concat("https://", hostname);
}
if (!hostname.EndsWith("/qnamaker"))
{
hostname = string.Concat(hostname, "/qnamaker");
}
return hostname;
}
}
我知道可以使用知识库分发调度LUIS应用程序的调度工具,但是我不知道如何在该机器人中处理Luis意图。 如何将LUIS集成到该机器人中?
答案 0 :(得分:1)
您可以将LUIS添加到现有的QnA Bot中,但是实际上您将从this sample复制很多代码,因此从示例开始复制并复制要保留的任何代码几乎更快现有的QnA Bot。
您的OnMessageActivity应该从直接调用qnamaker客户端的this到this的相似,其中用户的输入传递到LUIS调度应用程序,该应用程序确定将用户路由到的目的。
用户的路由是在[DispatchToTopIntent] https://github.com/microsoft/BotBuilder-Samples/blob/master/samples/csharp_dotnetcore/14.nlp-with-dispatch/Bots/DispatchBot.cs#L51)方法内处理的,case语句中的字符串与门户中LUIS应用程序下的意图名称匹配。
无需赘言,您需要在机器人Microsoft.Bot.Builder.Ai.LUIS
中包含一些其他软件包,并且需要在其中创建IBotServices
接口和BotServices
类。您的项目以及其他更改。
整个过程记录在here中。