Formato de archivo .lu

SE APLICA A: SDK v4

Un archivo .lu describe un modelo de reconocimiento del lenguaje. Un archivo .lu contiene definiciones de tipo Markdown, basadas en texto simple para conceptos de reconocimiento del lenguaje. Puedes usar uno o varios archivos .lu para entrenar un modelo de lenguaje para el servicio de reconocimiento del lenguaje natural (NLU) o el motor que usa el bot, como Reconocimiento del lenguaje (LUIS) o Orchestrator. El motor de NLU que elijas solo puede interpretar el subconjunto de los elementos que puede describir un archivo .lu.

Un motor de NLU se basa en un modelo de lenguaje para comprender lo que dice un usuario. El motor crea un modelo de lenguaje a partir de conjuntos de ejemplos de entrenamiento, al igual que cualquier algoritmo de aprendizaje automático. Una vez entrenado, el motor usa el modelo para predecir la intención de una expresión, generalmente en forma de una o varias intenciones que representan una tarea o acción que el usuario quiere realizar y cero o más entidades que representan elementos relevantes para la intención.

Puedes usar LUIS o Orchestrator con cualquier bot desarrollado mediante Bot Framework SDK o Composer.

Nota:

Reconocimiento del lenguaje (LUIS) se retirará el 1 de octubre de 2025. A partir del 1 de abril de 2023, no podrás crear nuevos recursos de LUIS. Hay disponible una versión más reciente de las funcionalidades de reconocimiento del lenguaje como parte del Lenguaje de Azure AI.

Reconocimiento del lenguaje conversacional (CLU), una característica del lenguaje de Azure AI, es la versión actualizada de LUIS. Para obtener más información sobre la compatibilidad con reconocimiento del lenguaje en Bot Framework SDK, consulte reconocimiento natural del lenguaje.

Este artículo es una referencia sobre cómo representar elementos del modelo de lenguaje en el formato de archivo .lu. Para obtener información sobre cómo se usa el reconocimiento del lenguaje en los bots, consulta Reconocimiento del lenguaje o procesamiento del lenguaje natural en Composer.

Definición de intenciones mediante expresiones de ejemplo

Una intención representa una tarea o acción que el usuario quiere realizar, como se expresa en la expresión del usuario. Agrega intenciones al bot para habilitarla para identificar grupos de preguntas o comandos que representan la misma intención del usuario.

Algunos ejemplos de intenciones que podrías definir para un bot de viaje, con las expresiones de ejemplo de las que se definen:

Intención Expresiones de ejemplo
BookFlight "Resérvame un vuelo a Maui la próxima semana"
"Llévame a Maui en avión el 17"
"Necesito un billete de avión el próximo viernes a Maui"
Saludo "Buenas"
"Hola"
“Buenas tardes”
CheckWeather "¿Qué tiempo va a hacer en Maui la próxima semana?"
None "Me gustan las cookies"
"Se ha grabado a las ranas toro saltando más de 7 pies"

Además de las intenciones que definas, None es una intención de reserva que hace que el evento unknownIntent se active cuando no se pueda determinar ninguna intención de la expresión de los usuarios. Al usar LUIS, la intención None es una intención necesaria que debes crear con expresiones que están fuera del dominio. Las expresiones asociadas a la intención None deben contener aproximadamente el 10 % de las expresiones totales en el archivo .lu.

Las intenciones con tus expresiones de ejemplo se declaran de la siguiente manera:

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

# <intent-name> describe la sección de definición de una intención nueva. Cada línea después de la definición de la intención son expresiones de ejemplo que describen esa intención con el formato - <utterance>.

Este es un archivo .lu de ejemplo que muestra estas intenciones y expresiones de ejemplo que capturan formas en que los usuarios pueden expresar la intención:

> 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?

Nota:

Use los caracteres -, + o * para indicar listas. No se admiten listas numeradas.

Use > para crear un comentario.

También se pueden usar varios caracteres de comentario (">") para definir secciones de esquematización en el archivo .lu para ayudarte a organizar el contenido. Composer te permite aprovechar la esquematización al editar archivos LU.

