您好我正在使用Microsoft Bot Framework,我正在使用包含LUIS应用程序的QnAMaker。
我的问题是,当我正在使用QnAMaker时,它提供了精确的答案,当我添加LUIS服务时,我在调试中得到了确切的答案,当我使用await context.PostAsync(answer);
向用户提供答复时它默认情况下会转到异常部分,其显示异常如下所示。
对象引用未设置为对象的实例。
由于我从QnAMaker获取数据,因此我无法理解null的位置。
在下面我分享了我所写的代码,用于在LUIS识别出意图和实体后获得对用户表单QnAMaker的响应
private async Task toGetTheResponsefromQnAMakerAsync(IDialogContext context, Activity activity)
{
var messagetext = (activity.Text).ToLower();
var knowledgebaseId = ConfigurationManager.AppSettings["KnowledgeBaseId"];
//Use subscription key assigned to you.
var qnamakerSubscriptionKey = ConfigurationManager.AppSettings["QnAmakerSubscriptionKey"];
var client = new HttpClient();
var queryString = HttpUtility.ParseQueryString(string.Empty);
// Request headers
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", qnamakerSubscriptionKey);
var uri = "https://westus.api.cognitive.microsoft.com/qnamaker/v2.0/knowledgebases/subscription-id/generateAnswer?" + queryString;
HttpResponseMessage response;
// Request body
byte[] byteData = Encoding.UTF8.GetBytes($"{{\"question\": \"{messagetext}\"}}");
using (var content = new ByteArrayContent(byteData))
{
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
response = await client.PostAsync(uri, content);
}
try
{
if (response.IsSuccessStatusCode)
{
var responseContent = response.Content.ReadAsStringAsync().Result;
var QnAMakerResponse = JsonConvert.DeserializeObject<RootObject>(responseContent);
if (QnAMakerResponse.answers != null)
{
foreach (var item in QnAMakerResponse.answers)
// return our QnAMakerResponse to the user
answer = item.answer.ToString();
await context.PostAsync(answer);
}
}
}
catch (Exception e)
{
}
}
答案 0 :(得分:3)
我想现在,您正在使用旧版本的Bot Connector和Bot Builder DLL。因此,这就是您从Microsoft.Bot.Connector的源位置获取空引用异常的原因。
因此,请使用最新版本更新所有与Bot Framework相关的DLL,例如 3.15.0 。
答案 1 :(得分:0)
根据您的描述和代码,您似乎向QnAMaker API请求检索给定问题的答案,并将答案发送给用户。我修改你提供的代码并在我身边做一个测试,我没有得到那个例外,你可以检查一下。
try
{
if (response.IsSuccessStatusCode)
{
var responseContent = response.Content.ReadAsStringAsync().Result;
var QnAMakerResponse = JsonConvert.DeserializeObject<Microsoft.Bot.Builder.CognitiveServices.QnAMaker.QnAMakerResults>(responseContent);
if (QnAMakerResponse.Answers != null)
{
var answer = QnAMakerResponse.Answers.First().Answer;
await context.PostAsync(answer);
}
}
}
catch (Exception e)
{
}
注意:
Microsoft.Bot.Builder.CognitiveServices.QnAMaker.QnAMakerResults
对象测试结果: