Бот рамка - Адаптивен диалог

Работя с адаптивен диалогов прозорец за бот рамка. Имам проблем с получаването на намеренията и разрешените обекти чрез четене на 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
Благодаря за отговора ви... Качих файлове с примерен код в местоположението на устройството по-долу. Моля, проверете @KyleDelaney връзка Благодаря предварително   -  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 към типа на accepterResult, но той извежда грешка. по-долу е даден кодът, който съм използвал. //Извличане на 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
Помолих ви да погледнете изходния код. Помолих ви да потърсите как да конвертирате JObjects в C# типове. Помолих ви да публикувате нов въпрос. Не желаеш да направиш нищо, за да си помогнеш, и очакваш от мен да продължа да върша работа вместо теб. Ако няма да вършите никаква работа, тогава решаването на този проблем трябва да не е толкова важно за вас, така че защо още коментирате? Честно казано, потърсих jobject, за да ви възразя, и попаднах на отговор, който може да ви насочи в правилната посока: stackoverflow.com/questions/4441466/ - person Kyle Delaney; 21.08.2020