Как мне разобрать вопрос, содержащий escape-последовательности из Microsoft QnA Maker в моем проекте бота? - PullRequest
0 голосов
/ 12 апреля 2019

Я тестирую и обучаю нового бота QnA для своего веб-приложения и хочу распечатать правильный формат ответа, когда он встречает escape-последовательности. Как я могу реализовать такой подход, чтобы бот распознавал добавленные мной escape-последовательности? Эмулятор бота добавляет дополнительный '\' в начале '\ n \ n'

Я использую эмулятор Bot Framework для sdvk 3 и веб-сайта QnA Maker. Мой ответ таков:

\n\n 1. Visit the heroes Portal website.\n\n 2. Select the create button.\n\n 3. Click “choose class” under the classes \n your heroes section.\n\n 4. Follow the instructions provided.\n If you require further assistance, please email us \n at ###@$$$.com\n 
using Microsoft.Bot.Builder.CognitiveServices.QnAMaker;
using System;

namespace heroes.ChatBot.Dialogs.QnA
{
    [Serializable]
    [QnAMaker("####", "###",
        "Sorry I could not find an answer to your  question", 0.5, 1, "website" )]
    public class QnAHeroesDialog : QnAMakerDialog
    {

    }
}
1.Visit the heroes Portal website.

2.Select the create button.

3.Click “choose class” under the classes \n your heroes section.

4.Follow the instructions provided.\n
  If you require further assistance,\n
  please follow instruction.

1 Ответ

1 голос
/ 15 апреля 2019

Что вы ищете, так это переопределение ответа, предоставленного QnAMaker.В официальном репозитории Github есть несколько примеров: https://github.com/Microsoft/BotBuilder-CognitiveServices/blob/master/CSharp/Samples/QnAMaker/QnABotWithOverrides/Dialogs/QnADialogWithOverrides.cs

В нескольких словах переопределите RespondFromQnAMakerResultAsync для решения этой проблемы "double \ n"

Это будет выглядеть следующим образом:

[Serializable]
[QnAMaker("####", "###",
    "Sorry I could not find an answer to your  question", 0.5, 1, "website" )]
public class QnAHeroesDialog : QnAMakerDialog
{
    protected override async Task RespondFromQnAMakerResultAsync(IDialogContext context, IMessageActivity message, QnAMakerResults results)
    {
        if (results.Answers.Count > 0)
        {
            var foundReply = results.Answers.First().Answer;
            var response = $"{foundReply.Replace("\n\n", "\n")}";
            await context.PostAsync(response);
        }
    }
}

Возможно, мой код нуждается в быстрой настройке для Replace, поскольку у меня нет точного формата значения вашего ответа

...