2016-11-14 7 views
5

Я пытаюсь создать бот с помощью LUIS, но это намного сложнее, чем я думал. До сих пор мне удалось создать мое приложение Луисом и создать Intent и Entity и я создал несколько Высказывания, которые, кажется, работает хорошо.Microsoft Bot Framework, LUIS и параметры действия

Затем я создал своего бота и подключил его к Луису. Когда я тестирую своего бота, он работает так, как ожидалось. Теперь, для забавной части. Я хочу обрабатывать параметры. Луис я добавил действие к моему Intent:

enter image description here

Как вы можете видеть, что я добавил строку. Мой код в моем боте в настоящее время выглядит следующим образом:

/// <summary> 
/// Tries to find the category 
/// </summary> 
/// <param name="result">The Luis result</param> 
/// <param name="alarm"></param> 
/// <returns></returns> 
public string TryFindCategory(LuisResult result) 
{ 

    // Variable for the title 
    EntityRecommendation title; 

    // If we find our enenty, return it 
    if (result.TryFindEntity(PiiiCK.Category, out title)) 
     return title.Entity; 

    // Default fallback 
    return null; 
} 

[LuisIntent("Choose category")] 
public async Task ChooseCategory(IDialogContext context, LuisResult result) 
{ 

    // Get our category 
    var category = TryFindCategory(result); 
    var response = "The category you have chosen is not in the system just yet."; 

    switch (category) 
    { 
     case "camera": 
      response = $"You need help buying a { category }, is this correct?"; 
      this.started = true; 
      break; 
     default: 
      if (!string.IsNullOrEmpty(category)) response = $"Sorry, PiiiCK does not deal with { category.Pluralise() } just yet."; 
      break; 
    } 

    // Post our response back to the user 
    await context.PostAsync(response); 

    // Execute the message recieved delegate 
    context.Wait(MessageReceived); 
} 

Я думаю, что вы можете догадаться, куда я иду с этим. Если пользователь набирает Помогите мне купить фотоаппарат, он дойдет до Выберите категорию Назначение и будут иметь правильное значение Объект выбран. Но если они набирают Помогите мне купить, он по-прежнему подходит к правильному намерению, но у него не будет выбранного Объект. Я бы хотел, чтобы мой бот увидел это и использовал текст в . Запросить Я создал в LUIS, и когда пользователь выбирает свой объект Я хочу, чтобы он вернулся к LUIS с этим параметром.

Я понятия не имею, как это сделать, и я не могу найти учебники по этому вопросу. Любая помощь была бы оценена (даже ссылки!)

+0

Вы можете добавить изображение своей модели LUIS так, чтобы мы понимали намерение/предложение у вас?Что делает TryFindCategory? –

+0

В настоящее время существует только 1 намерение (выберите категорию) и 1 объект (категория). TryFindCategory просто извлечение из https://github.com/Microsoft/BotBuilder/blob/master/CSharp/Samples/AlarmBot/Dialogs/AlarmLuisDialog.cs строки 60, где вместо логического значения я просто возвращаю Entity или null. – r3plica

ответ

1

Прежде всего, вам нужно убедиться, что в ваших высказываниях, содержащих категории, вы обозначаете их как объект Category. Это делается путем выбора слова/слов, которые представляют вашу сущность, а затем щелкая по фактической категории перед отправкой вашего высказывания.

Labeling utterances

Это не зависит от параметров действий, которые вы добавили. Чтобы проверить параметры действия, вам необходимо перейти через фактическое намерение. IntentRecommendation имеет имущество Actions; который содержит имущество коллекции Parameters.

Action parameters

Что-то здесь добавить, что в develop отрасли, команда BotFramework просто добавлена ​​поддержка ЛУИС v2 API и добавлены некоторые совершенно новые capabilitites.

Например, теперь LuisDialog будет действовать, если для ваших целей требуются параметры, и они не предусмотрены. В этом сценарии (который кажется вашим) LuisDialog будет automatically launch a LuisActionDialog и попросит пользователя указать отсутствующий параметр, используя сообщение Prompt, которое вы определили в параметре действия.

Обратите внимание, что это еще не опубликовано как пакет Nuget.

+0

Было ли это полезно? –