Формат файлов LU

ОБЛАСТЬ ПРИМЕНЕНИЯ: ПАКЕТ SDK версии 4

Lu-файл описывает модель распознавания речи. Lu-файл содержит определения, подобные Markdown, простые текстовые определения для концепций распознавания речи. Вы можете использовать один или несколько lu-файлов для обучения языковой модели для службы или подсистемы распознавания естественного языка (NLU), используемой ботом, например Распознавание речи (LUIS) или Orchestrator. Подсистема NLU, которую вы выбрали, может интерпретировать только подмножество элементов, которые может описывать LU-файл.

Подсистема NLU использует языковую модель для понимания того, что говорит пользователь. Модуль создает языковую модель из наборов примеров обучения, как и любой алгоритм машинного обучения. После обучения подсистема использует модель для прогнозирования намерения речевых фрагментов, как правило, в виде одного или нескольких намерений, представляющих задачу или действие, которое пользователь хочет выполнить и ноль или несколько сущностей, представляющих элементы, относящиеся к намерению.

Вы можете использовать LUIS или Orchestrator с любым ботом, разработанным с помощью пакета SDK Bot Framework или Composer.

Примечание.

Распознавание речи (LUIS) будет прекращен 1 октября 2025 года. Начиная с 1 апреля 2023 года вы не сможете создавать новые ресурсы LUIS. Новая версия распознавания речи теперь доступна как часть языка ИИ Azure.

Распознавание речи (CLU) — это обновленная версия LUIS. Дополнительные сведения о поддержке распознавания речи в пакете SDK Bot Framework см. в разделе "Распознавание естественного языка".

В этой статье описывается, как представлять элементы языковой модели в формате LU-файла. Сведения о том, как распознавание речи используется в ботах, см. в Распознавание речи или обработке естественного языка в Composer.

Определение намерений с помощью примеров речевых фрагментов

Намерение представляет задачу или действие, которое пользователь хочет выполнить, как указано в высказывании пользователя. Вы добавляете намерения в бот для определения групп вопросов или команд, представляющих одно и то же намерение пользователя.

Некоторые примеры намерений, которые можно определить для бота для путешествий, с примерами речевых фрагментов, которые они определены из:

Намерение Примеры высказываний
BookFlight "Забронировать мне рейс в Мауи на следующей неделе"
"Летать меня в Мауи на 17-м"
"Мне нужен билет на самолет в следующую пятницу на Мауи"
Приветствие "Привет"
"Hello"
"Добрый день"
CheckWeather "Какая погода, как в Мауи на следующей неделе?"
None "Мне нравится файлы cookie"
"Бульдоги были записаны прыжки на 7 футов"

Помимо определенных намерений, Нет является резервным намерением, которое приводит unknownIntent к возникновению события, когда намерения не могут быть определены из речевых фрагментов пользователей. При использовании LUIS намерение None является обязательным намерением, которое необходимо создать с речевыми фрагментами, которые находятся за пределами домена. Речевые фрагменты, связанные с намерением None , должны составлять примерно 10% от общего числа речевых фрагментов в lu-файле.

Намерения с их примерами речевых фрагментов объявляются следующим образом:

# <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 в документации LUIS.

Сущности

Сущность является частью высказываний, которые можно рассматривать как параметр, который можно использовать в интерпретации намерения. Например, в высказывании забронировать билет на Мауи, Мауи является сущностью FlightDestination.

Пример речевого фрагмента пользователя Прогнозирование намерения Сущности извлечены Описание
Привет! Как дела? Приветствие - Не требуется извлекать сущности.
"Забронировать рейс в Мауи" BookFlight "Maui" Сущность FlightDestination извлекается как "Maui".
"Какая погода, как в Мауи на следующей неделе?" CheckWeather "Maui", "на следующей неделе" Сущность WeatherLocation извлекается как "Maui" и "DateRange" извлекается как "на следующей неделе".
"Я хочу заказать небольшую пиццу" orderPizza "небольшой" Сущность Size извлекается как небольшая.
"Запланировать встречу в 13:00 с Бобом в Distribution" ScheduleMeeting "1 вечера", "Боб" Сущность MeetingTime извлекается как "1pm" и "Участники" извлекается как "Bob".

Совет

Дополнительные сведения об использовании сущностей в 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, которые используют их.

Сущность, прошедшая машинное обучение

Сущности, научиемые машинным обучением, — это сущности , которые позволяют предоставлять примеры, в которых они помечены в примерах речевых фрагментов. Это дает им контекст, необходимый для обучения. Сущность машинного обучения идеально подходит при определении данных, которые не всегда хорошо форматированы, но имеют то же значение.

В следующем примере показана сущность с именем города@ 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

В приведенном выше примере сущность number является предварительно созданной сущностью. Остальные сущности — это все сущности списка.

В следующем примере показано определение сущности 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 [предварительно созданная сущность][предварительно созданная сущность]:

  • возраст
  • datetimeV2
  • измерение
  • эл. почта
  • geographyV2
  • KeyPhrase
  • money
  • Номер
  • ordinal
  • 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

Совет

Так как для сущности списка требуется извлечь точное соответствие, результаты могут улучшиться путем добавления распространенных ошибок. Одна из распространенных причин ошибок является результатом ошибок ввода, таких как двойные буквы, тройные, как в "забитой коре" в приведенном выше примере.

При использовании сущностей списка следует включить значение из списка непосредственно в речевой фрагмент, не нужно подписывать сущности списка, хотя их можно использовать в качестве владельцев мест в шаблоне. В следующем примере показан фрагмент с значениями из списка:

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

Сущность регулярного выражения

[сущность регулярного выражения][регулярное выражение-сущность] извлекает сущность на основе предоставленного шаблона символа регулярного выражения. Регулярные выражения лучше всего подходит для структурированного текста или предопределенной последовательности буквенно-цифровых значений, ожидаемых в определенном формате. Например:

