.lu 文件格式

适用于:SDK v4

.lu文件描述了一个语言理解模型。 对于语言理解概念,.lu 文件包含基于类似于 Markdown 的简单文本的定义。 你可以使用一个或多个 .lu 文件为机器人使用的自然语言理解(NLU)服务或引擎(例如语言理解(LUIS)Orchestrator 训练语言模型。 选择的 NLU 引擎可能只能解释 .lu 文件可以描述的元素的子集。

NLU 引擎依赖于语言模型来了解用户所说的内容。 该引擎基于一组训练示例创建语言模型,就像任何机器学习算法一样。 训练后,引擎使用模型来预测语句的意图,通常以一个或者多个代表用户想要执行的任务或操作的意图的形式,以及零个或多个代表与意图相关的元素的实体

可以将 LUIS 或 Orchestrator 与使用 Bot Framework SDK 或 Composer 开发的任何机器人配合使用。

注意

语言理解 (LUIS) 将于 2025 年 10 月 1 日停用。 从 2023 年 4 月 1 日开始,将无法创建新的 LUIS 资源。 语言理解的较新版本现已作为 Azure AI 语言的一部分提供。

对话语言理解(CLU)是 Azure AI 语言的一项功能,是 LUIS 的更新版本。 有关 Bot Framework SDK 中的语言理解支持的更多信息,请参阅 自然语言理解

本文是关于如何在 .lu 文件格式中表示语言模型元素的参考文档。 有关如何在机器人中使用语言理解的信息,请参阅 Composer 中的语言理解或自然语言处理。

使用示例语句定义意图

意图代表用户在语句中想要执行的任务或操作。 你向机器人添加意图以使其能够识别代表相同用户意图的问题或命令组。

一些你可能为旅行机器人定义的意图示例,以及它们所定义的示例语句:

意图 示例语句
BookFlight “帮我订一张下周去毛伊岛的机票”
“17 号飞毛伊岛”
“我需要一张下周五去毛伊岛的机票”
Greeting “嗨”
“你好”
“下午好”
CheckWeather “下周毛伊岛的天气怎么样?”
“我喜欢 Cookie”
“据记录,牛蛙能够跳跃超过7英尺”

除了你定义的意图之外,None 是一个回退意图,当无法从用户的语句中确定意图时触发该unknownIntent事件。 在使用LUIS时,None 意图是一个必需意图,你需要创建一些域外的语句示例。 与 None 意向关联的陈述应占 .lu 文件中总话语的大约 10%。

带有其示例语句的意图按以下方式声明:

# <intent-name>
    - <utterance1>
    - <utterance2>

# <intent-name> 描述新的意图定义部分。 意图定义后的每一行都是使用该- <utterance>格式描述该意图的示例语句。

这里是一个示例 .lu 文件,演示了这些意图和捕获用户表达意图的示例语句的方式:

> Use ">" to create a comment in your .lu files.
> Use multiple comment ">" characters to define outlining
> sections in the file to help you organize the content.

>> Primary intents
# BookFlight
- Book me a flight to Maui next week
- Fly me to Maui on the 17th
- I need a plane ticket next Friday to Maui

# Greeting
- Hi
- Hello
- Good afternoon

>> Secondary intents
# CheckWeather
- What's the weather like in Maui next week?

注意

使用 -+* 字符来表示列表。 不支持编号列表。

使用 > 创建注释。

还可以使用多个注释(“”>)字符来定义 .lu 文件中的大纲部分,以帮助组织内容。 Composer 允许你在编辑 LU 文件时使用大纲功能。

有关意图和语句的详细信息,请参阅 LUIS 文档中的 LUIS APP 中的意图了解适用于你的 LUIS APP 的良好语句

实体

实体是语句的一部分,可以被视为在意图解释中可以使用的参数。 例如,在语句 Book a ticket to Maui中,Maui 是一个 FlightDestination 实体。

示例用户语句 预测的意图 提取的实体 说明
嗨,你好吗? 问候语 - 没有要提取的实体。
“预订飞往毛伊岛的航班” BookFlight “Maui” “FlightDestination”实体提取为“Maui”。
“下周毛伊岛的天气怎么样?” CheckWeather “Maui”, “next week” “WeatherLocation”实体提取为“Maui”,“DateRange”实体提取为“下周”。
“我想要预订一个小份披萨” orderPizza “小份” “Size”实体提取为“小份”。
“安排一个下午1点与分销部 Bob 的会议。” ScheduleMeeting “下午 1 点”,“Bob” “MeetingTime”实体提取为“下午 1 点”,“与会者”实体提取为“Bob”。

提示

有关在 LUIS 中使用实体的详细信息,请参阅 LUIS 文档中的 LUIS中的实体

实体定义

实体定义规定了如何在语句中识别一段作为实体,并且你随后可以在机器人中使用该实体。 有许多不同类型的实体,包括:机器学习、预生成、列表、正则表达式和模式。

.lu 文件中的实体定义以 @ 符号(@)开头,后跟实体的类型和实体名称:

@ <entity-type> <entity-name>

可选,每个实体还可以具有角色,用于标识同一实体的不同用途。 你还可以添加 功能 来帮助更好地识别实体。 常规语法看起来像这样:

@ <entity-type> <entity-name> [[hasRole[s]] <comma-separated-list-of-roles>] [hasFeature[s] <comma-separated-list-of-features>]

需要定义的实体,如列表正则表达式实体,使用以下表示法:

@ <entity-type> <entity1-name> = <definition>

在接下来的部分中,将演示实体声明的其他示例,以及它们所适用的实体类型。

除了预生成实体之外,实体名称可以包含多个用空格分隔的单词。 所有包含空格的实体名称必须用引号括起来:

@ ml "this is a simple entity" role1, role2 = definition
@ ml 'another simple entity' hasRole role1 hasFeatures feature1, feature2

实体类型

LUIS 中有多种类型的实体。 在以下部分中,你将了解这些实体类型及相关概念,例如 角色功能,以及如何创建使用这些实体的 LU 模板的示例。

机器学习实体

机器学习实体是一种让你在示例话语中提供标签的实体,以便训练模型。 这给了他们学习所需的上下文。 机器学习实体在识别数据时非常理想,尤其是当数据格式不一致但具有相同含义时。

以下示例演示名为 city (@ ml city) 的机器学习实体,以及 bookFlight 带有标记实体的示例语句的意向:

> Define the city machine-learned entity
@ ml city

> Define the bookFlight intent with sample utterances that contain the machine-learned entities
# bookFlight
- Book a flight from {@city = Cairo} to {@city = Seattle}
- Get me 2 tickets for a flight to {@city = Bengaluru}
- Purchase ticket from {@city = Washington} to {@city = Tampa Bay}

当用户说类似“我需要预订从伦敦到马德里的航班”时,LUIS 将检测“bookFlight”意图,并将伦敦和马德里提取为城市实体。

角色实际上是你可以添加到机器学习实体的附加上下文信息的一种方式,它也可以从上下文中学习。 以下示例语句显示了与城市实体关联的出发地和目标角色:

- Book a flight from {@city:departure = Cairo} to {@city:destination = Seattle}

机器学习实体也可能非常复杂,因为它们具有相互关联的实体层次结构。 例如,可以具有类似 pizzaOrder 具有以下子实体的实体:数量、大小、面团、配料等。

通过在 @ 符号(@)前添加短横线(-)并进行缩进来定义子实体,如下例所示:

@ prebuilt number
@ list sizeList
@ list crustList
@ list toppingList

@ ml pizzaOrder
    - @ number Quantity
    - @ sizeList Size
    - @ crustList Crust
    - @ toppingList Topping

在上面的示例中,数字实体是 预生成的实体。 其余实体都是 列表实体

下一个例子演示一个address机器学习实体的定义,具有 fromAddresstoAddress 两个角色,以及子实体。

@ list cityList
@ prebuilt number
@ prebuilt geographyV2
@ regex regexZipcode = /[0-9]{5}/
@ ml address hasRoles fromAddress, toAddress
@ address =
    - @ number 'door number'
    - @ ml streetName
    - @ ml location usesFeature geographyV2
        - @ cityList city
        - @ regexZipcode zipcode

预生成实体

预生成的 LUIS 实体由系统定义。 这样可以节省你的工作,因为它们具有高质量,并提供规范化值,更易于在程序中使用。 例如,短语“一千零二”将成为数字 1002。 支持以下LUIS [预生成实体][prebuilt-entity] 类型:

  • age
  • datetimeV2
  • 维度
  • 电子邮件
  • geographyV2
  • keyPhrase
  • money
  • 数字
  • 序号
  • ordinalV2
  • percentage
  • personName
  • phonenumber
  • 温度
  • url
  • datetime

以下是如何定义预生成实体的示例:

@ prebuilt number 
@ prebuilt datetimeV2
@ prebuilt age

列表实体

列表实体[list-entity] 表示一组固定、封闭的相关单词及其同义词。 当识别任何相应的同义词时,将返回规范化值。 它们区分大小写并基于精确文本匹配进行提取。

以下示例演示用于定义列表实体的语法:

@ list <entityName>  =
    - <normalized-value> :
        - <synonym1>
        - <synonym2>
        - ...
    - <normalized-value> :
        - <synonym1>, <synonym2>, ...

扩展pizzaOrder机器学习实体部分的示例,以下是大小和面团子实体的列表示例:

@ list sizeList = 
    - Extra Large :
        - extra large
        - XL
        - xl
        - huge
        - massive
    - Large:
        - large
        - big
    - Medium :
        - medium
        - regular
    - Small :
        - small
        - smallest
        - individual

@ list crustList = 
    - Stuffed Crust :
        - stuffed crust
        - stufffed crust
    - Thin :
        - thin
        - thin crust
    - Thick :
        - thick
        - thick crust
        - Deep Dish
        - deep dish

提示

由于列表实体需要提取完全匹配项,因此可以通过添加常见拼写错误来提高结果。 拼写错误的一个常见原因是键入错误,如上例中的 “stufffed crust” 中的双字母被重复。

使用列表实体时,应直接在语句中包含列表中的值,虽然无需标记列表实体,但仍然可以在模式中使用它们作为占位符。 以下示例显示了一个包含列表中值的语句:

- I'd like to order a large pepperoni stuffed crust pizza.

正则表达式实体

正则表达式实体[regular-expression-entity] 基于所提供的正则表达式字符模式提取实体。 正则表达式最适用于结构化文本或预定义的带有特定格式的字母数字值序列。 例如:

实体 正则表达式 示例
航班号 flight [A-Z]{2} [0-9]{4} flight AS 1234
信用卡号 [0-9]{16} 5478789865437632

以下是正则表达式实体定义的示例:

> Flight Number regular expression entity definition
@ regex flightNumber = /flight [A-Z]{2} [0-9]{4}/

> Credit Card Number regular expression entity definition
@ regex creditCardNumber = /[0-9]{16}/

角色

角色是基于言语上下文的实体的命名别名。 角色可与任何预生成的或自定义的实体类型配合使用,并可在示例语句和模式中使用。

在下面的示例中,位置实体具有两个角色:origindestination

实体 角色 目的
位置 origin 飞机出发地
位置 目的地 飞机降落地

可以显式或隐式定义 .lu 文件格式的角色。 显式角色定义遵循以下表示法:

@ <entityType> <entityName> [hasRole[s]] role1, role2, ...

可以通过以下多种方式显式定义实体及其角色:

> # ml entity definition with roles
> the following are 4 different approaches to define roles:

@ ml name role1, role2

@ ml name hasRoles role1, role2

@ ml name
@ name hasRoles role1, role2

@ ml name
@ name hasRole role1
@ name hasRole role2

还可以在模式和带标签的语句中使用以下格式隐式定义角色:

{@<entityName>:<roleName>}

可以在下面的示例中看到如何隐式定义角色 userName:firstNameuserName:lastName

# getUserName
- My first name is {@userName:firstName=vishwac}
- My full name is {@userName:firstName=vishwac} {@userName:lastName=kannan}
- Hello, I'm {@userName:firstName=vishwac}
- {@userName=vishwac} is my name

@ ml userName

模式中,可以使用 {<entityName>:<roleName>} 表示法来使用角色。 下面是一个示例:

# getUserName
- call me {name:userName}
- I'm {name:userName}
- my name is {name:userName}

还可以在模式中为一个实体定义多个角色,如下所示:

> Roles can be specified for list entity types as well - in this case fromCity and toCity are added as roles to the 'city' list entity defined further below

# BookFlight
- book flight from {city:fromCity} to {city:toCity}
- [can you] get me a flight from {city:fromCity} to {city:toCity}
- get me a flight to {city:toCity}
- I need to fly from {city:fromCity}

$city:Seattle=
- Seattle
- Tacoma
- SeaTac
- SEA

$city:Portland=
- Portland
- PDX

模式

[模式][] 允许你涵盖大量示例,这些示例应通过创建一个包含应找到实体的位置的占位符的语句来匹配这些示例。 这些模式是令牌级正则表达式,其中包含实体的占位符。 如果语句中有任何实体占位符或模式语法,那么它将被解释为模式。 否则,它被解释为训练机器学习的语句。

实体占位符可以对应于任何类型的实体,也可以由模式本身定义,例如当模式中的一个部分是通过查看周围的词来识别的实体时。

模式语法

.lu 文件格式支持 LUIS [模式语法][]。 模式语法是嵌入在语句中的模板。 模板应包含你想匹配的字词和实体,以及你想忽略的字词和标点符号。 模板不是正则表达式。

模式中的实体被大括号 {} 括起。 模式可包含实体和带角色的实体。 [Pattern.any][pattern-any] 是仅在模式中使用的实体。

函数 语法 嵌套级别 示例
实体 {} - 大括号 2 Where is form {entity-name}?
可选 [] - 方括号
可选和分组的任何组合的嵌套级别都限制为 3
2 The question mark is optional [?]
分组 () - 括号 2 is (a \| b)
| - 竖线(管道)
一个组中的竖线限制为 2
- Where is form ({form-name-short} \| {form-name-long} \| {form-number})
语句的开头和/或结尾 ^ - 脱字号 - ^begin the utterance
the utterance is done^
^strict literal match of entire utterance with {number} entity^

有关详细信息,请参阅 LUIS 文档中的 [模式语法][] 一文。

以下示例显示了一个定义,该定义将被视为一个包含由模式定义的alarmTime实体的模式:

# DeleteAlarm
- delete the {alarmTime} alarm

语句“删除上午 7 点的闹钟”将匹配该模式,并识别出一个 alarmTime “上午 7 点”的实体。

相比之下,以下示例是一个带标签的语句,其中 alarmTime 是一个机器学习实体,因为它具有标记的值7AM

# DeleteAlarm
- delete the {alarmTime=7AM} alarm

不能在同一话语中混合使用实体标签和实体占位符,但可以使用与机器学习实体相对应的占位符。

提示

在添加模式之前,应了解机器人对用户输入的响应,因为模式比示例语句的权重更大,会影响置信度。 在设计模型之初就添加它们并没有什么坏处,但如果在使用语句测试模型之后再添加,则可以更容易地看出每个模式如何改变模型。

短语列表

短语列表[phrase-list] 是包含单词、短语、数字或其他字符的列表,可帮助查找要确定的概念。 列表不区分大小写。 短语列表有两个不同的目的:

  • 扩展字典:定义短语列表时,这是默认值,称为 不可互换。 多词短语成为机器学习的一项功能,需要较少的示例来学习。 在此用法中,短语列表的成员之间没有关系。
  • 定义同义词:可互换短语列表用于定义同义词,这些同义词的含义 相同。 此用法有助于使用更少的示例进行通用化。 列表中的任何短语都会导致机器学习具有相同的功能。 若要使用此功能,需要在短语列表定义中指定 interchangeable@ phraselist <Name>(interchangeable)

注意

特征可以是与意图或实体关联的短语列表或实体,以强调该特征在准确检测用户意图中的重要性。 有关详细信息,请参阅 添加短语列表作为特征

有关何时以及如何使用短语列表的其他信息,包括它们通常用于的典型场景,请参阅[为概念创建短语列表][phrase-list]。

可以使用以下表示法定义短语列表:

@ phraselist <Name>
    - <phrase1>
    - <phrase2>

以下是用于扩展词典的短语列表的示例:

@ phraseList newTerms=
- surf the sky
- jump on the beam
- blue sky pajamas

短语列表还可用于通过将同义词标记为可互换来定义同义词。

@ phraseList Want(interchangeable) =
    - require, need, desire, know

> You can also break up the phrase list values into a bulleted list
@ phraseList Want(interchangeable) =
    - require
    - need
    - desire
    - know

默认情况下,短语列表可用于所有已学习的意图和实体。 有三种可用性状态:

可用性状态 说明
enabledForAllModels (默认)当短语列表被标记为 enabledForAllModels 时,无论是否专门将其列为特征,它都可供所有模型使用。
disabledForAllModels 当短语列表被标记为 disabledForAllModels 时,仅当该短语列表被专门列为特征,才会在模型中使用。
disabled 当短语列表被标记为 disabled 时,它不会在任意位置使用,包括任何专门列为特征的模型中。 这提供了一种简单的方法,用于关闭短语列表,以查看在没有短语列表的情况下工作情况。

短语列表默认提供全局可用,还可以使用 enabledForAllModels 关键字进行具体设置:

@ phraselist abc enabledForAllModels

以下两个示例将短语列表设置为 disabledForAllModels

@ phraselist abc disabledForAllModels

> You can also use this approach
@ phraselist question(interchangeable) =
    - are you
    - you are

@ question disabledForAllModels

将短语列表设置为 disabled时,即使专门列为特征,也不会使用它:

> phrase list definition, temporarily set to disabled to measure its impact

@ phraselist yourPhraseList disabled

> phrase list as feature to intent, won't be used

@ intent yourIntent usesFeature yourPhraseList

短语列表可用作特定意图和实体的特征,如下一部分所述。

向意图和实体添加特征

机器学习的工作原理是从示例语句中获取特征和了解它们与所需意图或实体的关系。 默认情况下,特征只是构成语句的字词。 短语列表提供了一种将多个单词组合成新特征的方法;这使得机器学习从较少的示例中得到更好的通用化。 默认情况下,短语列表是全局的,适用于所有机器学习模型,但你也可以将它们绑定到特定的意图或实体。 还可以使用意图或实体作为特征来检测其他意图作为实体。 这提供了模块化功能,使你可以从更简单的构建基块中构建更复杂的概念。

注意

在机器学习中,特征是描述系统观察并学习的数据的区分特征或属性的文本。 短语列表、意图和实体可用作特征,如本部分和以下部分所述。

可以使用 usesFeature 关键字将特征添加到任何已学习的意图或实体。

添加一个短语列表作为特征

短语列表可以作为特征添加到意图或实体。 这有助于这些特定意图或实体不影响其他意图和实体。 下面的示例演示如何将短语列表定义为另一个模型的特征:

> phrase list definition

@ phraseList PLCity(interchangeable) =
    - seattle
    - space needle
    - SEATAC
    - SEA

> phrase list as feature to intent 

@ intent getUserProfileIntent usesFeature PLCity

> phrase list as a feature to an ml entity

@ ml myCity usesFeature PLCity

@ regex regexZipcode = /[0-9]{5}/

> a phrase list is used as a feature in a hierarchal entity

@ ml address fromAddress, toAddress
@ address =
    - @ number 'door number'
    - @ ml streetName
    - @ ml location
        - @ ml city usesFeature PLCity
        - @ regexZipcode zipcode

添加实体或意图作为特征

下面的示例演示如何使用 usesFeature 添加意图和实体作为特征:

> entity definition - @ <entityType> <entityName> [<roles>]

@ prebuilt personName
@ prebuilt age

> entity definition with roles

@ ml userName hasRoles fistName, lastName

> add an entity as a feature to another entity

@ userName usesFeature personName

> add an entity as feature to an intent

@ intent getUserNameIntent usesFeature personName

> Intent definition

# getUserNameIntent
- utterances

> multiple entities as a feature to a model

@ intent getUserNameIntent usesFeature age, personName

> intent as a feature to another intent

@ intent getUserProfileIntent usesFeature getUserNameIntent

# getUserProfileIntent
- utterances

元数据

可以在 .lu 文件中包含与你的 LUIS 应用程序或 QnA Maker 知识库相关的元数据。 这将有助于指导分析器正确处理 LU 内容。 元数据通常添加到 .lu 文件的开头。

下面是使用 > !# 定义配置信息的方法:

> !# @<property> = <value>
> !# @<scope>.<property> = <value>
> !# @<scope>.<property> = <semicolon-delimited-key-value-pairs>

请注意,通过 CLI 参数显式传递的任何信息都将替代 .lu 文件中的信息。

> LUIS application information
> !# @app.name = my luis application
> !# @app.desc = description of my luis application
> !# @app.versionId = 1.0
> !# @app.culture = en-us
> !# @app.luis_schema_version = 7.0.0
> !# @app.settings.NormalizePunctuation = true
> !# @app.settings.NormalizeWordForm = true
> !# @app.settings.UseAllTrainingData = true
> !# @app.tokenizerVersion = 1.0.0

有关上述示例中使用的应用程序元数据值的说明,请参阅下表。 有关 LUIS 中的 app.settings 的信息,请参阅 LUIS 文档中的 [应用和版本设置][luis-metadata]。

元数据 说明
Name 你的应用程序名称
VersionId 该特定版本的名称
区域性 应用程序使用的语言
架构版本 LUIS 架构在 LUIS 中添加新功能或设置时更新。 使用在创建或更新 LUIS 模型时使用的架构版本号。

外部引用

以下部分详细介绍了如何进行 本地文件URI 引用。

本地文件引用

注意

Azure QnA Maker 将于 2025 年 3 月 31 日停用。 从 2022 年 10 月 1 日开始,你将无法创建新的 QnA Maker 资源或知识库。 问答功能的较新版本现已作为 Azure AI 语言的一部分提供。

自定义问答是 Azure 语言认知服务的一项功能,是 QnA Maker 服务的更新版本。 有关 Bot Framework SDK 中的问答支持的详细信息,请参阅 自然语言理解

引用 .lu 文件。 遵循 Markdown 链接语法。 支持的引用包括:

  • 通过 [link name](<.lu file name>) 引用另一个 .lu 文件。 引用可以是绝对路径,也可以是包含 .lu 文件中的相对路径。
  • 支持通过以下方式引用包含其他 .lu 文件的文件夹:
    • [link name](<.lu file path>*) 在指定的绝对路径或相对路径下查找 .lu 文件
    • [link name](<.lu file path>**) 以递归方式在指定的包含子文件夹的绝对路径或相对路径下查找 .lu 文件。
  • 还可添加对意向部分下的指定文件中定义的言语的引用,或添加为 QnA 对。
    • [link name](<.lu file path>#<INTENT-NAME>):查找 .lu 文件中 <> 下的所有语句,并将其添加到指定引用的语句列表。
    • [link name](<.lu file path>#<INTENT-NAME>*utterances*):查找 .lu 文件中 <> 下的所有语句(非模式),并将其添加到指定引用的语句列表。
    • [link name](<.lu file path>#<INTENT-NAME>*patterns*)查找 .lu 文件中 <> 下的所有模式(非语句),并将其添加到指定引用的模式列表。
    • [link name](<.lu file path>#*utterances*) 可查找 .lu 文件中的所有言语,并将其添加到指定引用的言语列表。
    • [link name](<.lu file path>#*patterns*) 查找 .lu 文件中的所有模式,并将它们添加到指定引用的语句列表。
    • [link name](<.lu file path>#*utterancesAndPatterns*) 查找 .lu 文件中的所有语句和模式,并将它们添加到指定引用的语句列表。
    • [link name](<.qna file path>#$name?):查找 .qna 内容的特定更改定义中的所有更改,并将它们添加到指定引用的语句列表。
    • [link name](<.qna file path>#*alterations*?):查找 .qna 内容中的所有更改,并将其添加到指定引用的语句列表。
    • [link name](<.qna file path>#?question-to-find?):查找特定问题中的所有变体问题,并将它们添加到指定引用的语句列表。 请注意,问题中的任何空格都需要替换为 - 字符。
    • [link name](<.qna file path>#*answers*?) 可查找所有答案,并将它们添加到指定引用的语句列表。

下面是上述引用的示例:

> You can include references to other .lu files

[All LU files](./all.lu)

> References to other files can have wildcards in them

[en-us](./en-us/*)

> References to other lu files can include subfolders as well.
> /** indicates to the parser to recursively look for .lu files in all subfolders as well.

[all LU files](../**)

> You can include deep references to intents defined in a .lu file in utterances

# None
- [None uttearnces](./all.lu#Help)

> With the above statement, the parser will parse all.lu and extract out all utterances associated with the 'Help' intent and add them under 'None' intent as defined in this file.

> NOTE: This **only** works for utterances as entities that are referenced by the uttearnces in the 'Help' intent won't be brought forward to this .lu file.

# All utterances
> you can use the *utterances* wild card to include all utterances from a lu file. This includes utterances across all intents defined in that .lu file.
- [all.lu](./all.lu#*utterances*)
> you can use the *patterns* wild card to include all patterns from a lu file.
> - [all.lu](./all.lu#*patterns*)
> you can use the *utterancesAndPatterns* wild card to include all utterances and patterns from a lu file.
> - [all.lu](./all.lu#*utterancesAndPatterns*)

> You can include wild cards with deep references to QnA maker questions defined in a .qna file in utterances

# None
- [QnA questions](./*#?)

> With the above statement, the parser will parse **all** .lu files under ./, extract out all questions from QnA pairs in those files and add them under 'None' intent as defined in this file.

> You can include deep references to QnA maker questions defined in a .qna file in utterances

# None
- [QnA questions](./qna1.qna#?)

> With the above statement, the parser will parse qna1.lu and extract out all questions from QnA pairs in that file and add them under 'None' intent as defined in this file.

URI 引用

下面是如何进行 URI 引用的示例:

> URI to LU resource
[import](http://.../foo.lu)

# intent1
> Ability to pull in specific utterances from an intent
- [import](http://.../foo.lu#None)

# intent2
> Ability to pull in utterances or patterns or both from a specific intent 'None'
- [import](http://..../foo.lu#None*utterances*)
- [import](http://..../bar.lu#None*patterns*)
- [import](http://..../taz.lu#None*utterancesandpatterns*)

# intent3
> Ability to pull in all utterances or patterns or both across all intents
- [import](http://..../foo.lu#*utterances*)
- [import](http://..../bar.lu#*patterns*)
- [import](http://..../taz.lu#*utterancesandpatterns*)

其他信息