Google 动作列表响应类型后如何正确处理用户文本输入
How to properly handle user text input after Google Action List response type
我们使用 actions.intent.OPTION
来处理 selection 用于 Google 操作中的列表响应类型。 actions.intent.OPTION
不仅处理用户 selection(触摸)输入,还处理列表后的用户 (voice/text) 响应,并将用户响应很好地映射到列表中的项目。它还在一定程度上处理了拼写错误。
但是,很难处理不想 select 来自列表响应的用户响应。基于 Google 官方指南
(https://developers.google.com/actions/assistant/responses#list),我们使用建议芯片来调整或扩展对话。
我有一个用例,其中用户可能使用很少的文本来指示 he/she 不执行 selection。例如:
bot: which food do you want?
(showing list)
- rice
- salad
- pizza
(suggestion chip)
not in this list
这些是我们可以处理的用户响应:
- 点击列表中的 selection(米饭、沙拉、披萨)
- 用户文本或语音指示列表中的项目(或类似于列表中的项目)。 Google 行动可以考虑 "fried rice" 为 rice selection.
- touch suggestions chip ('not in this list') 表示用户不想要列表中的所有项目。我们可以处理这个对话流程。
但是,如果用户说出其他文本,例如 "i change my mind"、"let's do something else"、"let's do it again" 或 "restart this step",我们将无法处理,因为 Google action 和 dialogflow 自动将这些文本映射到列表中最相似的项目(字符串相似度)。
对于没有 select 列表中除建议卡片之外的任何项目的用户响应,有什么好的做法可以处理吗?我觉得一个建议芯片不足以处理用户响应的许多变化。
当用户 select 通过语音输入列表项时,Google 助理会根据键和 list item 的同义词映射输入。然后将密钥作为输入发送回您的 Dialogflow 代理。当映射不成功时,不会触发 actions_intents_OPTION
事件,并且输入会像任何其他输入一样简单地与所有意图匹配。这意味着您可以通过简单地为它们添加一个正常的意图来捕获像 "let's do something else" 这样的请求。为确保此意图在 list-select 流之外不匹配,您应该在显示列表时设置上下文并将该上下文作为输入上下文添加到 ChangeMyMindIntent
.
以下是更详细的工作原理:
- 正常列表 selection 将被
FoodSelectionIntent
捕获。此意图响应 actions_intents_OPTIONS
事件,即不需要训练短语。它应该具有 food_selection
输入上下文,以将其与其他列表 select 意图分开。
- 然后,您可以为用户除了实际 select 访问一个项目(
ChangeMyMindIntent
、RestartIntent
)之外可以发出的所有请求添加额外的意图。这些也应该具有 food_selection
上下文,以便它们在对话中的任何其他点都不匹配。
- 当您呈现列表时,您也设置了
food_selection
上下文。这可确保下一个 webhook 请求将包含有效列表 selection(由 FoodSelectionIntent
捕获)或您已限定为 food_selection
上下文的替代意图之一。
- 不要忘记在该流程完成后删除
food_selection
上下文(将其生命周期设置为 0),以不限制下一个请求的意图匹配。
我们使用 actions.intent.OPTION
来处理 selection 用于 Google 操作中的列表响应类型。 actions.intent.OPTION
不仅处理用户 selection(触摸)输入,还处理列表后的用户 (voice/text) 响应,并将用户响应很好地映射到列表中的项目。它还在一定程度上处理了拼写错误。
但是,很难处理不想 select 来自列表响应的用户响应。基于 Google 官方指南 (https://developers.google.com/actions/assistant/responses#list),我们使用建议芯片来调整或扩展对话。
我有一个用例,其中用户可能使用很少的文本来指示 he/she 不执行 selection。例如:
bot: which food do you want?
(showing list)
- rice
- salad
- pizza
(suggestion chip)
not in this list
这些是我们可以处理的用户响应:
- 点击列表中的 selection(米饭、沙拉、披萨)
- 用户文本或语音指示列表中的项目(或类似于列表中的项目)。 Google 行动可以考虑 "fried rice" 为 rice selection.
- touch suggestions chip ('not in this list') 表示用户不想要列表中的所有项目。我们可以处理这个对话流程。
但是,如果用户说出其他文本,例如 "i change my mind"、"let's do something else"、"let's do it again" 或 "restart this step",我们将无法处理,因为 Google action 和 dialogflow 自动将这些文本映射到列表中最相似的项目(字符串相似度)。
对于没有 select 列表中除建议卡片之外的任何项目的用户响应,有什么好的做法可以处理吗?我觉得一个建议芯片不足以处理用户响应的许多变化。
当用户 select 通过语音输入列表项时,Google 助理会根据键和 list item 的同义词映射输入。然后将密钥作为输入发送回您的 Dialogflow 代理。当映射不成功时,不会触发 actions_intents_OPTION
事件,并且输入会像任何其他输入一样简单地与所有意图匹配。这意味着您可以通过简单地为它们添加一个正常的意图来捕获像 "let's do something else" 这样的请求。为确保此意图在 list-select 流之外不匹配,您应该在显示列表时设置上下文并将该上下文作为输入上下文添加到 ChangeMyMindIntent
.
以下是更详细的工作原理:
- 正常列表 selection 将被
FoodSelectionIntent
捕获。此意图响应actions_intents_OPTIONS
事件,即不需要训练短语。它应该具有food_selection
输入上下文,以将其与其他列表 select 意图分开。 - 然后,您可以为用户除了实际 select 访问一个项目(
ChangeMyMindIntent
、RestartIntent
)之外可以发出的所有请求添加额外的意图。这些也应该具有food_selection
上下文,以便它们在对话中的任何其他点都不匹配。 - 当您呈现列表时,您也设置了
food_selection
上下文。这可确保下一个 webhook 请求将包含有效列表 selection(由FoodSelectionIntent
捕获)或您已限定为food_selection
上下文的替代意图之一。 - 不要忘记在该流程完成后删除
food_selection
上下文(将其生命周期设置为 0),以不限制下一个请求的意图匹配。