Объект Регулярное выражение Пример
Номер рейса рейс [A–Z] {2} [0–9]{4} рейс 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}/

Роли

Роль — это именованный псевдоним для сущности на основе контекста в речевом фрагменте. Роль можно использовать с любым предварительно созданным или пользовательским типом сущности и использоваться как в примерах речевых фрагментов, так и в шаблонах.

В примере ниже сущность Location имеет две роли: origin и destination.

Объект Роль Назначение
Местонахождение origin Место вылета самолета из
Местонахождение destination Где самолет заземляется

Роли в формате 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:firstName и userName: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)
or | - вертикальная полоса (труба)
Существует ограничение 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

Вы не можете смешивать метки сущностей и держателей мест сущностей в одном высказывании, но можно использовать держатели мест, соответствующие сущностям машинного обучения.

Совет

Перед добавлением шаблонов бот должен понять, как бот реагирует на входные данные пользователя, так как шаблоны взвешиваются более сильно, чем примеры речевых фрагментов и будут перемежать достоверность. В начале разработки модели их нет вреда, но проще увидеть, как каждая модель изменяет модель после тестирования модели с речевыми фрагментами.

Список фраз

[список фраз][список фраз] — это список слов или фраз, которые помогают найти концепцию, которую вы пытаетесь определить. Список не учитывает регистр. Списки фраз имеют две разные цели:

  • Расширение словаря: это значение по умолчанию при определении списка фраз и называется взаимозаменяемым. Многословные фразы становятся функцией машинного обучения, которая требует меньше примеров для изучения. В этом случае связь между членами списка этапов отсутствует.
  • Определение синонимов: взаимозаменяемые списки фраз используются для определения синонимов, которые означают то же самое. Это использование помогает обобщению с меньшим количеством примеров. Любая фраза в списке приводит к тому же компоненту машинного обучения. Чтобы использовать это, необходимо указать в определении interchangeable списка фраз (@ phraselist <Name>(interchangeable))

Примечание.

Функция может быть списком фраз или сущностью, которую вы связываете с намерением или сущностью, чтобы подчеркнуть важность этой функции в точном обнаружении намерения пользователя. Дополнительные сведения см. в разделе "Добавление списка фраз в качестве функции ".

Дополнительные сведения о том, когда и как использовать списки фраз, включая типичные сценарии, для которых они используются, см. в статье [Создание списка фраз для концепции][список фраз][список фраз].

Вы определяете списки фраз с помощью следующей нотации:

@ 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

По умолчанию списки фраз доступны для всех изученных намерений и сущностей. Существует три состояния доступности:

Состояние доступности Description
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

Метаданные

Вы можете включить метаданные, связанные с приложением LUIS или QnA Maker, база знаний в LU-файле. Это позволит указать анализатору, как правильно обработать содержимое LU-файла. Метаданные обычно добавляются в начало LU-файла.

Вот как определить сведения о конфигурации с помощью > !#:

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

Обратите внимание на то, что любые сведения, явно переданные через аргументы интерфейса командной строки, переопределяют сведения в 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

В таблице ниже приведено описание значений метаданных приложения, используемых в приведенном выше примере. Сведения о app.settings в LUIS см. в статье [Параметры приложения и версии][luis-metadata] в документации LUIS.

Метаданные Description
Имя. Имя приложения
VersionId Имя конкретной версии
Культура Язык, используемый приложением
Версия схемы Схема LUIS обновляется в любое время, когда добавлена новая функция или параметр в LUIS. Используйте номер версии схемы, используемый при создании или обновлении модели LUIS.

Внешние ссылки

В разделах ниже приведены сведения о том, как создавать ссылки на локальный файл и URI .

Ссылки на локальные файлы

Примечание.

Azure AI QnA Maker будет прекращен 31 марта 2025 г. С 1 октября 2022 г. вы не сможете создавать новые ресурсы или базы знаний QnA Maker. Новая версия вопроса и возможности ответа теперь доступна как часть языка искусственного интеллекта Azure.

Пользовательский ответ на вопросы, компонент языка искусственного интеллекта Azure, — это обновленная версия службы QnA Maker. Дополнительные сведения о поддержке вопросов и ответов в пакете SDK Bot Framework см. в разделе "Распознавание естественного языка".

Ссылки на LU-файл Следуйте синтаксису ссылки Markdown. Поддерживаются следующие ссылки.

  • Ссылка на другой LU-файл посредством [link name](<.lu file name>). Ссылка может быть абсолютным путем или относительным путем от содержащего сведения LU-файла.
  • Ссылка на папку с другими файлами LU поддерживается с помощью следующих способов:
    • [link name](<.lu file path>*): ищет lu-файлы под указанным абсолютным или относительным путем.
    • [link name](<.lu file path>**): рекурсивно ищет lu-файлы под заданным абсолютным или относительным путем, включая вложенные папки.
  • Можно также добавить ссылки на речевые фрагменты, определенные в заданном файле в разделе intent или в виде пар вопросов и ответов.
    • [link name](<.lu file path>#<INTENT-NAME>): находит все речевые фрагменты в <файле INTENT-NAME> в LU-файле и добавляет их в список речевых фрагментов, в которых указана ссылка.
    • [link name](<.lu file path>#<INTENT-NAME>*utterances*): находит все речевые фрагменты (не шаблоны) в файле <INTENT-NAME> в LU-файле и добавляет их в список речевых фрагментов, где указана ссылка.
    • [link name](<.lu file path>#<INTENT-NAME>*patterns*): находит все шаблоны (а не речевые фрагменты) в файле <INTENT-NAME> в 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*)

Дополнительная информация