Para obtener más información sobre las intenciones y las expresiones, consulta Intenciones en la aplicación de LUIS y Comprender qué expresiones correctas son para la aplicación de LUIS en la documentación de LUIS.

Entities

Una entidad forma parte de una expresión que se puede considerar como un parámetro que se puede usar en la interpretación de una intención. Por ejemplo, en la expresión Resérvame un ticket a Maui, Maui es una entidad FlightDestination.

Expresión de usuario de ejemplo Intención pronosticada Entidades extraídas Explicación
Hola, ¿cómo está? Saludo - No hay entidades por extraer.
"Resérvame un vuelo a Maui" BookFlight "Maui" La entidad "FlightDestination" se extrae como "Maui".
"¿Qué tiempo va a hacer en Maui la próxima semana?" CheckWeather "Maui", "próxima semana" La entidad "WeatherLocation" se extrae como entidad "Maui" y "DateRange" se extrae como "la próxima semana".
“Quiero pedir una pizza pequeña” pedirPizza "pequeña" La entidad "Tamaño" se extrae como "pequeña".
"Programar una reunión a la 1 p.m. con Bob de distribución" ScheduleMeeting “1 p.m.”, “Bob” La entidad "MeetingTime" se extrae como "1 p.m." y la entidad "Asistentes" se extrae como "Bob".

Sugerencia

Para obtener más información específica sobre el uso de entidades en LUIS, consulta Entidades en LUIS en la documentación de LUIS.

Definiciones de entidad

Una definición de entidad define cómo reconocer un intervalo en una expresión como una entidad que luego puede usar en el bot. Hay muchos tipos diferentes de entidades, como aprendizaje automático, precompilado, listas, expresiones regulares y patrones.

Las definiciones de entidad de los archivos .lu inician la entrada con el arroba (@) seguido del tipo de entidad y nombre de entidad:

@ <entity-type> <entity-name>

Opcionalmente, cada entidad también puede tener roles que identifiquen distintos usos de la misma entidad. También puedes agregar características para ayudar a realizar un mejor trabajo de reconocimiento de entidades. La sintaxis tiene el siguiente aspecto:

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

Las entidades que requieren una definición, lista de "Me gusta" y entidades de expresiones regulares se representan mediante la notación siguiente:

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

En las secciones siguientes se mostrarán ejemplos adicionales de declaraciones de entidad junto con los tipos de entidad a los que se aplican.

A excepción de las entidades precompiladas, los nombres de entidad pueden contener varias palabras con espacios. Todos los nombres de entidades con espacios en ellos se pueden incluir entre comillas:

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

Tipos de entidades

Existen varios tipos de entidades en LUIS. En las secciones siguientes, obtendrás información sobre estos tipos de entidad y conceptos relacionados, como roles y características, y ejemplos de cómo crear plantillas de LU que las usen.

Entidad con aprendizaje automático

Las entidades de aprendizaje automático son entidades que permiten proporcionar ejemplos en los que se etiquetan en las expresiones de ejemplo. Esto les proporciona el contexto necesario para aprender. La entidad de aprendizaje automático es ideal al identificar los datos que no siempre tienen un formato correcto, pero tienen el mismo significado.

En el ejemplo siguiente se muestra una entidad con aprendizaje automático denominada “ciudad” (@ ml city) y una intención bookFlight con expresiones de ejemplo con las entidades etiquetadas:

> 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}

Cuando un usuario dice algo similar a "Necesito un vuelo de Londres a Madrid", LUIS detectará la intención "BookFlight" y extraerá tanto Londres como Madrid como entidades de la ciudad.

Los roles son básicamente una capa adicional de información contextual que puede agregar a las entidades de aprendizaje automático, que también aprenden del contexto. En la expresión de ejemplo siguiente se muestran los roles de salida y destino asociados a la entidad de ciudad:

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

Las entidades de aprendizaje automático también pueden ser complejas en las que tienen una jerarquía de entidades relacionadas entre sí. Por ejemplo, puedes tener algo parecido a una pizzaOrder entidad que tenga las siguientes entidades secundarias: cantidad, tamaño, corteza, ingredientes, etc.

