Фреймворк для ботов - Адаптивный диалог

Я работаю с адаптивным диалогом фреймворка бота. У меня проблема с получением намерений и разрешенных объектов путем чтения данных luis с помощью распознавателя. только получение максимального результата в ответе путем чтения turn.recognized в дочернем адаптивном диалоговом окне. Я перенес свой luis в v3 и установил для свойства IncludeAllIntents значение true при вызове luis. я пропустил установку какого-либо свойства в LuisAdaptiveRecognizer.? Может ли кто-нибудь помочь мне решить эту проблему, потому что у меня есть сценарий для проверки второго лучшего результата в боте. Это проблема с адаптивным диалогом?

Я использовал Ms docs для создания адаптивного диалога бота.

И еще одна вещь. Есть ли способ извлечь разрешенные объекты luis как тип RecognizerResult из результата turn.recognized.

Корневой диалог:

var rootDialog = new AdaptiveDialog(nameof(AdaptiveDialog))
{
    Recognizer = new LuisAdaptiveRecognizer()
    {
        ApplicationId = Configuration["LuisAppId"],
        EndpointKey = Configuration["LuisAPIKey"],
        Endpoint = Configuration["LuisAPIHostName"],
        PredictionOptions = new Microsoft.Bot.Builder.AI.LuisV3.LuisPredictionOptions
        {
            IncludeAllIntents = true,
            IncludeInstanceData = true,
            IncludeAPIResults = true,
            PreferExternalEntities = true,
            Slot = "producton"
        }
    },
    Triggers = new List<OnCondition>()
    {
         new OnIntent("Greetings")
        {
            Actions = new List<Dialog>()
            {
                new SendActivity("${HelpRootDialog()}")
            }
        },
    },

Дочерний диалог:

public FindLinks(IConfiguration configuration) : base(nameof(FindLinks))
{
    _configuration = configuration;
    this.LinksDialog = new AdaptiveDialog(nameof(FindLinks))
    {
        Triggers = new List<OnCondition>()
        {
            new OnBeginDialog()
            {
                Actions = new List<Dialog>()
                    {
                        new CodeAction(ResolveAndSendAnswer)
                    }
            },
        }
    };

    AddDialog(this._findLinksDialog);
    InitialDialogId = nameof(FindLinks);
}

private async Task<DialogTurnResult> ResolveAndSendAnswer(DialogContext dialogContext, System.Object options)
{
    JObject jObject;
    IList<string> queries = new List<string>();
    dialogContext.State.TryGetValue("turn.recognized", out jObject);

    ....This is how i resolved the luis data from the turn.
}

person Mahesh cm    schedule 15.07.2020    source источник
comment
Добро пожаловать в Stack Overflow. Можете ли вы предоставить образец кода и ссылки на документы, которые вы использовали, чтобы помочь нам воспроизвести вашу проблему? Ознакомьтесь с удобным руководством, чтобы узнать, какие шаги вы можете предпринять, чтобы быстрее получить лучший ответ: stackoverflow.com/help/ как спросить   -  person Kyle Delaney    schedule 16.07.2020
comment
Спасибо за ответ ... Я загрузил файлы примеров кода в указанную ниже папку. Проверьте ссылку Заранее спасибо   -  person Mahesh cm    schedule 17.07.2020
comment
Вы сказали, что я использовал Ms docs для создания адаптивного диалога бота. Можете ли вы дать ссылку на документы, о которых вы говорите?   -  person Kyle Delaney    schedule 17.07.2020
comment
@KyleDelaney Я поделился образцом кода в этой ссылке на диск. ниже приведены ссылки, которые я использовал. ссылка на образцы ботов MS и Адаптивное диалоговое окно   -  person Mahesh cm    schedule 20.07.2020
comment
Когда я тестирую ваш код, я получаю ошибку 400. Вы исправили опечатку от продукта к продукту?   -  person Kyle Delaney    schedule 21.07.2020
comment
@KyleDelaney Я сделал это, но в данных luis нет изменений.   -  person Mahesh cm    schedule 27.07.2020
comment
Приемлем ли мой ответ?   -  person Kyle Delaney    schedule 30.07.2020
comment
@KyleDelaney, Спасибо за решение. Проверяю возможности.   -  person Mahesh cm    schedule 03.08.2020


Ответы (1)


К сожалению, адаптивные диалоги предназначены для включения только одного намерения в turn.recognized независимо от того, какой тип распознавателя вы используете. Вы можете видеть, что в исходном коде здесь:

result.Intents.Clear();
result.Intents.Add(topIntent, topScore);

Похоже, единственное место, где можно получить доступ к другим интентам, - это ваша телеметрия. Итак, у вас есть несколько вариантов, хотя я знаю, что они не идеальны.

  1. Вызывайте конечную точку LUIS явно вместо того, чтобы полагаться на LuisAdaptiveRecognizer. Это можно сделать с помощью HTTP-запроса в качестве действия внутри адаптивного диалогового окна или вне диалогового окна.
  2. Загрузите дополнительные намерения из зарегистрированной телеметрии. Возможно, это будет проще всего, если вы создадите собственный клиент телеметрии, который сделает данные доступными в локальной памяти вашего бота.
  3. Сделайте запрос функции на GitHub, попросив их сделать все намерения доступными в адаптивных диалогах: https://github.com/microsoft/botbuilder-dotnet/issues/new/choose
person Kyle Delaney    schedule 27.07.2020
comment
Привет, Кайл Делани, я внес изменения в адаптивный диалог. У меня есть еще одно сомнение, есть ли способ извлечь результат luisadaptiverecognizer в такой тип, как RecognizerResult, в дочерних диалогах? Я застрял на извлечении данных luis в дочерних диалогах. Пожалуйста, помогите мне, если у вас есть какие-либо идеи по этому поводу. - person Mahesh cm; 18.08.2020
comment
Думаю, я уже ответил на это, если вы прочитаете мой ответ. Вызовите свою конечную точку LUIS явно вместо того, чтобы полагаться на LuisAdaptiveRecognizer. - person Kyle Delaney; 18.08.2020
comment
Я сделал это, я хочу знать, есть ли способ извлечь данные результата конечной точки luis в тип RecognizerResult в дочерних диалогах - person Mahesh cm; 19.08.2020
comment
Вероятно, вы сможете сделать это с помощью Newtonsoft. Взгляните на исходный код адаптивных диалоговых окон, если вам нужен пример. - person Kyle Delaney; 19.08.2020
comment
Я уже пробовал преобразовать результат luis в тип распознавателяResult, но он выдает ошибку. ниже приведен код, который я использовал. // Извлекаем данные luis в дочерние диалоги. var jObject; dialogContext.State.TryGetValue (Turn.recognized, out jObject); var распознаватель = (RecognizerResult) jObject; - person Mahesh cm; 20.08.2020
comment
Этот код не может скомпилироваться, потому что вы используете var без инициализации переменной, поэтому очевидно, что это не ваш реальный код. Но вы все равно не должны публиковать многострочный код в комментариях. Если вы приложили реальные усилия, чтобы научиться преобразовывать JSON в типы C #, но все еще не можете понять, как это сделать, вам следует задать новый вопрос, который включает в себя проведенное вами исследование и попытки, которые вы сделали. сделал. - person Kyle Delaney; 20.08.2020
comment
Я могу получить данные luis в переменной JObject, у меня проблемы с приведением объекта задания к типу RecognizerResult. Я думаю, что обычный Json-конвертер не может применяться в этом случае. Ищу другое решение. - person Mahesh cm; 21.08.2020
comment
Я просил вас посмотреть исходный код. Я просил вас узнать, как преобразовать объекты JObject в типы C #. Я попросил вас задать новый вопрос. Вы вообще не желаете делать что-либо, чтобы помочь себе, и ожидаете, что я буду продолжать делать за вас работу. Если вы не хотите работать, то решение этой проблемы не должно быть для вас таким важным, так почему вы все еще комментируете? Честно говоря, я искал задание, чтобы возразить за вас, и наткнулся на ответ, который может указать вам правильное направление: stackoverflow.com/questions/4441466/ - person Kyle Delaney; 21.08.2020