Поделиться через


Динамическое изменение списков фраз VCD Кортаны

Предупреждение

Эта функция больше не поддерживается с обновления Windows 10 за май 2020 г. (версия 2004, кодовое имя "20H1").

Сведения о том, как Кортана преобразует современные возможности для повышения производительности, см. в статье Кортана в Microsoft 365 .

Получите доступ к списку поддерживаемых фраз (элементов PhraseList ) в файле определения голосовых команд (VCD) во время выполнения, используя результат распознавания речи.

Примечание

Голосовая команда — это один речевой фрагмент с определенным намерением, определенный в файле определения голосовых команд (VCD), направленный на установленное приложение через Кортану.

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

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

Динамическое изменение списка фраз во время выполнения полезно, если голосовая команда связана с задачей, связанной с определенными пользователем или временными данными приложения.

Например, предположим, что у вас есть приложение для путешествий, в котором пользователи могут входить в места назначения, и вы хотите, чтобы пользователи могли запустить приложение, произведя имя приложения, а затем "Показать поездку в <место назначения>". В самом элементе ListenFor необходимо указать примерно следующее: <ListenFor> Show trip to {destination} </ListenFor>, где "destination" — это значение атрибута Label для PhraseList.

Обновление списка фраз во время выполнения избавляет от необходимости создавать отдельный элемент ListenFor для каждого возможного назначения. Вместо этого вы можете динамически заполнять PhraseList назначениями, заданными пользователем при вводе маршрута.

Дополнительные сведения о PhraseList и других элементах VCD см. в справочнике по элементам и атрибутам VCD версии 1.2 .

Совет

Предварительные требования

Если вы — начинающий разработчик приложений универсальной платформы Windows (UWP), прочитайте указанные ниже статьи, чтобы ознакомиться с описанными здесь технологиями.

Рекомендации по взаимодействию с пользователем

Полезные советы по разработке полезных и привлекательных приложений с поддержкой речи см. в статье Рекомендации по проектированию Кортаны для интеграции приложения с Кортаной и взаимодействие с речью .

Определение команды и обновление списка фраз

Ниже приведен пример VCD-файла, который определяет команду "showTripToDestination" и PhraseList , который определяет три варианта назначения в приложении Adventure Works для путешествий. Когда пользователь сохраняет и удаляет назначения в приложении, приложение обновляет параметры в 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>

Чтобы обновить элемент PhraseList в VCD-файле, получите элемент CommandSet , содержащий список фраз. Используйте атрибут Name этого элемента CommandSet (Имя должно быть уникальным в VCD-файле) в качестве ключа для доступа к свойству VoiceCommandManager.InstalledCommandSets и получения ссылки VoiceCommandSet .

Определив набор команд, получите ссылку на список фраз, который требуется изменить, и вызовите метод SetPhraseListAsync ; используйте атрибут Label элемента PhraseList и массив строк в качестве нового содержимого списка фраз.

Примечание

При изменении списка фраз будет заменен весь список фраз. Если вы хотите вставить новые элементы в список фраз, необходимо указать как существующие, так и новые элементы в вызове Метода SetPhraseListAsync.

В этом примере мы обновим элемент PhraseList , показанный в предыдущем примере, с дополнительным назначением в 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”});
}

Комментарии

Использование PhraseList для ограничения распознавания подходит для относительно небольшого набора или слов. Если набор слов слишком велик (например, сотни слов) или не должен быть ограничен вообще, используйте элементы PhraseTopic и Subject , чтобы уточнить релевантность результатов распознавания речи для повышения масштабируемости.

В нашем примере у нас есть PhraseTopic со сценарием "Поиск", дополнительно уточненный субъектом "Город\Государство".

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