Freigeben über


Dynamisches Ändern von Cortana VCD-Begriffslisten

Warnung

Diese Funktion wird seit dem Windows 10 Mai 2020 Update (Version 2004, Codename „20H1“) nicht mehr unterstützt.

Greifen Sie auf die Liste der unterstützten Ausdrücke (PhraseList-Elemente ) in einer VCD-Datei (Voice Command Definition) zur Laufzeit mithilfe des Spracherkennungsergebnisses zu, und aktualisieren Sie sie.

Hinweis

Ein Sprachbefehl ist eine einzelne Äußerung mit einer bestimmten Absicht, die in einer VCD-Datei (Voice Command Definition) definiert ist, die an eine installierte App über Cortana gerichtet ist.

Eine VCD-Datei definiert einen oder mehrere Sprachbefehle, jeweils mit einer eindeutigen Absicht.

Sprachbefehlsdefinitionen können in der Komplexität variieren. Sie können alles von einer einzigen, eingeschränkten Äußerung bis zu einer Sammlung flexiblerer, natürlicher Sprache Ausdrücke unterstützen, die denselben Zweck bezeichnen.

Das dynamische Ändern einer Begriffsliste zur Laufzeit ist nützlich, wenn der Sprachbefehl spezifisch für eine Aufgabe ist, die eine Art von benutzerdefinierten oder vorübergehenden App-Daten umfasst.

Angenommen, Sie haben eine Reise-App, in der Benutzer Ziele eingeben können, und Sie möchten, dass Benutzer die App starten können, indem Sie den App-Namen gefolgt von "Reise zum <Ziel> anzeigen" sagen. Im ListenFor-Element selbst würden Sie etwa folgendes angeben: <ListenFor> Show trip to {destination} </ListenFor>, wobei "destination" der Wert des Label-Attributs für die PhraseList ist.

Durch das Aktualisieren der Begriffsliste zur Laufzeit ist es nicht erforderlich, für jedes mögliche Ziel ein separates ListenFor-Element zu erstellen. Stattdessen können Sie PhraseList dynamisch mit vom Benutzer angegebenen Zielen auffüllen, während er seine Reiserouten eingibt.

Weitere Informationen zu PhraseList und anderen VCD-Elementen finden Sie in der VCD-Referenz zu den VCD-Elementen und Attributen v1.2.

Tipp

Voraussetzungen

Wenn Sie noch nicht mit der Entwicklung von Universelle Windows-Plattform(UWP)-Apps vertraut sind, schauen Sie sich diese Themen an, um sich mit den hier erläuterten Technologien vertraut zu machen.

Richtlinien für die Benutzeroberfläche

Informationen zum Integrieren Ihrer App in Cortana- und Sprachinteraktionen finden Sie in den Entwurfsrichtlinien für Cortana und Spracherkennung.

Identifizieren des Befehls und Aktualisieren der Begriffsliste

Hier ist eine Beispiel-VCD-Datei, die einen Befehl "showTripToDestination" und eine PhraseList definiert, die drei Optionen für das Ziel in unserer Adventure Works-Reise-App definiert. Wenn der Benutzer Ziele in der App speichert und löscht, aktualisiert die App die Optionen in der 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>

Um ein PhraseList-Element in der VCD-Datei zu aktualisieren, rufen Sie das CommandSet-Element ab, das die Begriffsliste enthält. Verwenden Sie das Name-Attribut dieses CommandSet-Elements (Name muss in der VCD-Datei eindeutig sein) als Schlüssel, um auf die VoiceCommandManager.InstalledCommandSets-Eigenschaft zuzugreifen und den VoiceCommandSet-Verweis abzurufen.

Nachdem Sie den Befehlssatz identifiziert haben, rufen Sie einen Verweis auf die Begriffsliste ab, die Sie ändern möchten, und rufen Sie die SetPhraseListAsync-Methode auf. Verwenden Sie das Label-Attribut des PhraseList-Elements und ein Array von Zeichenfolgen als neuen Inhalt der Ausdrucksliste.

Hinweis

Wenn Sie eine Begriffsliste ändern, wird die gesamte Begriffsliste ersetzt. Wenn Sie neue Elemente in eine Begriffsliste einfügen möchten, müssen Sie sowohl die vorhandenen Elemente als auch die neuen Elemente im Aufruf von SetPhraseListAsync angeben.

In diesem Beispiel wird die im vorherigen Beispiel gezeigte PhraseList mit einem zusätzlichen Ziel für Phoenix aktualisiert.

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"});
}

Hinweise

Die Verwendung einer PhraseList zum Einschränken der Erkennung eignet sich für einen relativ kleinen Satz oder Wörter. Wenn der Satz von Wörtern zu groß ist (z. B. Hunderte von Wörtern), oder sollte überhaupt nicht eingeschränkt werden, verwenden Sie das PhraseTopic-Element und ein Subject-Element , um die Relevanz der Spracherkennungsergebnisse zu verfeinern, um die Skalierbarkeit zu verbessern.

In unserem Beispiel haben wir einen PhraseTopic mit einem Szenario von "Suche", das von einem Betreff von "City\State" weiter verfeinert wird.

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