動態修改 Cortana VCD 片語清單
警告
自 Windows 10 May 2020 更新版 (版本 2004,代號「20H1」) 起,不再支援此功能。
使用語音辨識結果,在執行階段存取及更新語音命令定義 (VCD) 檔案中支援的片語 (PhraseList 元素) 清單。
注意
語音命令是具有特定意圖的單一語句,在語音命令定義 (VCD) 檔案中定義,透過 Cortana 針對已安裝的應用程式。
VCD 檔案會定義一或多個語音命令,每個命令都有唯一的意圖。
語音命令定義可能會因複雜度而異。 他們可以支援任何項目,從單一、限制語句到更有彈性、自然語言語句的集合,都表示相同的意圖。
如果語音命令專屬於涉及某種使用者定義或暫時性應用程式資料的工作,在執行階段動態修改片語清單會很有用。
舉個例子,假設您有一個旅行應用程式,使用者可以在其中輸入目的地,並且您希望使用者能夠透過說出應用程式名稱並後跟「顯示<目的地>行程」來啟動該應用程式。 在 Listen For 元素本身中<ListenFor> Show trip to {destination} </ListenFor>
,您可以指定類似以下內容:,其中「destination」是片語清單的 Label 屬性的值。
在執行階段更新片語清單,不需要為每個可能的目的地建立個別的 ListenFor 元素。 相反地,您可以在使用者輸入行程時,以使用者指定的目的地動態填入 PhraseList。
如需 PhraseList 和其他 VCD 元素的詳細資訊,請參閱 VCD 元素和屬性 v1.2 參考。
提示
先決條件
如果您是開發通用 Windows 平台 (UWP) 應用程式的新手,請瀏覽這些主題以熟悉此處討論的技術。
使用者體驗指引
如需如何整合應用程式與 Cortana 和語音互動的資訊,請參閱 Cortana 設計指導方針,以取得設計實用且吸引人的語音啟用應用程式的實用秘訣。
識別命令並更新片語清單
以下是定義命令「showTripToDestination」的範例 VCD 檔案,以及定義 Adventure Works 旅行應用程式中目的地三個選項的 PhraseList。 當使用者在應用程式中儲存和刪除目的地時,應用程式會更新 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 屬性 (名稱在 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 元素來精簡語音辨識結果的相關性,以改善延展性。
在我們的範例中,我們有一個案例為「搜尋」的 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>