这有点难以解释,所以我希望使用一个例子是最有效的。
我们正在构建一个服务,允许Parent
维护他们的列表Children
并针对这些执行操作Children
。
是Parent
用户向 DF 代理/意图发出话语。
在Parent
使用 DF 之前,通过 Web UI(非 DF)将他们的孩子(姓名)添加到数据库中。
这意味着我们可能有一个数据库表示,如下所示
父表
ID Name
1 User A
2 User B
儿童桌
ID NAME PARENT_ID
1 John 1
2 Jon 2
3 Jake 2
意图短语具有以下格式和参数
"Do {ACTION} for {CHILD_NAME}"
我们遇到的问题是如何解决这个问题,以便在代理提取参数时,将它们以正确的子名称传递给履行,以便我们可以使用该名称让用户运行验证并提供实现的上下文。
例如,如果用户 A发出以下话语
"Do {ACTION} for John"
我们如何确保代理在将参数传递给履行时提取“John”而不是“Jon”?
我已经看到了一些关于会话实体的建议,甚至通读了City Streets Trivia Example,但是会话实体似乎依赖于会话特定值的想法(我的示例中的子名称,链接中提供的示例中的街道名称)是全局的维护而不是特定于任何用户。
我不确定在我的情况下这将如何工作。不能指望我维护所有可能名称的列表,即使可以,我也会有多个John和Jon的条目,并且仍然无法让代理知道我会假设使用哪个。
也许有一种方法可以为每次使用动态添加实体占位符,并根据我们存储在数据库中的值动态地为该实体添加可能的参数值,但这似乎不可维护且不切实际?
DF 中对话式设计的此类问题的解决方案是什么?这似乎很常见(将项目从待办事项列表或购物清单应用程序中标记出来)。