Para definir una entidad secundaria, debe tener un guión (-) en el signo (@) y aplicar sangría, como se muestra en el ejemplo siguiente:

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

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

En el ejemplo anterior, la entidad number es una entidad precompilada. Las entidades restantes son todas las entidades de lista.

En el ejemplo siguiente se muestra una definición de una address entidad de aprendizaje automático, con fromAddress y toAddress como dos roles, así como elementos secundarios.

@ 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

Entidades precompiladas

El sistema define las entidades de LUIS precompiladas. Esto te ahorra trabajo, ya que son de alta calidad y proporcionan valores normalizados que son más fáciles de usar en programas. Por ejemplo, la frase "mil dos" se convertirá en el número 1002. Se admiten los siguientes tipos de [prebuilt entity][prebuilt-entity] de LUIS:

  • age
  • datetimeV2
  • dimensión
  • Correo electrónico
  • geographyV2
  • keyPhrase
  • money
  • number
  • ordinal
  • ordinalV2
  • percentage
  • personName
  • phonenumber
  • temperatura
  • url
  • datetime

Estos son ejemplos de cómo definir entidades precompiladas:

@ prebuilt number 
@ prebuilt datetimeV2
@ prebuilt age

Entidad de lista

[List entities][list-entity] representan un conjunto fijo y cerrado de palabras relacionadas y sus sinónimos. El valor normalizado se devuelve cuando se reconoce cualquiera de los sinónimos correspondientes. Distinguen mayúsculas de minúsculas y se extraen en función de una coincidencia exacta de texto.

En el ejemplo siguiente se muestra la sintaxis para definir una entidad de lista:

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

Al extender el ejemplo pizzaOrder de la sección de entidades de aprendizaje automático, este es un ejemplo de listas para las entidades secundarias de tamaño y corteza:

@ 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

Sugerencia

Dado que una entidad de lista requiere que se extraiga una coincidencia exacta, los resultados pueden mejorar agregando errores de ortográficos comunes. Una de las causas comunes de los errores ortográficos es el resultado de errores de escritura, como letras dobles, triples como en "corteza rellenada" en el ejemplo anterior.

Al usar entidades de lista, debes incluir un valor de la lista directamente en la expresión, no es necesario etiquetar las entidades de lista, aunque todavía puede usarlas como marcadores de posición en un patrón. En el ejemplo siguiente se muestra una expresión con valores de la lista:

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

Entidad de expresión regular

Una [regular expression entity][regular-expression-entity] extrae una entidad basada en un patrón de carácter expresión regular que se proporciona. Las expresiones regulares son mejores para textos estructurados o para una secuencia predefinida de valores alfanuméricos que se esperan en un determinado formato. Por ejemplo:

Entidad Expresión regular Ejemplo
Número del vuelo vuelo [A-Z]{2} [0-9]{4} vuelo AS 1234
Número de la tarjeta de crédito [0-9]{16} 5478789865437632

A continuación, se muestra un ejemplo de definiciones de entidad de expresión regular:

> 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}/

Roles

Un rol es un alias con nombre para la entidad basado en el contexto dentro de una expresión. Un rol se puede usar con cualquier tipo de entidad precompilada o personalizada, y tanto en patrones como en expresiones de ejemplo.

En el ejemplo siguiente, la entidad Location tiene dos roles, origin y destination:

Entity Role Propósito
Location origin Dónde sale el avión
Location destination En dónde aterriza el avión

Los roles en el formato de archivo .lu se pueden definir de forma explícita o implícita. La definición de roles explícitos sigue la siguiente notación:

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

A continuación se muestran las distintas formas de definir explícitamente las entidades y sus roles:

> # 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

También puedes hacer referencia a roles definidos implícitamente directamente en patrones y en expresiones etiquetadas con el siguiente formato:

{@<entityName>:<roleName>}

En el ejemplo siguiente, puede ver cómo se definen implícitamente los roles userName:firstName y 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

En los patrones, puedes usar roles mediante la notación {<entityName>:<roleName>}. Este es un ejemplo:

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

También puedes definir varios roles de una entidad en los patrones, como los siguientes:

