Фреймворк для ботов - Адаптивный диалог
Я работаю с адаптивным диалогом фреймворка бота. У меня проблема с получением намерений и разрешенных сущностей при чтении данных 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.
}
1 ответ
К сожалению, адаптивные диалоги предназначены для включения только одного намерения в turn.recognized
независимо от того, какой распознаватель вы используете. Вы можете увидеть это в исходном коде здесь:
result.Intents.Clear(); result.Intents.Add(topIntent, topScore);
Похоже, что единственное место, где можно получить доступ к другим интентам, - это ваша телеметрия. Итак, у вас есть несколько вариантов, хотя я знаю, что они не идеальны.
- Вызов конечной точки LUIS явно вместо того, чтобы полагаться на
LuisAdaptiveRecognizer
. Это можно сделать с помощью HTTP-запроса в качестве действия внутри адаптивного диалогового окна или вне диалогового окна. - Загрузите дополнительные намерения из зарегистрированной телеметрии. Возможно, это будет проще всего, если вы создадите собственный клиент телеметрии, который сделает данные доступными в локальной памяти вашего бота.
- Сделайте запрос функции на GitHub, попросив их сделать все намерения доступными в адаптивных диалогах: https://github.com/microsoft/botbuilder-dotnet/issues/new/choose