我正在开发一个可以用来预订房间的机器人。我正在使用luis内置的datetime实体来检测会议的开始和结束时间。 Luis认识到日期时间很好,但是我无法在bot代码中的luisResult中找到它们。我正在使用Microsoft.Bot.Builder V4.3.2
这是例句:
“哪个房间从下午2点到下午4点可用”
原始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)"
]
}
它缺少“开始”和“结束”属性 我发现该错误在botframework V3中也存在,但在V3.8中已解决 https://github.com/Microsoft/BotBuilder/issues/2764
这是对luisService的调用:
var luisResults = await _services.LuisServices[LuisConfiguration].RecognizeAsync(dc.Context, cancellationToken);
我希望为DateTime v2实体序列化“开始”和“结束”。
编辑: 解决此问题的一种方法是在bot服务的实例化中启用完整的api响应:
var app = new LuisApplication(luis.AppId, luis.AuthoringKey, luis.GetEndpoint());
var recognizer = new LuisRecognizer(app, includeApiResults: true);
现在可以在以下位置获取完整结果
luisResults.Properties["luisResult"]
答案 0 :(得分:0)
要获得完整的响应,您可以将includeApiResults
上的LuisRecognizer
设置为true
。
var recognizer = new LuisRecognizer(application, includeApiResults: true);
Here是开关在幕后的实际工作方式以及存储结果的位置。
如果您想自己改善处理方式,Luis with AppInsights的机器人构建器示例中提供了构建LuisRecognizer改进版本的良好起点。
/// <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上的this issue。该问题解决后,它被标记为版本4.4的增强功能。 released进入了4.3版,因此4.4版的工作确实已经开始。
个人技巧:在使用datetimeV2时,您应该了解Recognizer-Text存储库,该存储库基本上包含驱动整个过程的“引擎”。如果有问题,请列出一长串,并确保在浪费太多开发时间之前,始终先检查它们。