> 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

Patrones

[Patterns][] te permite cubrir un gran número de ejemplos que deben coincidir mediante la creación de una expresión con marcadores de posición para dónde se deben encontrar las entidades. Los patrones son una expresión regular de nivel de token con marcadores de posición para entidades. Si una expresión tiene cualquier marcador de posición de entidad o sintaxis de patrón, se interpreta como un patrón. De lo contrario, se interpreta como una expresión para entrenar el aprendizaje automático.

Los titulares de posición de entidad pueden corresponder a entidades de cualquier tipo o pueden definirse mediante el propio patrón, como cuando una sección del patrón es una entidad que se identifica examinando las palabras circundantes.

Sintaxis del patrón

El formato de archivo .lu admite luis [sintaxis de patrón][]. La sintaxis del patrón es una plantilla incrustada en una expresión. La plantilla debe contener las palabras y entidades que quieres que coincidan, así como las palabras y la puntuación que quiere omitir. La plantilla no es una expresión regular.

Las entidades en los patrones aparecen entre llaves, {}. Los patrones pueden incluir entidades y entidades con roles. [Pattern.any][pattern-any] es una entidad que solo se usa en los patrones.

Función Sintaxis Nivel de anidamiento Ejemplo
entidad {}: llaves 2 Where is form {entity-name}?
opcional []: corchetes
Hay un límite de 3 niveles de anidamiento de cualquier combinación de opcional y agrupación
2 The question mark is optional [?]
agrupación (): paréntesis 2 is (a \| b)
or |: barra vertical (pleca)
Hay un límite de 2 en las barras verticales (o) en un grupo
- Where is form ({form-name-short} \| {form-name-long} \| {form-number})
principio o final de la expresión ^: símbolo de intercalación - ^begin the utterance
the utterance is done^
^strict literal match of entire utterance with {number} entity^

Consulta el artículo [Pattern syntax][] de la documentación de LUIS para obtener más información.

En el ejemplo siguiente se muestra una definición que se trataría como un patrón con una entidad alarmTime definida por el patrón:

# DeleteAlarm
- delete the {alarmTime} alarm

La expresión "eliminar la alarma de 7 a.m." coincidiría con el patrón y reconocería una entidad alarmTime de "7 a. m.".

Por el contrario, el ejemplo siguiente es una expresión etiquetada donde alarmTime es una entidad de aprendizaje automático, ya que tiene un valor etiquetado 7 A.M.:

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

No puedes mezclar etiquetas de entidad y marcadores de posición de entidad en la misma expresión, pero puedes usar marcadores de posición que corresponden a entidades de aprendizaje automático.

Sugerencia

Es necesario entender cómo responde tu bot a la entrada de usuario antes de agregar patrones, ya que los patrones tienen mayor peso que las expresiones de ejemplo y sesgarán la confianza. No existe ningún inconveniente en agregarlas al principio del diseño del modelo, pero es más fácil ver cómo cada patrón cambia el modelo después de que el modelo se haya probado con expresiones.

Lista de frases

Una [phrase list][phrase-list] es una lista de palabras o frases que ayudan a encontrar el concepto que estás intentando identificar. La lista no distingue entre mayúsculas y minúsculas. Las listas de frases tienen dos propósitos diferentes:

  • Extender el diccionario: este es el valor predeterminado cuando se define una lista de frases y se conoce como no intercambiable. Las frases de varias palabras se convierten en una característica del aprendizaje automático, lo que requiere menos ejemplos para aprender. En este uso, no hay ninguna relación entre los miembros de la lista de fases.
  • Definir sinónimos: las listas de frases intercambiables se usan para definir sinónimos que significan lo mismo. Este uso ayuda a generalizar con menos ejemplos. Cualquier frase de la lista da como resultado la misma característica al aprendizaje automático. Para usar esto, es necesario especificar interchangeable en la definición de lista de frases (@ phraselist <Name>(interchangeable))

Nota:

una característica puede ser una lista de frases o una entidad que asocie a una intención o entidad para resaltar la importancia de esa característica para detectar con precisión la intención del usuario. Consulta Agregar una lista de frases como característica para obtener más información.

