在预测运行时扩展应用
重要
LUIS 将于 2025 年 10 月 1 日停用,从 2023 年 4 月 1 日开始,你将无法创建新的 LUIS 资源。 建议将 LUIS 应用程序迁移到对话语言理解,以便从持续的产品支持和多语言功能中受益。
应用的架构(模型和功能)经过训练后将发布到预测终结点。 此发布的模型用于预测运行时。 可以将新信息以及用户的言语传递到预测运行时以增加预测。
预测运行时架构的两个更改包括:
外部实体
外部实体可让 LUIS 应用在运行时识别和标记实体,这些实体可用作现有实体的特征。 这样,在将查询发送到预测终结点之前,便可以使用自己的独立自定义实体提取器。 此操作是在查询预测终结点上执行的,因此不需要重新训练并发布模型。
客户端应用程序将提供其自身的实体提取器,它会管理实体匹配操作并确定匹配实体的言语中的位置,然后连同请求一起发送该信息。
外部实体是用于扩展任何实体类型,同时仍可用作其他模型的信号的机制。
这对于仅在查询预测运行时才提供数据的实体而言非常有用。 此类数据的示例包括不断变化的数据,或者每个用户的具体数据。 可以使用用户联系人列表中的外部信息扩展 LUIS 联系人实体。
外部实体是 V3 创作 API 的一部分。
实体已在应用中存在
发出请求时,在终结点请求 POST 正文中传递的外部实体 entityName
值必须事先在已训练且发布的应用中存在。 实体的类型无关紧要,因为支持所有类型。
聊天中的第一个轮次
假设在聊天机器人的第一段聊天言语中,用户输入了以下不完整的信息:
Send Hazem a new message
聊天机器人发送给 LUIS 的请求可以在 POST 正文中传入有关 Hazem
的信息,以便将此信息直接匹配为用户的联系人之一。
"externalEntities": [
{
"entityName":"contacts",
"startIndex": 5,
"entityLength": 5,
"resolution": {
"employeeID": "05013",
"preferredContactType": "TeamsChat"
}
}
]
预测响应包含该外部实体以及其他所有预测实体,因为该实体已在请求中定义。
聊天中的第二个轮次
在聊天机器人中输入的下一段用户言语使用较模糊的字词:
Send him a calendar reminder for the party.
在这一轮会话中,言语使用 him
作为对 Hazem
的引用。 在 POST 正文中,聊天机器人可将 him
映射到从第一段言语 Hazem
提取的实体值。
"externalEntities": [
{
"entityName":"contacts",
"startIndex": 5,
"entityLength": 3,
"resolution": {
"employeeID": "05013",
"preferredContactType": "TeamsChat"
}
}
]
预测响应包含该外部实体以及其他所有预测实体,因为该实体已在请求中定义。
重写现有模型预测
preferExternalEntities
选项属性指定如果用户发送与同名的预测实体重叠的外部实体,LUIS 将选择传入的实体还是模型中存在的实体。
例如,考虑查询 today I'm free
。 LUIS 检测到 today
为 datetimeV2,响应如下:
"datetimeV2": [
{
"type": "date",
"values": [
{
"timex": "2019-06-21",
"value": "2019-06-21"
}
]
}
]
如果用户发送外部实体:
{
"entityName": "datetimeV2",
"startIndex": 0,
"entityLength": 5,
"resolution": {
"date": "2019-06-21"
}
}
如果 preferExternalEntities
设置为 false
,则 LUIS 将返回响应就像未发送外部实体一样。
"datetimeV2": [
{
"type": "date",
"values": [
{
"timex": "2019-06-21",
"value": "2019-06-21"
}
]
}
]
如果 preferExternalEntities
设置为 true
,则 LUIS 将返回包括以下内容的响应:
"datetimeV2": [
{
"date": "2019-06-21"
}
]
解决方法
可选的 resolution
属性将在预测响应中返回,可让你传入与外部实体关联的元数据,然后在响应中接收该元数据。
主要目的是扩展预生成实体,但并不局限于该实体类型。
resolution
属性可以是数字、字符串、对象或数组:
- "Dallas"
- {"text": "value"}
- 12345
- ["a", "b", "c"]
动态列表
使用动态列表可以扩展已包含在 LUIS 应用中的已训练并发布的现有列表实体。
需要定期更改列表实体值时,请使用此功能。 使用此功能可以扩展已训练并发布的列表实体:
- 发出查询预测终结点请求时。
- 对于单个请求。
列表实体在 LUIS 应用中可为空,但必须存在。 LUIS 应用中的列表实体不会更改,但终结点上的预测功能将会扩展,以最多包含 2 个列表,其中有大约 1,000 个项。
动态列表 JSON 请求正文
发送以下 JSON 正文,以向列表发送包含同义词的新子列表,并使用 POST
查询预测请求预测文本 LUIS
的列表实体:
{
"query": "Send Hazem a message to add an item to the meeting agenda about LUIS.",
"options":{
"timezoneOffset": "-8:00"
},
"dynamicLists": [
{
"listEntity*":"ProductList",
"requestLists":[
{
"name": "Azure AI services",
"canonicalForm": "Azure-Cognitive-Services",
"synonyms":[
"language understanding",
"luis",
"qna maker"
]
}
]
}
]
}
预测响应包含该列表实体以及其他所有预测实体,因为该实体已在请求中定义。