Compartir a través de


Modificación dinámica de listas de frases de Cortana VCD

Advertencia

Esta característica ya no se admite a partir de la actualización de mayo de 2020 de Windows 10 (versión 2004, nombre de código "20H1").

Obtenga acceso y actualice la lista de frases admitidas (elementos PhraseList ) en un archivo de definición de comandos de voz (VCD) en tiempo de ejecución mediante el resultado del reconocimiento de voz.

Nota:

Un comando de voz es una expresión única con una intención específica, definida en un archivo de definición de comandos de voz (VCD), dirigida a una aplicación instalada a través de Cortana.

Un archivo VCD define uno o varios comandos de voz, cada uno con una intención única.

Las definiciones de comandos de voz pueden variar en complejidad. Pueden admitir cualquier cosa desde una sola expresión restringida a una colección de expresiones de lenguaje natural más flexibles, todas denotando la misma intención.

La modificación dinámica de una lista de frases en tiempo de ejecución es útil si el comando de voz es específico de una tarea que implica algún tipo de datos de aplicación definidos por el usuario o transitorios.

Por ejemplo, supongamos que tiene una aplicación de viaje en la que los usuarios pueden escribir destinos y quiere que los usuarios puedan iniciar la aplicación diciendo el nombre de la aplicación seguido de "Mostrar viaje al <destino>". En el propio elemento ListenFor , especificaría algo parecido a : <ListenFor> Show trip to {destination} </ListenFor>, donde "destination" es el valor del atributo Label para PhraseList.

La actualización de la lista de frases en tiempo de ejecución elimina la necesidad de crear un elemento ListenFor independiente para cada destino posible. En su lugar, puede rellenar de forma dinámica PhraseList con destinos especificados por el usuario a medida que escriben sus itinerarios.

Para obtener más información sobre PhraseList y otros elementos de VCD, consulte la referencia de elementos y atributos de VCD v1.2.

Sugerencia

Requisitos previos

Si no estás familiarizado con el desarrollo de aplicaciones de Plataforma universal de Windows (UWP), consulta estos temas para familiarizarte con las tecnologías que se describen aquí.

Directrices de experiencia del usuario

Consulta Directrices de diseño de Cortana para obtener información sobre cómo integrar tu aplicación con Cortana y interacciones de voz para obtener sugerencias útiles sobre cómo diseñar una aplicación habilitada para voz útil y atractiva.

Identificar el comando y actualizar la lista de frases

Este es un archivo VCD de ejemplo que define un comando "showTripToDestination" y un PhraseList que define tres opciones para el destino en nuestra aplicación de viajes Adventure Works . A medida que el usuario guarda y elimina destinos en la aplicación, la aplicación actualiza las opciones en PhraseList.

<?xml version="1.0" encoding="utf-8"?>
<VoiceCommands xmlns="https://schemas.microsoft.com/voicecommands/1.1">
  <CommandSet xml:lang="en-us" Name="AdventureWorksCommandSet_en-us">
    <AppName> Adventure Works, </AppName>
    <Example> Show trip to London </Example>

    <Command Name="showTripToDestination">
      <Example> show trip to London  </Example>
      <ListenFor> show trip to {destination} </ListenFor>
      <Feedback> Showing trip to {destination} </Feedback>
      <Navigate/>
    </Command>

    <PhraseList Label="destination">
      <Item> London </Item>
      <Item> Dallas </Item>
      <Item> New York </Item>
    </PhraseList>

  </CommandSet>

<!-- Other CommandSets for other languages -->

</VoiceCommands>

Para actualizar un elemento PhraseList en el archivo VCD, obtenga el elemento CommandSet que contiene la lista de frases. Use el atributo Name de ese elemento CommandSet (Name debe ser único en el archivo VCD) como clave para tener acceso a la propiedad VoiceCommandManager.InstalledCommandSets y obtener la referencia voiceCommandSet.

Después de identificar el conjunto de comandos, obtenga una referencia a la lista de frases que desea modificar y llamar al método SetPhraseListAsync ; use el atributo Label del elemento PhraseList y una matriz de cadenas como el nuevo contenido de la lista de frases.

Nota:

Si modifica una lista de frases, se reemplaza toda la lista de frases. Si desea insertar nuevos elementos en una lista de frases, debe especificar los elementos existentes y los nuevos elementos de la llamada a SetPhraseListAsync.

En este ejemplo, se actualiza phraseList que se muestra en el ejemplo anterior con un destino adicional a Phoenix.

Windows.ApplicationModel.VoiceCommands.VoiceCommandDefinition.VoiceCommandSet commandSetEnUs;

if (Windows.ApplicationModel.VoiceCommands.VoiceCommandDefinitionManager.
      InstalledCommandSets.TryGetValue(
        "AdventureWorksCommandSet_en-us", out commandSetEnUs))
{
  await commandSetEnUs.SetPhraseListAsync(
    "destination", new string[] {"London", "Dallas", "New York", "Phoenix"});
}

Comentarios

El uso de phraseList para restringir el reconocimiento es adecuado para un conjunto o palabras relativamente pequeños. Cuando el conjunto de palabras es demasiado grande (cientos de palabras, por ejemplo), o no debe restringirse en absoluto, use el elemento PhraseTopic y un elemento Subject para refinar la relevancia de los resultados del reconocimiento de voz para mejorar la escalabilidad.

En nuestro ejemplo, tenemos un PhraseTopic con un escenario de "búsqueda", refinado aún más por un asunto de "Ciudad\Estado".

<?xml version="1.0" encoding="utf-8"?>
<VoiceCommands xmlns="https://schemas.microsoft.com/voicecommands/1.1">
  <CommandSet xml:lang="en-us" Name="AdventureWorksCommandSet_en-us">
    <AppName> Adventure Works, </AppName>
    <Example> Show trip to London </Example>

    <Command Name="showTripToDestination">
      <Example> show trip to London  </Example>
      <ListenFor> show trip to {destination} </ListenFor>
      <Feedback> Showing trip to {destination} </Feedback>
      <Navigate/>
    </Command>

    <PhraseList Label="destination">
      <Item> London </Item>
      <Item> Dallas </Item>
      <Item> New York </Item>
    </PhraseList>

    <PhraseTopic Label="destination" Scenario="Search">
      <Subject>City/State</Subject>
    </PhraseTopic>

  </CommandSet>