Cortana VCD の語句一覧の動的な変更

警告

この機能は、Windows 10 May 2020 Update (バージョン 2004、コードネーム "20H1") ではサポートされなくなりました。

音声認識の結果を使って、音声コマンド定義 (VCD) ファイルに含まれているサポート対象語句の一覧 (PhraseList 要素) にアクセスし、この一覧を実行時に更新することができます。

注意

音声コマンドは、特定の意図を持つ 1 つの発話であり、音声コマンド定義 (VCD) ファイルで定義されています。Cortana を通じてインストール済みアプリに指示が伝えられます。

VCD ファイルでは、1 つ以上の音声コマンドが定義されており、各音声コマンドは固有の目的を持っています。

音声コマンド定義は複雑さが異なる場合があります。 制約のある 1 つの発話から、より柔軟な自然言語の発話のコレクションまで、すべて同じ意図を示すあらゆるものをサポートできます。

音声コマンドから実行されるタスクにユーザー定義のアプリ データや一時的なアプリ データが関係する場合は、実行時に動的に語句一覧を変更できると便利です。

たとえば、ユーザーが目的地を入力できる旅行アプリがあり、ユーザーがアプリ名の後に「<目的地> 旅行を表示」と言うと、アプリを起動できるようにするとします。 この場合、ListenFor 要素自体は <ListenFor> Show trip to {destination} </ListenFor> のように指定します。ここで、"destination" は PhraseListLabel 属性の値です。

実行時に語句一覧を更新すれば、考えられる目的地ごとに別々の ListenFor 要素を作成する必要がなくなります。 代わりに、ユーザーが旅程の入力時に指定した目的地を動的に PhraseList に設定できます。

PhraseList とその他の VCD 要素について詳しくは、VCD 要素および属性 v1.2 のリファレンスをご覧ください。

ヒント

必要条件

ユニバーサル Windows プラットフォーム (UWP) アプリを開発するのが初めての場合は、以下のトピックに目を通して、ここで説明されているテクノロジをよく理解できるようにしてください。

ユーザー エクスペリエンス ガイドライン

アプリと Cortana を統合する方法については「Cortana の設計ガイドライン」を、便利で魅力的な音声認識対応アプリの設計に役立つヒントについては「音声操作」を参照してください。

コマンドの識別と語句一覧の更新

VCD ファイルの例を次に示します。このファイルでは、Command "showTripToDestination" と、目的地を表す 3 つのオプションを含む PhraseListAdventure 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>

VCD ファイルの PhraseList 要素を更新するには、語句一覧を含む CommandSet 要素を取得します。 CommandSet 要素の Name 属性 (Name は VCD ファイル内で重複しないようにします) をキーとして VoiceCommandManager.InstalledCommandSets プロパティにアクセスし、VoiceCommandSet の参照を取得します。

コマンド セットを識別したら、変更する語句一覧への参照を取得し、SetPhraseListAsync メソッドを呼び出します。このとき、PhraseList 要素の Label 属性と、語句一覧の新しいコンテンツとなる文字列の配列を指定します。

注意

語句一覧を変更すると、語句一覧全体が置き換えられます。 語句一覧に新しい項目を追加する場合は、既にある項目と新しい項目の両方を指定して 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 要素を使用して、音声認識結果の関連性を調整してスケーラビリティを向上させます。

この例では、Scenario が "Search" の PhraseTopic があり、"City\State" という Subject によってさらに絞り込まれています。

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