LuisService не сериализует все значения разрешения для объекта DateTimeV2 в Botframework V4 - PullRequest
0 голосов
/ 04 апреля 2019

Я работаю над ботом, который вы можете использовать для бронирования номеров.Я использую встроенную сущность datetime luis для определения времени начала и окончания встречи.Луис прекрасно распознает даты и время, но я не могу получить их в luisResult в коде бота.Я использую Microsoft.Bot.Builder V4.3.2

Это пример предложения:

"какая комната доступна с 14:00 до 16:00"

Необработанный luisResult содержит

"entities": [
{
  "entity": "from 2pm to 4pm",
  "type": "builtin.datetimeV2.timerange",
  "startIndex": 24,
  "endIndex": 38,
  "resolution": {
    "values": [
      {
        "timex": "(T14,T16,PT2H)",
        "type": "timerange",
        "start": "14:00:00",
        "end": "16:00:00"
      }
    ]
  }
}

]

Это то, что я получаю от использования LuisService в коде:

{
  "type": "timerange",
  "timex": [
     "(T14,T16,PT2H)"
  ]
}

В нем отсутствуют свойства "start" и "end"Я обнаружил, что эта ошибка также присутствовала в botframework V3, но она была решена в V3.8 https://github.com/Microsoft/BotBuilder/issues/2764

Это вызов к luisService:

var luisResults = await _services.LuisServices[LuisConfiguration].RecognizeAsync(dc.Context, cancellationToken);

Я ожидал "начало и конец должны быть сериализованы для объекта DateTime v2.

РЕДАКТИРОВАТЬ: Чтобы обойти эту проблему, можно включить полный ответ API в экземпляре службы бота:

var app = new LuisApplication(luis.AppId, luis.AuthoringKey, luis.GetEndpoint());
var recognizer = new LuisRecognizer(app, includeApiResults: true);

Полный результат теперь можно получить в

luisResults.Properties["luisResult"]

1 Ответ

0 голосов
/ 05 апреля 2019

Чтобы получить полный ответ, вы можете установить includeApiResults на LuisRecognizer на true.

var recognizer = new LuisRecognizer(application, includeApiResults: true);

Здесь - это то, как на самом деле работает переключатель под колпаком игде хранятся результаты.

Если вы хотите улучшить обработку самостоятельно, хорошая отправная точка для создания улучшенной версии LuisRecognizer предоставляется в примерах сборщика ботов в Luis с AppInsights .

/// <summary>
/// Initializes a new instance of the <see cref="TelemetryLuisRecognizer"/> class.
/// </summary>
/// <param name="application">The LUIS application to use to recognize text.</param>
/// <param name="predictionOptions">The LUIS prediction options to use.</param>
/// <param name="includeApiResults">TRUE to include raw LUIS API response.</param>
/// <param name="logOriginalMessage">TRUE to include original user message.</param>
/// <param name="logUserName">TRUE to include user name.</param>
public TelemetryLuisRecognizer(LuisApplication application, LuisPredictionOptions predictionOptions = null, bool includeApiResults = false, bool logOriginalMessage = false, bool logUserName = false)
    : base(application, predictionOptions, includeApiResults)
{
    LogOriginalMessage = logOriginalMessage;
    LogUsername = logUserName;
}

Также обратите внимание на эту проблему на GitHub.Пока проблема закрыта, она помечена как улучшение для версии 4.4.Версия 4.3 была выпущена в марте, поэтому работа над 4.4 уже началась.

Личный совет: Когда вы работаете с datetimeV2, вы должны знать о Recognizer-Text репозиторий, который в основном содержит "движок", который управляет всем этим.Запишите длинный список проблем и убедитесь, что вы всегда проверяете их в первую очередь, прежде чем тратить слишком много времени на разработку.

...