Para obtener información adicional sobre cuándo y cómo usar listas de frases, incluidos los escenarios típicos para los que se usan, consulta [Create a phrase list for a concept][phrase-list].

Puedes definir las listas de frases mediante la notación siguiente:

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

Este es un ejemplo de una lista de frases que se usa para extender el diccionario:

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

Las listas de frases también se pueden usar para definir sinónimos marcandolas como intercambiables.

@ 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

De forma predeterminada, las listas de frases están disponibles para todas las intenciones y entidades aprendidas. Hay tres estados de disponibilidad:

Estado de disponibilidad Descripción
enabledForAllModels (valor predeterminado) Cuando una lista de frases está marcada como enabledForAllModels, está disponible para todos los modelos, independientemente de si se muestra o no específicamente como una característica.
disabledForAllModels Cuando una lista de frases se marca como disabledForAllModels, solo se usa en un modelo si se muestra específicamente como una característica.
deshabilitado Cuando una lista de frases se marca como disabled, no se usa en ningún lugar, incluidos los modelos en los que se muestra específicamente como una característica. Esto proporciona un medio fácil de desactivar una lista de frases para ver cómo funcionan las cosas bien sin ella.

Las listas de frases están disponibles globalmente de forma predeterminada y también se pueden establecer específicamente mediante la palabra clave enabledForAllModels:

@ phraselist abc enabledForAllModels

Dos ejemplos de cómo establecer una lista de frases en disabledForAllModels:

@ phraselist abc disabledForAllModels

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

@ question disabledForAllModels

Al establecer una lista de frases en disabled, no se usará, incluso cuando se muestre específicamente como una característica:

> 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

Las listas de frases se pueden usar como características para intenciones y entidades específicas, como se describe en la sección siguiente.

Adición de características a intenciones y entidades

El aprendizaje automático funciona tomando características y aprendiendo cómo se relacionan con la intención o entidad deseadas a partir de expresiones de ejemplo. De forma predeterminada, las características son simplemente las palabras que componen expresiones. Las listas de frases proporcionan un medio para agrupar varias palabras en una nueva característica; esto hace que el aprendizaje automático se generalice mejor a partir de menos ejemplos. De forma predeterminada, las listas de frases son globales y se aplican a todos los modelos de aprendizaje automático, pero también puede vincularlas a intenciones o entidades específicas. También puedes usar intenciones o entidades como características para detectar otras intenciones como entidades. Esto proporciona modularidad para que puedas crear conceptos más complejos a partir de bloques de creación más sencillos.

Nota:

En el aprendizaje automático, una característica es un texto que describe un rasgo distintivo o un atributo de datos que el sistema observa y del que aprende. Las listas de frases, las intenciones y las entidades se pueden usar como características como se explica en esta y en las secciones siguientes.

Las características se pueden agregar a cualquier intención o entidad aprendidas mediante la palabra clave usesFeature.

Agregar una lista de frases como una característica

Las listas de frases pueden agregarse como una característica para las intenciones o entidades. Esto ayuda a esas intenciones o entidades específicas sin afectar a otras intenciones y entidades. A continuación se muestra un ejemplo de cómo definir una lista de frases como una característica para otro modelo:

> 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

Incorporación de una entidad o intención como característica

A continuación se muestran ejemplos de cómo agregar intenciones y entidades como características con 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

Metadatos

Puedes incluir metadatos relacionados con la aplicación LUIS o la base de conocimiento de QnA Maker en el archivo .lu. Esto le ayudará a dirigir el analizador para que controle el contenido de LU correctamente. Normalmente, los metadatos se agregan al principio del archivo .lu.

A continuación, se muestra cómo definir la información de configuración con > !#:

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

Tenga en cuenta que cualquier información que se pase explícitamente a través de argumentos de la CLI invalidará la información del archivo .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

Consulta la tabla siguiente para obtener una descripción de los valores de metadatos de la aplicación usados en el ejemplo anterior. Para obtener información sobre app.settings en LUIS, consulta [App and version settings][luis-metadata] en la documentación de LUIS.

