首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在虚拟助理上启用QnA后续方案

在虚拟助理上启用QnA后续方案
EN

Stack Overflow用户
提问于 2019-08-30 12:44:00
回答 1查看 715关注 0票数 1

我目前在我的QnA对上有后续提示,但是当在本地运行机器人或使用网络聊天时,这些提示不会出现。是否有一种使用虚拟助理模板启用此功能的方法?

后续提示在使用QnA机器人时有效,但在虚拟助手上无效。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-04 01:05:56

Steven发布的C# .NET核心示例是一个很好的资源。如果您喜欢教程样式指南,这个可能会有帮助:https://www.joji.me/en-us/blog/implement-follow-up-prompt-for-qna-bot/

所概述的步骤包括:

  1. 编辑您的Bots\YourBotName.cs,添加以下名称空间,以支持后续提示:
代码语言:javascript
复制
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Text;
  1. 添加以下类以匹配JSON响应形状:
代码语言:javascript
复制
class FollowUpCheckResult
 {
     [JsonProperty("answers")]
     public FollowUpCheckQnAAnswer[] Answers
     {
         get;
         set;
     }
 }

 class FollowUpCheckQnAAnswer
 {
     [JsonProperty("context")]
     public FollowUpCheckContext Context
     {
         get;
         set;
     }
 }

 class FollowUpCheckContext
 {
     [JsonProperty("prompts")]
     public FollowUpCheckPrompt[] Prompts
     {
         get;
         set;
     }
 }

 class FollowUpCheckPrompt
 {
     [JsonProperty("displayText")]
     public string DisplayText
     {
         get;
         set;
     }
 }
  1. 在qnaMaker.GetAnswersAsync成功并且有有效答案之后,执行一个额外的HTTP来检查后续提示:
代码语言:javascript
复制
// The actual call to the QnA Maker service.
 var response = await qnaMaker.GetAnswersAsync(turnContext);
 if (response != null && response.Length > 0)
 {
     // create http client to perform qna query
     var followUpCheckHttpClient = new HttpClient();

     // add QnAAuthKey to Authorization header
     followUpCheckHttpClient.DefaultRequestHeaders.Add("Authorization", _configuration["QnAAuthKey"]);

     // construct the qna query url
     var url = $"{GetHostname()}/knowledgebases/{_configuration["QnAKnowledgebaseId"]}/generateAnswer"; 

     // post query
     var checkFollowUpJsonResponse = await followUpCheckHttpClient.PostAsync(url, new StringContent("{\"question\":\"" + turnContext.Activity.Text + "\"}", Encoding.UTF8, "application/json")).Result.Content.ReadAsStringAsync();

     // parse result
     var followUpCheckResult = JsonConvert.DeserializeObject<FollowUpCheckResult>(checkFollowUpJsonResponse);

     // initialize reply message containing the default answer
     var reply = MessageFactory.Text(response[0].Answer);

     if (followUpCheckResult.Answers.Length > 0 && followUpCheckResult.Answers[0].Context.Prompts.Length > 0)
     {
         // if follow-up check contains valid answer and at least one prompt, add prompt text to SuggestedActions using CardAction one by one
         reply.SuggestedActions = new SuggestedActions();
         reply.SuggestedActions.Actions = new List<CardAction>();
         for (int i = 0; i < followUpCheckResult.Answers[0].Context.Prompts.Length; i++)
         {
             var promptText = followUpCheckResult.Answers[0].Context.Prompts[i].DisplayText;
             reply.SuggestedActions.Actions.Add(new CardAction() { Title = promptText, Type = ActionTypes.ImBack, Value = promptText });
         }
     }
     await turnContext.SendActivityAsync(reply, cancellationToken);
 }
 else
 {
     await turnContext.SendActivityAsync(MessageFactory.Text("No QnA Maker answers were found."), cancellationToken);
 }
  1. 在仿真器中测试它,它现在应该按照预期显示后续提示。

备注:

确保创建IConfiguration _configuration属性,将IConfiguration配置传递给构造函数,并使用适当的QnAKnowledgebaseId和QnAAuthKey更新appsettings.json。

如果您使用一个Bot示例作为起点,请注意,QnAAuthKey在appsettings.json中可能会被命名为QnAEndpointKey

您还需要一个GetHostName()函数,或者将其替换为用于机器人qna主机名的url。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57726999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档