如何在Virtual Assistant模板中启用QnA Follow-Up Prompts并解决显示问题?
How to Enable QnA Maker Follow-Up Prompts in Virtual Assistant
我之前也碰到过这个问题——Virtual Assistant模板默认并没有处理QnA Maker返回的Follow-Up Prompts,所以才会出现本地/WebChat里不显示,但纯QnA Bot正常的情况。不过咱们可以通过自定义QnA的响应处理逻辑来启用这个功能,具体操作步骤如下:
1. 定位QnA处理的核心代码
首先找到你项目中负责处理QnA查询的代码文件,通常是在Dialogs/QnADialog.cs(C#项目)或者对应的Python/JS路径下。这个文件里包含了调用QnA Maker API并返回结果的核心逻辑。
2. 扩展响应处理逻辑,提取并展示Follow-Up Prompts
在获取QnA返回结果后,我们需要从结果中提取Follow-Up Prompts,然后把它转换成用户能看到的交互元素(比如建议按钮或者文本提示)。
示例(C#):用建议按钮展示Prompt
var qnaResults = await _qnaMaker.GetAnswersAsync(turnContext); if (qnaResults.Any()) { // 基础回答内容 var reply = MessageFactory.Text(qnaResults.First().Answer); // 提取Follow-Up Prompts var followUpPrompts = qnaResults.First().Context?.Prompts; if (followUpPrompts != null && followUpPrompts.Any()) { // 将Prompt转为建议操作按钮 reply.SuggestedActions = new SuggestedActions() { Actions = followUpPrompts.Select(p => new CardAction(ActionTypes.ImBack, p.DisplayText, value: p.DisplayText) ).ToList() }; } await turnContext.SendActivityAsync(reply, cancellationToken); }
示例:用文本列表展示Prompt
如果你更倾向于用文本列表展示而不是按钮,也可以改成这样:
var qnaResults = await _qnaMaker.GetAnswersAsync(turnContext); if (qnaResults.Any()) { var answerContent = qnaResults.First().Answer; var followUpPrompts = qnaResults.First().Context?.Prompts; // 追加Follow-Up Prompts到回答文本 if (followUpPrompts != null && followUpPrompts.Any()) { answerContent += "\n\n你可能还想问:\n"; answerContent += string.Join("\n- ", followUpPrompts.Select(p => p.DisplayText)); } await turnContext.SendActivityAsync(MessageFactory.Text(answerContent), cancellationToken); }
3. 确保QnA API请求包含上下文参数
检查你的QnA调用代码,确保在调用GetAnswersAsync时传递了正确的选项,让QnA Maker返回包含Follow-Up Prompts的上下文信息。比如可以配置QnAMakerOptions:
var options = new QnAMakerOptions { Top = 1, Context = new QnARequestContext { PreviousQnAId = 0 } // 根据对话上下文传递对应ID }; var qnaResults = await _qnaMaker.GetAnswersAsync(turnContext, options);
4. 验证WebChat渲染
如果用的是WebChat组件,确保它支持渲染SuggestedActions(建议按钮)——大部分现代WebChat版本都支持,但如果是旧版本可能需要调整样式或升级组件。
这样修改后,当你的Virtual Assistant调用QnA Maker获取结果时,就会自动把Follow-Up Prompts展示给用户了。
内容的提问来源于stack exchange,提问作者samueljohnpaul
相关产品推荐
相关产品推荐