Metadatos Descripción
Nombre Tu nombre de aplicación
VersionId Nombre de esa versión específica
Referencia cultural El idioma usado por la aplicación
Versión de esquema El esquema de LUIS se actualiza cada vez que se agrega una nueva característica o configuración en LUIS. Usa el número de versión de esquema que usaste al crear o actualizar el modelo de LUIS.

Referencias externas

En las secciones siguientes se detalla cómo hacer referencias a archivos locales e identificadores URI.

Referencias de archivo locales

Nota:

Azure AI QnA Maker se retirará el 31 de marzo de 2025. A partir del 1 de octubre de 2022, no podrá crear nuevos recursos o bases de conocimiento de QnA Maker. Ya hay disponible una versión más reciente de la funcionalidad de preguntas y respuestas como parte de Lenguaje de Azure AI.

La respuesta a preguntas personalizadas, una característica de Lenguaje de Azure AI, es la versión actualizada del servicio QnA Maker. Para obtener más información sobre la compatibilidad con preguntas y respuestas en Bot Framework SDK, consulte Comprensión del lenguaje natural.

Hace referencia al archivo .lu. Siga la sintaxis de vínculo de Markdown. Entre las referencias que se admiten se incluyen:

  • Referencia a otro archivo .lu a través de [link name](<.lu file name>). La referencia puede ser una ruta de acceso absoluta o una ruta de acceso relativa del archivo .lu contenedor.
  • La referencia a una carpeta con otros archivos .lu se admite mediante:
    • [link name](<.lu file path>*): busca archivos .lu en la ruta de acceso absoluta o relativa especificada
    • [link name](<.lu file path>**): busca de forma recursiva archivos .lu en la ruta de acceso absoluta o relativa especificada, incluidas subcarpetas.
  • También puede agregar referencias a expresiones definidas en un archivo específico en una sección de intención o como pares de QnA.
    • [link name](<.lu file path>#<INTENT-NAME>): busca todas las expresiones que se encuentran en <NOMBRE DE INTENCIÓN> en el archivo .lu y las agrega a la lista de expresiones en las que se especifica la referencia.
    • [link name](<.lu file path>#<INTENT-NAME>*utterances*): busca todas las expresiones (no patrones) que se encuentran en <NOMBRE DE INTENCIÓN> en el archivo .lu y las agrega a la lista de expresiones en las que se especifica la referencia.
    • [link name](<.lu file path>#<INTENT-NAME>*patterns*): busca todos los patrones (no expresiones) que se encuentran en <NOMBRE DE INTENCIÓN> en el archivo .lu y los agrega a la lista de patrones en los que se especifica la referencia.
    • [link name](<.lu file path>#*utterances*): busca todas las expresiones en el archivo .lu y las agrega a la lista de expresiones en las que se especifica la referencia.
    • [link name](<.lu file path>#*patterns*): busca todos los patrones en el archivo .lu y los agrega a la lista de expresiones en las que se especifica la referencia.
    • [link name](<.lu file path>#*utterancesAndPatterns*): busca todas las expresiones y patrones que se encuentran en el archivo .lu y las agrega a la lista de expresiones en las que se especifica la referencia.
    • [link name](<.qna file path>#$name?): busca todas las modificaciones de la definición de modificación específica en el contenido del archivo .qna y las agrega a la lista de expresiones en la que se especifica la referencia.
    • [link name](<.qna file path>#*alterations*?): busca todas las modificaciones en el contenido del archivo .qna y las agrega a la lista de expresiones en las que se especifica la referencia.
    • [link name](<.qna file path>#?question-to-find?): busca todas las variantes de una pregunta específica y las agrega a la lista de expresiones en las que se especifica la referencia. Tenga en cuenta que los espacios de la pregunta deberán reemplazarse por el carácter -.
    • [link name](<.qna file path>#*answers*?): busca todas las respuestas y las agrega a la lista de expresiones en las que se especifica la referencia.

A continuación se muestra un ejemplo de las referencias mencionadas anteriormente:

> 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.

Referencias delidentificador URI

A continuación se muestran ejemplos de cómo hacer referencias de 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*)

Información adicional