你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在预测之前或预测期间更改话语数据

重要

LUIS 将于 2025 年 10 月 1 日停用,从 2023 年 4 月 1 日开始,你将无法创建新的 LUIS 资源。 建议将 LUIS 应用程序迁移对话语言理解,以便从持续的产品支持和多语言功能中受益。

LUIS 提供在预测之前或预测期间操作陈述的方法。 这些方法包括修复拼写,以及修复预生成 datetimeV2 的时区问题。

更正陈述中的拼写错误

V3 运行时

在将言语发送给 LUIS 之前,请先对文本进行预处理以进行拼写更正。 使用正确拼写的示例言语,以确保获得正确的预测。

将文本发送到 LUIS 之前,请使用必应拼写检查更正文本。

在 V3 运行时之前

LUIS 使用必应拼写检查 API V7 来更正陈述中的拼写错误。 LUIS 需要与该服务关联的密钥。 创建密钥,然后将密钥添加为终结点的 querystring 参数。

终结点需要两个参数以进行拼写更正:

Param
spellCheck boolean
bing-spell-check-subscription-key 必应拼写检查 API V7 终结点密钥

必应拼写检查 API V7 检测到错误时,将一并从终结点返回原始陈述、已更正陈述和预测。

{
  "query": "Book a flite to London?",
  "alteredQuery": "Book a flight to London?",
  "topScoringIntent": {
    "intent": "BookFlight",
    "score": 0.780123
  },
  "entities": []
}

允许的字词列表

LUIS 中使用的必应拼写检查 API 不支持在拼写检查更改期间要忽略的单词列表。 如果需要允许字词或首字母缩写词的列表,请在将话语发送到 LUIS 进行意向预测之前在客户端应用程序中处理话语。

更改预生成 datetimeV2 实体的时区

LUIS 应用使用预生成的 datetimeV2 实体时,可以在预测响应中返回日期/时间值。 请求的时区用于确定要返回的正确日期/时间。 如果请求在到达 LUIS 之前来自机器人或另一个集中式应用程序,则更正 LUIS 使用的时区。

用于更改时区的 V3 预测 API

在 V3 中,datetimeReference 确定时区偏移量。

用于更改时区的 V2 预测 API

可以通过以下方式更正时区:根据 API 版本,使用 timezoneOffset 参数将用户的时区添加到终结点。 要更改时间,此参数值应为正数或负数(以分钟为单位)。

V2 预测夏令时示例

如果需要返回的预生成 datetimeV2 来调整夏令时,则应对该终结点查询使用值为正数/负数(以分钟为单位)的 querystring 参数。

增加 60 分钟:

https://{region}.api.cognitive.microsoft.com/luis/v2.0/apps/{appId}?q=Turn the lights on?timezoneOffset=60&verbose={boolean}&spellCheck={boolean}&staging={boolean}&bing-spell-check-subscription-key={string}&log={boolean}

减去 60 分钟:

https://{region}.api.cognitive.microsoft.com/luis/v2.0/apps/{appId}?q=Turn the lights on?timezoneOffset=-60&verbose={boolean}&spellCheck={boolean}&staging={boolean}&bing-spell-check-subscription-key={string}&log={boolean}

V2 预测 C# 代码确定正确的参数值

下面的 C# 代码使用 TimeZoneInfo 类的 FindSystemTimeZoneById 方法基于系统时间来确定正确的偏移值:

// Get CST zone id
TimeZoneInfo targetZone = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");

// Get local machine's value of Now
DateTime utcDatetime = DateTime.UtcNow;

// Get Central Standard Time value of Now
DateTime cstDatetime = TimeZoneInfo.ConvertTimeFromUtc(utcDatetime, targetZone);

// Find timezoneOffset/datetimeReference
int offset = (int)((cstDatetime - utcDatetime).TotalMinutes);

后续步骤

通过本教程更正拼写错误