【问题标题】:How to create response based on LUIS question? (Azure)如何根据 LUIS 问题创建响应? (天蓝色)
【发布时间】:2019-12-31 14:49:35
【问题描述】:

对于使用 Azure 的 LUIS 进行聊天机器人开发,我比较陌生。我坚持使用已部署的 LUIS 和 QnA Maker 测试我的机器人。我基本上提出了有关 LUIS 的问题,但是如何根据 LUIS 提出的问题获得答复?谢谢!

【问题讨论】:

  • 您可以直接在 QNA maker 上进行操作。一旦你创建了你的知识库,然后从你的来源,比如https://YourSource.azurewebsites.net/qnamaker/knowledgebases/YourSubscription/generateAnswer。如果您需要更多详细信息,请告诉我。您还可以从 LUIS 中过滤您的用户意图。
  • 感谢 @MdFaridUddinKiron 的快速响应,我不知道我需要在哪里放置该 URL,但我会再玩一些并让你知道。
  • 我已经向您详细展示了如何实现 QNA maker。如果您觉得实施它有任何挑战,请告诉我。谢谢。

标签: c# azure azure-language-understanding qnamaker


【解决方案1】:

要调用 QNA 制造商,您可以查看以下代码:

Invoke QNA Maker API:

//Take User Input And Validate param

            if (string.IsNullOrEmpty(objQnAMakerQuestion.question))
            {
                validationMessage = new OkObjectResult("Question is required!");
                return (IActionResult)validationMessage;
            }

            // Call QnA API             
            var jsonContent = JsonConvert.SerializeObject(objQnAMakerQuestion);
            var endpointKey = "YourSubscriptionKey";
            var qnaMakerURI = "https://YourSource.azurewebsites.net/qnamaker/knowledgebases/YourSubscription/generateAnswer";
            using (var client = new HttpClient())
            using (var request = new HttpRequestMessage())
            {
                request.Method = HttpMethod.Post;
                request.RequestUri = new Uri(qnaMakerURI);
                request.Content = new StringContent(jsonContent, Encoding.UTF8, "application/json");
                request.Headers.Add("Authorization", "EndpointKey" + endpointKey);

                var response = await client.SendAsync(request);


                //Check status code and retrive response

                if (response.IsSuccessStatusCode)
                {

                    QnAMakerModelClass objQnAResponse = JsonConvert.DeserializeObject<QnAMakerModelClass>(await response.Content.ReadAsStringAsync());
                  //  var responseBody = await response.Content.ReadAsStringAsync();

                    foreach (var item in objQnAResponse.answers)
                    {
                        QnAMakerAnswer objAnswer = new QnAMakerAnswer();

                             objAnswer.answer = item.answer;
                             return new OkObjectResult(objAnswer);

                    }


                }
                else
                {
                    var result_string = await response.Content.ReadAsStringAsync();
                    return new OkObjectResult(result_string);
                }

Class Used To Invoke QNA Maker:

public class QnAMakerQuestion
    {
        public string question { get; set; }

    }

    public class QnAMakerAnswer
    {
        public string answer { get; set; }

    }
    public class Metadata
    {
        public string name { get; set; }
        public string value { get; set; }
    }

    public class Context
    {
        public bool isContextOnly { get; set; }
        public List<object> prompts { get; set; }
    }

    public class Answer
    {
        public List<string> questions { get; set; }
        public string answer { get; set; }
        public double score { get; set; }
        public int id { get; set; }
        public string source { get; set; }
        public List<Metadata> metadata { get; set; }
        public Context context { get; set; }
    }

    public class QnAMakerModelClass

    {
        public List<Answer> answers { get; set; }
        public object debugInfo { get; set; }
    }

更多详情可以refer this official document

希望它会有所帮助。

【讨论】:

    【解决方案2】:

    如果您有一个正在调用 QnAMaker 的聊天机器人,一个稍微简单的方法是使用 QnAMaker 类。以下是您在 C# 中的操作方式:

    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["QnAEndpointKey"],
            Host = _configuration["QnAEndpointHostName"]
        },
        null,
        httpClient);
    
        _logger.LogInformation("Calling QnA Maker");
    
        var options = new QnAMakerOptions { Top = 1 };
    
        // The actual call to the QnA Maker service.
        var response = await qnaMaker.GetAnswersAsync(turnContext, options);
        if (response != null && response.Length > 0)
        {
            await turnContext.SendActivityAsync(MessageFactory.Text(response[0].Answer), cancellationToken);
        }
        else
        {
            await turnContext.SendActivityAsync(MessageFactory.Text("No QnA Maker answers were found."), cancellationToken);
        }
    }
    

    有一个很好的例子说明如何将 QnA 集成到机器人中 here,以及官方文档 here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-20
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多